dockerfile指令
指令格式
注释: # Comment
指令: INSTRUCTION argument
FROM
- FROM <image>
- FROM <image>:<tag>
- 必须已经存在的镜像,也就是基础镜像
- 必须是第一条非注释指令
MAINTAINER
- MAINTAINER <name>
指定镜像的作者信息,包含镜像的所有者和练习方式
RUN
构建构成运行的
- RUN <command> (shell模式)
/bin/sh -c command - RUN [“executable”, “param1”, “param2”] (exec模式)
RUN[“/bin/bash”, “-c”, “echo hello”]
EXPOSE
- EXPOSE <port> [<port>…]
指定运行该镜像的容器使用的端口,但只是告诉docker会使用特定的端口号,出于安全考虑不会自动打开,在容器运行时仍需要手动指定端口映射。CMD ENTRYPOINT
指定容器启动时运行的命令
- CMD [“executable”, “param1”, “param2”] (exec模式)
- CMD command param1 param2 (shell模式)
- CMD [“params1”, “params2”] (作为ENTRYPOINT指令的默认参数)
在docker run时如果指定命令的话dockerfile里的cmd命令会被覆盖掉。
- ENTRYPOINT [“executable”, “param1”, “param2”] (exec模式)
- ENTRYPOINT command param1 param2 (shell模式)
默认不会被覆盖,如果需要覆盖需要指定docker run –entrypoint 覆盖
ADD COPY VOLUME
设置镜像的目录和文件
ADD <src>…<dest>
ADD [“<src”…”
“] (适用于文件路径中有空格) COPY <src>…<dest>
COPY [“<src”…”
“] (适用于文件路径中有空格)
可以使文件地址(构建目录的相对地址),也可以是远程url(推荐使用curl获取文件内容)
ADD vs. COPY
ADD包含类似tar的解压功能
如果单纯复制文件,docker推荐使用COPYVOLUME [“/data”]
添加卷
WORKDIR ENV USER
构建及容器运行时的环境设置
- WORKDIR /path/to/workdir (设置工作目录,通常使用绝对路径,否则会一直传递下去)
e.g:
1 | WORKDIR /a |
- ENV <key><value>
- ENV <key>=<value>
设置环境变量
- USER daemon
USER user USER uid
USER user:group USER uid:gid
USER user:gid USER uid:group
指定运行的用户,若不指定则默认root用户。
ONBUILD
- ONBUILD [INSTRUCTION]
- 镜像触发器
- 当一个镜像被其他镜像作为基础镜像时执行
- 会在构建过程中插入指令
dockerfile构建过程
- 从基础镜像运行一个容器
- 执行一条指令,对容器作出修改
- 执行类似docker commit的操作, 提交一个新的镜像层(中间层镜像)
- 再基于刚提交的镜像运行一个新的容器
- 执行dockerfile中的下一条指令,直至所有指令执行完毕
中间层镜像进行调试 注:dockerfile会删除中间层镜像容器但不会删除中间层镜像
构建缓存,构建时会建立缓存,因此第二次执行构建命令会很快,是因为使用了缓存。
不使用缓存
1
docker build --no-cache
另一种方法通过更改缓存刷新时间
FROM Ubuntu:14:04
MAINTAINER dormancypress user@mail.com
ENV REFRESH_DATE 2019-08-08
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
修改REFRESH_DATE时间
- 查看镜像构建过程
1 | docker history [image] |