Dockerfile 配置详解:自动化构建镜像的核心
Dockerfile 是一个包含了多条指令的文本文件,用于自动化构建自定义 Docker 镜像。通过 docker build 命令,Docker 会读取指令并逐层构建出镜像环境。
一、 Dockerfile 核心指令解析
编写 Dockerfile 时,指令的顺序决定了镜像的分层结构:
-
基础与元数据指令:
- FROM:指定构建镜像的基础镜像,必须是第一条非注释指令。如
FROM scratch表示从零开始,或FROM <image>:<tag>引用现有环境。 - MAINTAINER:标明镜像维护者信息。
- LABEL:为镜像添加键值对形式的元数据,用于分类或说明。
- FROM:指定构建镜像的基础镜像,必须是第一条非注释指令。如
-
文件与环境指令:
- WORKDIR:设置镜像内部的工作目录,类似
cd。后续的RUN、CMD、COPY等指令均在此目录下执行。 - ENV:设置持久的环境变量,在构建及容器运行时均有效。
- ARG:定义构建参数,仅在
docker build过程中有效,支持--build-arg传参。 - COPY / ADD:将宿主机文件拷贝进镜像。
ADD额外支持从 URL 下载及自动解压功能。
- WORKDIR:设置镜像内部的工作目录,类似
-
执行与运行指令:
-
RUN:在构建镜像过程中执行的命令(如安装软件),通常会产生新的镜像层。
-
EXPOSE:声明容器运行时监听的端口,配合
-p或-P使用。 -
CMD:指定容器启动时的默认执行程序,可被外部启动命令覆盖。
-
ENTRYPOINT:指定容器启动时的入口程序,不可被覆盖,常用于将容器当作可执行程序使用。
-
-
进阶控制指令:
- VOLUME:定义匿名挂载点,确保容器内路径的数据持久化。
- HEALTHCHECK:配置容器健康检查,通过指令返回值判断服务状态(0: 成功,1: 异常)。
二、 实战案例:构建自定义 Nginx 镜像
以下是一个以 Nginx 为基础,实现自动化配置和网页挂载的 Dockerfile 示例:
Dockerfile
# 1. 指定基础镜像:直接使用官方稳定的 Nginx 版本
FROM nginx:latest
# 2. 标明维护者信息
MAINTAINER wolfcode <liugang@wolfcode.cn>
# 3. 设置环境变量:确保系统时区正确
ENV TZ=Asia/Shanghai
# 4. 创建自定义存放路径并切换工作目录
RUN mkdir -p /usr/share/nginx/html/custom
WORKDIR /usr/share/nginx/html/custom
# 5. 拷贝静态页面到工作目录
# 假设当前目录下有 index.html
COPY index.html .
# 6. 拷贝自定义 Nginx 配置文件覆盖镜像默认配置
# 注意路径:Nginx 默认配置文件通常在 /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
# 7. 声明容器对外暴露 80 端口
EXPOSE 80
# 8. 启动 Nginx
# daemon off; 是为了让 Nginx 在前台运行,防止容器启动后立即退出
CMD ["nginx", "-g", "daemon off;"]
三、 镜像构建与运行
-
构建镜像:
在包含 Dockerfile 和相关文件的目录下运行:
docker build -t my-nginx:1.0 .
-
启动容器:
使用构建好的镜像启动 Web 服务:
docker run -d -p 80:80 --name website my-nginx:1.0