Dockerfile 常用指令
记录下Dockerfile中常用的指令,完整列表和说明可参考官方文档。
Dockerfile
1 | FROM scratch |
1 | docker build -t IMAGE_NAME:TAG . # 默认使用指定路径下的Dockerfile文件构建镜像,Dockerfile文件不存在时会报错 |
FROM
指定基础镜像。
MAINTAINER
设置镜像作者信息。
WORKDIR
设置镜像的工作目录,默认为/根目录。
ENV
设置环境变量。可设置多个。
EXPOSE
指定容器中的进程会监听某个端口,Docker可以将该端口暴露出来。
VOLUME
将文件或目录声明为volume。
COPY && ADD
COPY和ADD都是用于将构建环境中指定的文件添加到镜像中的。不同的是如果指定的文件是归档文件(tar, zip, tgz, xz等),ADD指令会将其解压,COPY指令不会。
COPY和ADD都支持两种形式的写法:
COPY src dest
COPY ["src", "dest"]
ADD src dest
ADD ["src", "dest"]
RUN && CMD && ENTRYPOINT
RUN指定的命令在docker build构建镜像的时候执行。可以有多个RUN指令,且每个都生效。
CMD指定的命令在容器启动时执行。可以有多个CMD指令,但只有最后一个生效。CMD指定的命令会被docker run之后的参数替换。
ENTRYPOINT指定的命令在容器启动时执行。可以有多个ENTRYPOINT指令,但只有最后一个生效。CMD或docker run之后的参数会被当做参数传递给ENTRYPOINT。ENTRYPOINT命令一定会执行。
RUN、CMD和ENTRYPOINT都支持两种形式的写法:
Shell 格式
1 | <instruction> <command> |
当指令执行时,Shell格式的写法底层会调用/bin/sh -c <command>。
如:
ENV WORLD world
ENTRYPOINT echo "Hello $WORLD"
执行docker run <image>将输出:Hello world。
Exec 格式
1 | <instruction> ["executable", "param1", "param2", ...] |
当指令执行时,Exec格式的写法会直接调用<command>,不会被shell解析。
如:
ENV WORLD world
ENTRYPOINT ["/bin/echo", "Hello $WORLD"]
执行docker run <image>将输出:Hello $WORLD。
注意环境变量WORLD没有被替换。如果希望环境变量被替换,修改为:
ENV WORLD world
ENTRYPOINT ["/bin/sh", "-c", "echo Hello $WORLD"]
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wpz's Blog!