[toc]
Dockerfile 自动构建 Docker 镜像
本文介绍如何使用 Dockerfile 自动构建 Docker 镜像,涵盖 Dockerfile 的定义与组成、常用指令详解、构建步骤、多阶段构建以及两个实战示例。
官方文档参考
| 文档 | 链接 |
|---|---|
| Dockerfile 指令参考(官方) | https://docs.docker.com/engine/reference/builder/ |
| Dockerfile 编写最佳实践(官方) | https://docs.docker.com/build/building/best-practices |
docker build 命令参考(官方) | https://docs.docker.com/reference/cli/docker/build/ |
| 多阶段构建(官方) | https://docs.docker.com/build/building/multi-stage/ |
1. Dockerfile 基础
1.1 Dockerfile 说明
Dockerfile 定义
- Dockerfile 类似 Ansible 的剧本(playbook),是一个文本文件,包含构建镜像所需的所有命令。
Dockerfile 特点
- 更适合传输,文件体积小
- 实现更加定制化
Dockerfile 主要组成部分
- 基础镜像信息:
FROM centos:7.8 - 制作镜像操作指令:
RUN yum -y install httpd - 容器启动时执行指令:
CMD ["/bin/bash"]
1.2 常用指令
| 指令 | 含义 | 官方文档 |
|---|---|---|
| FROM | 指定基础镜像,基于哪个镜像 | dockerfile-reference/#from |
| MAINTAINER | 构建者信息(非必须,仅作说明) | dockerfile-reference/#maintainer |
| RUN | 指定运行命令 | dockerfile-reference/#run |
| ADD | 将宿主机/远程文件拷贝到容器中,会自动解压 | dockerfile-reference/#add |
| COPY | 复制文件 | dockerfile-reference/#copy |
| WORKDIR | 指定工作目录 | dockerfile-reference/#workdir |
| VOLUME | 设卷,挂载宿主机目录 | dockerfile-reference/#volume |
| EXPOSE | 指定对外的端口 | dockerfile-reference/#expose |
| CMD | 容器启动后要运行的命令,容易被替换 | dockerfile-reference/#cmd |
| ENV | 环境变量 | dockerfile-reference/#env |
| ENTRYPOINT | 容器启动后执行的命令(无法被替换) | dockerfile-reference/#entrypoint |
提示:Docker 18.09+ 推荐使用 BuildKit 后端,可在 Dockerfile 首行添加解析指令
# syntax=docker/dockerfile:1以使用最新语法特性。详见 Dockerfile 语法。
1.2.1 FROM
用来指定基础镜像。
# 指定基础镜像为 centos7.8
FROM centos:7.8
FROM 中有一个特殊的镜像 scratch,表示一个空白镜像(常用于构建纯静态二进制镜像):
FROM scratch