Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释
//FROM
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
//维护者信息
//MAINTAINER Jasper Xu
//MAINTAINER sorex@163.com
//MAINTAINER Jasper Xu <sorex@163.com>
//RUN RUN用于在镜像容器中执行命令
//RUN ["executable", "param1", "param2"]
//RUN apk update
//RUN ["/etc/execfile", "arg1", "arg1"]
//ADD 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
//ADD hom* /mydir/ # 添加所有以"hom"开头的文件
//ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt"
//ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
//ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/
//COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
//CMD
- 构建容器后调用,也就是在容器启动时才进行调用。但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD。
- CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例:
CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]
注:
CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
//ENTRYPOINT
如果`Dockerfile`文件既有`CMD`,又有`ENTRYPOINT` ,那么`CMD`将会被当做参数传递给`ENTRYPOINT`
//COPY
//CMD
//LABEL
//ENV
//EXPOSE
//VOLUME
//WORKDIR
//USER
//ARG docker构建时声明的变量
//ONBUILD