Docker容器化部署完整指南

从镜像构建到生产级编排,全面掌握 Docker 容器化部署的每个环节

📑 文章目录

Docker容器化已成为现代应用部署的标准做法。本指南将从镜像构建到生产级编排,全面介绍 Docker 容器化部署的各个环节,帮助开发者掌握多阶段构建、Compose、Kubernetes 集成与安全加固等核心技能。

镜像构建基础与多阶段构建

Docker 镜像是容器化的核心,良好的镜像应体积小、安全、可重复构建。

基础 Dockerfile 示例

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

多阶段构建

可在构建阶段使用完整环境,运行阶段仅保留必要产物,显著减小镜像体积:

# 构建阶段
FROM node:18 AS builder
WORKDIR /src
COPY . .
RUN npm ci && npm run build

# 运行阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /src/dist ./dist
COPY --from=builder /src/package.json ./package.json
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]

Docker Compose 与服务编排

Compose 适合本地开发与小型部署,通过 YAML 定义多容器应用:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

支持环境变量、健康检查、网络隔离,方便一键启动整套环境。

Kubernetes 集成与生产实践

在生产环境,Kubernetes(K8s)提供弹性伸缩、自愈、滚动更新等能力。

  • Pod:最小调度单元,可包含多个容器
  • Deployment:声明期望副本数,自动维持状态
  • Service:稳定网络入口
  • Ingress:HTTP路由与SSL终结

示例 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: myrepo/web:latest
        ports:
        - containerPort: 3000

安全加固策略

  • 使用非 root 用户运行容器
  • 最小化镜像层数 & 移除调试工具
  • 定期扫描镜像漏洞(Trivy、Clair)
  • 启用 Seccomp、AppArmor 限制系统调用
  • 避免在容器中存储敏感信息,使用 Secret 管理

⚠️ 安全提示

容器安全是持续过程,需定期扫描镜像漏洞,及时修复 CVE。

CI/CD 流水线集成

在 GitHub Actions、GitLab CI、Jenkins 中集成 Docker 构建与推送:

- name: Build and push
  run: |
    docker build -t myrepo/web:$GITHUB_SHA .
    echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
    docker push myrepo/web:$GITHUB_SHA

结合 GitOps(ArgoCD/Flux)可实现集群配置自动同步。

网络与存储管理

Docker 提供 bridge、host、overlay 等网络模式;K8s 支持 CNI 插件实现复杂拓扑。

存储方面:绑定挂载适合开发,Volume 与 PV/PVC 适合生产持久化。

监控、日志与排错

  • Prometheus + Grafana 监控容器指标
  • ELK/EFK 收集与分析日志
  • `docker logs`、`kubectl logs` 排查问题
  • `docker exec -it` / `kubectl exec` 进入容器调试

💡 最佳实践

建立完善的监控和日志体系,能快速定位和解决问题,保障服务稳定运行。

分享文章