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开发版本追踪
环境标签不同环境部署