Docker 容器化
目录
概述
遵循安全性、性能和可维护性的最佳实践构建生产就绪的 Docker 容器。
何时使用
- 将应用程序容器化以进行部署
- 为新服务创建 Dockerfile
- 优化现有容器镜像
- 设置开发环境
- 构建 CI/CD 容器管道
- 实施微服务
快速入门
最小工作示例:
# Node.js 应用程序的多阶段构建
# 阶段 1:构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 阶段 2:生产环境
FROM node:18-alpine
WORKDIR /app
# 仅复制生产依赖和构建文件
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY package*.json ./
# 安全:以非 root 用户运行
RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
USER nodejs
EXPOSE 3000
CMD ["node", "dist/index.js"]
参考指南
详细实现在 references/ 目录中:
| 指南 | 内容 |
|---|---|
| 多阶段构建 | 多阶段构建 |
| 优化技术 | 优化技术 |
| 安全最佳实践 | 安全最佳实践、环境配置 |
| Docker Compose 多容器 | Docker Compose 多容器 |
| .dockerignore 文件 | .dockerignore 文件 |
| Python | Python (Django/Flask), Java (Spring Boot), Go |
最佳实践
✅ 应该做
- 使用官方基础镜像
- 实施多阶段构建
- 以非 root 用户身份运行
- 使用 .dockerignore
- 固定特定版本
- 包含健康检查
- 扫描漏洞
- 最小化层数
- 有效利用构建缓存
❌ 不要做
- 在生产中使用
latest标签 - 以 root 用户身份运行
- 在镜像中包含密钥
- 创建不必要的层
- 安装不必要的包
- 忽略安全更新
- 在容器中存储数据