Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。Dockerfile 的内容分为四个部分:
基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
指令的一般格式为
指令名称 参数
FROM⽀持三种格式:
FROM FROM : FROM @ FROM指令必须指定且需要在Dockerfile其他指令的前⾯,指定的基础image 可以是官⽅远程仓库中的,也可以位于本地仓库。后续的指令都依赖于该指 令指定的image。当在同⼀个Dockerfile中建⽴多个镜像时,可以使⽤多个 FROM指令。
比如:
# 基于哪个镜像
FROM java:8
MAINTAINER格式:
LABEL为镜像添加元数据标签,一个 LABEL 就是一个键值对。
LABEL maintainer="qaz" version="1.0"
新添加的
LABEL和已有的LABEL同名,则新值会覆盖掉旧值。
ENV指令格式
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>
指定环境变量,会被后续RUN指令使⽤,并在容器启动后,可以通 过 docker inspect 查看这个环境变量,也可以通过 docker run --env = 来修改环境变量
例子:
ENV JAR_PATH '/home/soft/workspace/demo-study-1.0.0-SNAPSHOT.jar'
RUN⽀持两种格式:
RUN <command>
# 打印目录
RUN pwd && ll
exec 格式# 使用exec执行
RUN ["executable", "param1", "param2"]
也可指定其它终端。例如:
RUN ["/bin/bash", "-c", "echo hello"],该⽅式必须使⽤["]⽽不能使⽤['], 因为该⽅式会被转换成⼀个JSON 数组;所以将多个命令通过&&合并到同一个RUN指令上,避免镜像新建层,过大
CMD格式有三种:
shell : CMD
exec 命令格式:
CMD ["executable","param1","param2"]
该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
CMD ["
作用:为启动的容器指定要运行的命令,类似于 RUN 指令,但 CMD 运行程序的时间是在 docker run 时执行的,命令运行结束,容器也就结束。
CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]
CMD指令的主要⽬的是为执⾏容器提供默认值。每个Dockerfile只有⼀个 CMD命令,如果指定了多个CMD命令,那么只有⼀条会被执⾏,如果启动容 器的时候指定了运⾏的命令,则会覆盖掉CMD指定的命令。
EXPOSE为Docker容器暴露对外的端⼝号
EXPOSE <port1> [<port2> ...]
ADD格式:
ADD ADD ["",... ""]注意:
COPYCOPY 指令非常简单,仅用于将文件拷贝到镜像中,而 ADD 相对来讲复杂一些,可以用于下载远程文件以及解压压缩包。所以除非要解压缩包,否则建议使用 COPY;
复制本地端的src到容器的dest。和ADD指令类似,COPY不⽀持URL和压缩包。
VOLUME格式为: VOLUME ["/data"]
使容器中的⼀个⽬录具有持久化存储数据的功能,该⽬录可以被容器本身使 ⽤,也可以共享给其他容器。当容器中的应⽤有持久化数据的需求时可以在 Dockerfile中使⽤该指令。
作用:
WORKDIRWORKDIR 指令可以设置默认目录,也就是运行 RUN / CMD / ENTRYPOINT 指令的地方。
格式为: WORKDIR /path/to/workdir