第四节:Docker 项目化实战:从零基础环境搭建到 Dockerfile 镜像自动化构建指南

49 阅读2分钟

Dockerfile 配置详解:自动化构建镜像的核心

Dockerfile 是一个包含了多条指令的文本文件,用于自动化构建自定义 Docker 镜像。通过 docker build 命令,Docker 会读取指令并逐层构建出镜像环境。


一、 Dockerfile 核心指令解析

编写 Dockerfile 时,指令的顺序决定了镜像的分层结构:

  • 基础与元数据指令

    • FROM:指定构建镜像的基础镜像,必须是第一条非注释指令。如 FROM scratch 表示从零开始,或 FROM <image>:<tag> 引用现有环境。
    • MAINTAINER:标明镜像维护者信息。
    • LABEL:为镜像添加键值对形式的元数据,用于分类或说明。
  • 文件与环境指令

    • WORKDIR:设置镜像内部的工作目录,类似 cd。后续的 RUNCMDCOPY 等指令均在此目录下执行。
    • ENV:设置持久的环境变量,在构建及容器运行时均有效。
    • ARG:定义构建参数,仅在 docker build 过程中有效,支持 --build-arg 传参。
    • COPY / ADD:将宿主机文件拷贝进镜像。ADD 额外支持从 URL 下载及自动解压功能。
  • 执行与运行指令

    • 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;"]

三、 镜像构建与运行

  1. 构建镜像:

    在包含 Dockerfile 和相关文件的目录下运行:

    docker build -t my-nginx:1.0 .

  2. 启动容器:

    使用构建好的镜像启动 Web 服务:

    docker run -d -p 80:80 --name website my-nginx:1.0