1,FROM 指定基础镜像. FROM 指令是 Dockfile 文件中的收条命令, 启动构建流程后, Docker 将会给予该镜像构建新镜像.
FROM <image>
或者
FROM <image>:<tag>
或者
FROM <image>:<digest>
2,RUN 执行命令. 在镜像的构建过程中执行特定的命令, 并生成一个中间镜像.
RUN <command>
或者
RUN ["executable", "param1", "param2"]
3,COPY 复制文件
COPY < 源路径 >...< 目标路径 >
COPY ["< 源路径 1>",..."目标路径"]
< 目标路径 > 可以是容器的绝对路径, 也可以是相对工作目录的相对路径. 目标路径不需要实现创建, 如果目标目录不存在会在复制文件前先行创建却是穆勒.
4,ADD 添加文件
ADD < 源路径 >...< 目标路径 >
ADD ["< 源路径 1>",..."目标路径"]
< 源路径 > 可以是 URL,Docker 引擎会试图去下载这个链接的文件到目标路径去.
5,ENV 设置环境变了
- ENV <key> <value>
- ENV <key1>=<value1> <key2>=<value2>...
后面的其他指令, 以及运行时的应用都可以使用.
6,EXPOSE 为构建的镜像设置监听端口, 使容器在运行时监听.
EXPOSE <port> [<port>...]
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 <image> -d 时,-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 <key>=<value> <key>=<value> <key>=<value> ...
13,ARG 指定传递给构建运行时的变量
ARG <name>[=<default value>]
来源: http://www.bubuko.com/infodetail-3035976.html