1. 是什么
- Dockerfile是一个包含用于组合镜像指令的文本文档。Docker通过读取Dockerfile中的指令自动生成镜像。
2. 基础知识
- 每条指令由保留字和参数组成
- 指令中保留字都必须为大写,且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
- # 表示注释
3. 怎么用
- docker build命令用于从Dockerfile构建映像。
docker build -f /opt/docker/Dockerfile -t 镜像名称:tag /opt/docker/
-f
:标志指向文件系统中任何位置的Dockerfile,
-t
:指定新镜像名称和tag,
最后的/opt/docker
指定的是 build 上下文。如在命令ADD apache-tomcat-7.0.96.tar.gz /opt/
中,apache-tomcat-7.0.96.tar.gz 的位置是相对上下文的。即,虽然ADD指令中直接写的文件名,实际上该文件的真实路径为:/opt/docker/apache-tomcat-7.0.96.tar.gz
4. dockerfile build大致流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker 在基于刚提交的镜像运行一个新的容器
- 执行dockerfile中的下一条指令,直到所有指令都被执行
5. 保留字
保留字 | 作用 | 说明 | 用法 |
---|---|---|---|
FROM | 指定基础镜像 | 必须为第一个指令 | FROM <image>[:<tag>] [AS <name>] |
MAINTAINER | 指定镜像维护者信息 | 已弃用 | MAINTAINER <name> |
RUN | 构建镜像时执行的命令 | RUN <command> RUN [“executable”, “param1”, “param2”] | |
CMD | 指定容器启动时要运行的命令 | 如果CMD用于为ENTRYPOINT 指令提供默认参数, 则应使用JSON数组格式指定CMD和ENTRYPOINT指令。 多个CMD指令时,只有最后一条生效 | CMD [“executable”,“param1”,“param2”] (执行形式,这是首选形式) CMD [“param1”,“param2”] (作为ENTRYPOINT的默认参数) CMD command param1 param2 (shell form) |
ENTRYPOINT | 指定容器启动时要运行的命令 | 与CMD区别:不会被docker run 后的参数替换掉 | ENTRYPOINT [“executable”, “param1”, “param2”] (执行形式,首选) ENTRYPOINT command param1 param2 (shell form) |
EXPOSE | 镜像启动后对外暴露的端口号 | 可被docker run -p 80:80/tcp -p 80:80/udp 覆盖 | EXPOSE <port> [<port>/<protocol>…] |
WORKDIR | 指定容器的工作目录 | 如果有多个WORKDIR指令时, 后一条是相对于前一条WORKDIR指令的路径 | WORKDIR /path/to/workdir |
ENV | 在镜像构建过程中设置环境变量 | $<key> 引用变量 使用docker inspect和查看值, 并使用它们进行更改docker run --env = | ENV <key> <value> ENV <key>=<value> (两者有区别) |
ADD | 从源拷贝到容器中 | tar类型文件会自动解压(网络压缩资源不会被解压), 可以访问网络资源,类似wget | ADD [–chown=<user>:<group>] <src>… <dest> ADD [–chown=<user>:<group>] ["<src>",… “<dest>”] |
COPY | 从源拷贝到容器中 | 不会自动解压文件,也不能访问网络资源 | CPOY [–chown=<user>:<group>] <src>… <dest> ADD [–chown=<user>:<group>] ["<src>",… “<dest>”] |
VOLUME | 指定宿主机上持久化目录 | VOLUME ["/data", “data2”] | |
ONBUILD | 当构建一个被继承的Dockerfile时运行的命令 | 父镜像在被子继承后,父镜像的ONBUILD触发 | ONBUILD [INSTRUCTION] |