dockerfile入门

概念

创建docker image的时候,使用docker build命令。该命令通过读取dockerfile文件,完成image的创建工作。

dockerfile文件包含创建image的指令

创建image的指令无非以下几种:

  1. 拷贝类。从宿主机把文件拷贝到image中
  2. 执行类。执行image环境中的某些命令
  3. 设置类。设置image的参数
  4. 辅助类。比如往docker build传递参数等

一个基本的dockerfile文件:

FROM ubuntu

# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900
CMD    ["x11vnc", "-forever", "-usepw", "-create"]

docker build使用dockerfile:

docker build -f /path/to/a/Dockerfile .

FROM指令

docker本身类似于虚拟机,创建image时,要指定一个已有的image,在其基础上创建。已有的image往往是某个操作系统,或者包含操作系统的image。

一个dockerfile往往只能创建一个image。但也可以创建多个image,一段创建image的指令叫做build stage。build stage之间通过FROM分割

ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-app

FROM extras:${CODE_VERSION}
CMD  /code/run-extras

拷贝类指令

  • WORKDIR。指令image中的路径
  • ADD。往image拷贝内容
  • COPY。往image拷贝内容,和ADD类似,有些细微差别,ADD与COPY相比,主要推荐使用COPY。ADD仅在解压tar包到目标路径时具备优势

执行类指令

  • RUN。运行image中的某个程序,比如apt-get安装依赖库

设置类指令

  • CMD。设置container启动时,自动运行的程序
  • ENTRYPOINT。和CMD一样,不过灵活性更大,可以从宿主机读取参数
  • LABEL。设置一些信息标签,仅供读者查看
  • EXPOSE。描述image暴露的端口
  • ENV。设置image中的环境变量,可以被运行的app获取
  • VOLUME。设置image的volume路径
  • USER。设置RUN, COPY等命令的用户和组,默认是root
  • STOPSIGNAL。设置container关闭时,往app发送的信号
  • HEALTHCHECK。设置container的健康检查机制
  • SHELL。设置RUN, CMD等使用的shell

辅助类

  • ARG。在build iamge过程中,通过命令行传递参数
  • ONBUILD。类似于模版,设置一些本image不会执行,但是基于本image构建的子image会执行的命令

Ref



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825