Docker容器化部署最佳实践指南

· 阅读约需8分钟

前言

Docker容器化技术已经成为现代应用部署的标准方式。本文将分享Docker容器化部署的最佳实践,帮助你构建高效、安全、可维护的容器化应用。

一、镜像构建最佳实践

1.1 使用多阶段构建

# 构建阶段
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

# 运行阶段
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]

1.2 镜像优化原则

  • 选择基础镜像:优先使用alpine、slim等精简镜像
  • 减少层数:合并RUN指令
  • 清理缓存:安装后及时清理包管理器缓存
  • 指定版本:避免使用latest标签

1.3 .dockerignore文件

.git
node_modules
npm-debug.log
Dockerfile
.dockerignore
.env
*.md

二、容器运行最佳实践

2.1 资源限制

docker run -d \
  --memory="512m" \
  --cpus="1" \
  --memory-swap="1g" \
  myapp:latest

2.2 健康检查

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:8080/health || exit 1

2.3 安全原则

  • 不以root用户运行
  • 只读文件系统
  • 禁用特权模式
  • 限制capabilities

三、Docker Compose实战

3.1 基础配置

version: '3.8'
services:
  web:
    build: .
    ports:
      - "80:80"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
    restart: always

  db:
    image: postgres:13
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secret

volumes:
  pgdata:

四、日志与监控

4.1 日志配置

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

4.2 常用监控命令

# 查看容器资源使用
docker stats

# 查看日志
docker logs -f --tail 100 container_name

# 进入容器
docker exec -it container_name bash

五、数据持久化

5.1 Volume vs Bind Mount

  • Volume:Docker管理,推荐用于生产
  • Bind Mount:主机目录映射,适合开发
# 创建命名卷
docker volume create mydata

# 使用卷
docker run -v mydata:/data myapp

六、网络配置

6.1 自定义网络

# 创建网络
docker network create --driver bridge mynetwork

# 连接容器
docker run --network=mynetwork --name=web myapp
docker run --network=mynetwork --name=db postgres

七、安全加固

7.1 镜像扫描

# 使用trivy扫描漏洞
trivy image myapp:latest

7.2 安全检查清单

  • ✅ 非root用户运行
  • ✅ 镜像签名验证
  • ✅ 敏感信息不硬编码
  • ✅ 定期更新基础镜像
  • ✅ 最小权限原则

八、生产部署建议

  1. 编排工具:使用Kubernetes或Swarm
  2. CI/CD集成:自动化构建部署
  3. 备份策略:定期备份数据卷
  4. 滚动更新:零停机部署
  5. 灾难恢复:制定恢复预案

结语

Docker容器化是一个持续优化的过程。遵循这些最佳实践,你就能构建出生产级的容器化应用。记住:简单、安全、可维护是容器化部署的核心原则。