Dockerfile—构建镜像
📘 什么是 Dockerfile?
Dockerfile 是一个文本文件,包含一系列指令,定义了如何构建一个 Docker 镜像。Docker 引擎通过读取这些指令,逐步构建出镜像。每条指令都会创建一个新的镜像层。
🧱 常用指令概览
以下是 Dockerfile 中常用的指令及其作用:
🛠️ 构建流程与示例
一个典型的 Dockerfile 示例:
# 使用官方 Python 3.12 镜像作为基础
FROM python:3.12
# 设置工作目录
WORKDIR /usr/src/app
# 复制依赖文件并安装
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 指定容器启动时执行的命令
CMD ["python", "app.py"]
构建镜像的命令:
docker build -t my-python-app .
运行容器的命令:
docker run -d -p 8000:8000 my-python-app
🧩 多阶段构建(Multi-stage Builds)
多阶段构建允许在一个 Dockerfile 中使用多个 FROM
指令,分别定义不同的构建阶段,从而减小最终镜像的体积。例如:
# 第一阶段:构建应用
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 第二阶段:创建精简运行环境
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
这种方式可以避免将构建工具和中间文件包含在最终镜像中,提高安全性和效率。
🧠 最佳实践
固定基础镜像版本:使用具体的版本标签(如
python:3.12
),避免因镜像更新导致构建结果不一致。利用缓存:将不频繁变动的指令(如安装依赖)放在前面,以便 Docker 利用缓存加速构建。
最小化镜像体积:使用多阶段构建和精简的基础镜像(如
alpine
)来减小镜像大小。避免在镜像中存储敏感信息:不要在 Dockerfile 中硬编码密码、密钥等敏感数据。
清理临时文件:在构建过程中删除不必要的文件,减少镜像体积。