dockerfile文件是包含了容器配置信息的文本文件
dockerfile文件中包含注释与指令两部分
- 注释是以”#”开头,后面是注释内容
- 指令是以大写的指令名开始,后面是指令参数
通过docker build创建镜像的过程中,dockerfile中的没一条命令都会单独生成一个层叠镜像。
层叠镜像也可以用来运行容器,这样的好处是可以根据叠层镜像检查错误原因。
DocerFile指令
FROM 镜像版本
FROM 指向的镜像名必须是已存在的镜像,后续执行都会基于这个镜像来执行。
指向的镜像被称为基础镜像
必须是第一条非注释的指令FROM <IMAGE> FROM <IMAGE>:<TAG>
MAINTAINER 作者信息
指定镜像的作者信息,包括镜像的所有者和联系方式
MAINTAINER <NAME>
RUN shell命令
指定当前镜像中运行的命令
RUN <COMMAND> (SHELL模式) 是以/bin/sh -c commend形式执行的 RUN ["executable", "param1", "param2"] (exec模式) 可以指定其他应用来完成指令 例:RUN ["/bin/bash", "-c", "echo hello"]
EXPOSE 指定端口
指定运行该镜像的容器使用的端口
EXPOSE <PROT>[<PROT>...]
CMD 执行命令,在容器运行时运行的
CMD ["executable", "param1", "param2"] (exec模式) CMD command param1 param2 (SHELL模式) CMD ["param1", "param2"] (作为ENTRYPOIN指令的默认参数)
ENTRYPOINT 执行命令
与CMD命令相同使用方式,但shell命令不会因为run镜像后的/bin/bash等命令掩盖ENTRYPOINT ["executable", "param1", "param2"] (exec模式) ENTRYPOINT command param1 param2 (SHELL模式)
ADD 将文件添加到镜像中
包含类似tar的解压功能
如果单纯复制文件,Docker推荐使用COPYADD <src>...<dest> ADD["<src>"..."<dest>""]
COPY 将文件复制到镜像中
COPY <src>...<dest> COPY["<src>"..."<dest>""]
VOLUME 像基于镜像创建的容器添加卷
一个卷是可以存在一个或多个容器的目录VOLUME ["/data"]
WORKDIR 通过镜像创建容器时,在容器内部设置工作目录
WORKDIR /path/to/workdir
ENV 设置环境变量
ENV <key><value> ENV <key>=<value>...
USER 设置镜像以哪个用户运行
USER user:group
ONBUID 镜像触发器
当一个镜像被其他镜像作为基础镜像时执行
在子镜像构件时,插入指令被触发ONBUID [INSTRUCTION]