概念
Dockerfile是一个文本文件
1.其中包含了一条条的指令
2.每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
作用:
1.对于开发人员:可以为开发团队提供一个完全一致的开发环境
2.对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
3.对于运维人员:在部署时,可以实现应用的无缝移植
关键字
关键字 | 作用 | 说明 |
| 指定父镜像 | 指定dockerfile基于那些image构建 |
MAINTAINER | 作者信息 | 表面这个dockefile是谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签可以使用Label代替Maintainer最终都是在docker image基本信息中可以查看 |
RUN | 执行命令 | 执行一段命令默认是/bin/sh,格式:RUN command或者RUN[“command” , “param1”,“param2”] |
CMD | 容器启动命令 | 提供启动容器时候的默认命令和ENTRYPOINT配合使用,格式:CMD command param1 param2或者CMD [“command” ,“param1”,“param2”] |
ENTYPOINT | 入口 | 一般在制作—些执行就关闭的容器中会使用 |
COPY | 复制文件 | build的时候复制文件到image中,添加本地的,但是不会去解压缩 |
ADD | 添加文件 | build的时候添加文件到image中,添加并且会去解压,不仅仅局限于当前build上下文,可以来源于远程服务 |
ENV | 环境变量 | 指定build时候的环境变量可以在启动的容器的时候通过-e覆盖,格式ENVname=value |
ARG | 构建参数 | 构建参数,只在构建的时候使用的参数。如果有ENV那么ENV的相同名字的值始终覆盖arg的参数 |
VOLUME | 定义外部可挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中,启动容器的时候使用-v绑定,格式VOLUME[“目录”] |
EXPOSE | 暴露端口 | 定义容器运行的时候监听的端口,启动容器的使用-p来绑定暴露端口。格式:EXPOSE 8080,或者EXPOSE 8080/udp |
WORKDIR | 工作目录 | 指定容器内部的工作目录,如果没有创建则自动创建;如果指定/,使用的是绝对地址;如果不是/开头,那么是在上—条workdir的路径的相对路径 |
USER | 指定执行用户 | 指定build或者启动的时候,用户在RUN CMD ENTRYPONT执行的时候的用户 |
HEAKLTHCHECK | 接口检查 | 指定监测当前容器的健康监测的命令,基本上没用,因为很多时候应用本身有健康监测机制 |
ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后,会执行ONBUILD的命令,但是不影响当前镜像,用处也不怎么大 |
STOPSIGNAL | 发信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 |
SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候,使用的shell |
LABLE
LABEL 指令用来给镜像添加一些元数据
(metadata),以键值对的形式,语法格式如下:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
比如我们可以添加镜像的作者:
LABEL org.opencontainers.image.authors="runoob"
COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
格式:
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
ADD
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
- ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
- ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。