目录
一、Dockerfile介绍
Dockerfile 是 Docker 镜像的构建蓝图,它通过文本文件定义:
- 基础运行环境
- 应用依赖安装
- 文件系统结构
- 运行时配置
核心优势:
- 可重复性:确保每次构建结果一致
- 自动化:无需手动操作容器环境
- 版本控制:可与代码一同管理
二、基础语法结构
1. 指令格式
# 注释
INSTRUCTION arguments
2. 核心指令详解
指令 | 作用 | 示例 |
---|---|---|
FROM |
指定基础镜像 | FROM ubuntu:22.04 |
WORKDIR |
设置工作目录 | WORKDIR /app |
COPY |
复制文件到镜像 | COPY . . |
RUN |
执行命令 | RUN apt update && apt install -y curl |
EXPOSE |
声明暴露端口 | EXPOSE 8080 |
CMD |
容器启动命令 | CMD ["python", "app.py"] |
三、构建流程解析
1. 典型构建过程
2. 分层构建原理
# 构建示例
docker build -t myapp .
- 每个指令生成一个只读层
- 层缓存机制加速后续构建
四、高级特性
1. 多阶段构建
# 构建阶段
FROM golang:1.19 AS builder
WORKDIR /src
COPY . .
RUN go build -o app .
# 运行阶段
FROM alpine
COPY --from=builder /src/app /app
CMD ["/app"]
优势:大幅减小最终镜像体积
2. 环境变量管理
ENV NODE_ENV=production
ARG BUILD_VERSION
3. 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
五、最佳实践指南
1. 优化建议
- 合并
RUN
指令减少层数 - 使用
.dockerignore
过滤无用文件 - 固定基础镜像版本
- 最小化镜像层大小
2. 安全实践
# 使用非root用户
RUN useradd -r appuser && chown -R appuser /app
USER appuser
# 定期更新基础镜像
FROM ubuntu:22.04@sha256:abc123...
六、典型应用场景
1. Python Web 应用
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "app:app", "-b", "0.0.0.0:8000"]
2. Node.js 微服务
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
七、调试与优化
1. 构建分析
docker history myapp
docker inspect myapp
2. 缓存控制
# 禁用缓存构建
docker build --no-cache -t myapp .
# 指定缓存源
docker build --cache-from=myapp:previous .
结语
需要了解更多信息可以访问官网:https://docs.docker.com/build/building/best-practices