Docker 最佳实践
概述
本指南汇总了 Docker 使用过程中的最佳实践,帮助你构建更高效、更安全、更易维护的容器化应用。这些最佳实践来自于社区的实践经验和官方推荐。
最佳实践会随着 Docker 的发展而更新。请确保经常查看最新的推荐做法。
镜像构建最佳实践
使用多阶段构建
减小最终镜像大小,提高构建效率
# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 运行阶段
FROM node:18-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm install --production
CMD ["npm", "start"]
优化层次结构
合理组织 Dockerfile 指令顺序
推荐做法 | 原因 |
---|---|
将不常变化的层放在前面 | 充分利用缓存,加快构建速度 |
合并 RUN 指令 | 减少镜像层数,节省空间 |
使用 .dockerignore | 排除不需要的文件 |
容器运行最佳实践
资源限制
# 限制内存和 CPU
docker run -d \
--memory="512m" \
--memory-swap="1g" \
--cpus="1.5" \
nginx
安全设置
# 以非 root 用户运行
docker run -d \
--user 1000:1000 \
--cap-drop ALL \
--security-opt no-new-privileges \
nginx
网络配置
# 使用自定义网络
docker network create myapp
docker run -d \
--network myapp \
--network-alias mysql \
mysql
开发与生产环境最佳实践
开发环境配置
version: "3.8"
services:
app:
build: .
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
ports:
- "3000:3000"
command: npm run dev
性能优化最佳实践
性能优化建议
优化项 | 建议 | 预期效果 |
---|---|---|
存储驱动 | 使用 overlay2 存储驱动 | 更好的性能和稳定性 |
日志驱动 | 配置适当的日志轮转 | 防止磁盘空间耗尽 |
网络模式 | 使用 host 网络模式(适用场景) | 更好的网络性能 |
资源限制 | 设置合理的内存和 CPU 限制 | 稳定的资源使用 |
CI/CD 最佳实践
自动化构建流程
使用 GitHub Actions 示例
name: Docker Build
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v2
with:
push: true
tags: user/app:latest
版本管理策略
镜像标签最佳实践
标签策略 | 使用场景 |
---|---|
语义化版本 | 正式发布版本 |
Git SHA | 开发版本追踪 |
环境标签 | 不同环境部署 |