1、FROM指定基础镜像。FROM指令是Dockfile文件中的收条命令,启动构建流程后,Docker将会给予该镜像构建新镜像。
FROM
或者
FROM :
或者
FROM :
2、RUN执行命令。在镜像的构建过程中执行特定的命令,并生成一个中间镜像。
RUN
或者
RUN ["executable", "param1", "param2"]
3、COPY复制文件
COPY <源路径>...<目标路径>
COPY ["<源路径1>",..."目标路径"]
<目标路径>可以是容器的绝对路径,也可以是相对工作目录的相对路径。目标路径不需要实现创建,如果目标目录不存在会在复制文件前先行创建却是穆勒。
4、ADD添加文件
ADD <源路径>...<目标路径>
ADD ["<源路径1>",..."目标路径"]
<源路径>可以是URL,Docker引擎会试图去下载这个链接的文件到目标路径去。
5、ENV设置环境变了
ENV
ENV = =...
后面的其他指令,以及运行时的应用都可以使用。
6、EXPOSE为构建的镜像设置监听端口,使容器在运行时监听。
EXPOSE [...]
EXPOSE指令并不会让容器监听host的端口。
7、VOLUME用于创建挂载点,即向基于所构建镜像创始的容器添加卷。
VOLUME ["/data"]
一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
- 卷可以容器间共享和重用
- 容器并不一定要和其它容器共享卷
- 修改卷后会立即生效
- 对卷的修改不会对镜像产生影响
- 卷会一直存在,直到没有任何容器在使用它
VOLUME 让我们可以将源代码、数据或其它内容添加到镜像中,而又不并提交到镜像中,并使我们可以多个容器间共享这些内容。
8、WORKDIR指定工作目录。
WORKDIR /path/to/workdir
通过WORKDIR设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行
9、USER指定当前用户
USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group
使用USER指定用户时,可以使用用户名、UID 或 GID,或是两者的组合
使用USER指定用户后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT 都将使用该用户。镜像构建完成后,通过 docker run 运行容器时,可以通过 -u
参数来覆盖所指定的用户。
10、CMD用于指定容器启动时所要执行的命令。
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
CMD 在容器运行的时候执行,在构建时不进行任何操作。
11、ENTRYPOINT
ENTRYPOINT 用于给容器配置一个可执行程序。也就是说,每次使用镜像创建容器时,通过 ENTRYPOINT 指定的程序都会被设置为默认程序。ENTRYPOINT 有以下两种形式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
ENTRYPOINT 与 CMD 非常类似,不同的是通过docker run
执行的命令不会覆盖 ENTRYPOINT,而docker run
命令中指定的任何参数,都会被当做参数再次传递给 ENTRYPOINT。Dockerfile 中只允许有一个 ENTRYPOINT 命令,多指定时会覆盖前面的设置,而只执行最后的 ENTRYPOINT 指令。
docker run
运行容器时指定的参数都会被传递给 ENTRYPOINT ,且会覆盖 CMD 命令指定的参数。如,执行docker run
时,-d 参数将被传递给入口点。
也可以通过docker run --entrypoint
重写 ENTRYPOINT 入口点。如:可以像下面这样指定一个容器执行程序:
ENTRYPOINT ["/usr/bin/nginx"]
完整构建代码:# Version: 0.0.3
FROM ubuntu:16.04
MAINTAINER 何民三 "[email protected]"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello World, 我是个容器' \
> /var/www/html/index.html
ENTRYPOINT ["/usr/sbin/nginx"]
EXPOSE 80
使用docker build构建镜像,并将镜像指定为 itbilu/test:
docker build -t="itbilu/test" .
构建完成后,使用itbilu/test启动一个容器:
docker run -i -t itbilu/test -g "daemon off;"
在运行容器时,我们使用了 -g "daemon off;"
,这个参数将会被传递给 ENTRYPOINT,最终在容器中执行的命令为 /usr/sbin/nginx -g "daemon off;"
。
12、LABEL
LABEL用于为镜像添加元数据,元数以键值对的形式指定:
LABEL = = = ...
13、ARG指定传递给构建运行时的变量
ARG [=]