温馨提示×

Debian Docker如何简化应用部署流程

小樊
35
2025-12-28 17:00:13
栏目: 智能运维

在 Debian 上用 Docker 简化应用部署的实操方案

一 标准化环境与一键部署

  • 安装 Docker 与 Docker Compose(推荐插件方式)
    • 更新索引并安装依赖:sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg software-properties-common
    • 添加官方 GPG 密钥与 APT 源(使用 keyring 更安全):
      • curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
      • echo “deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /devref
    • 安装并验证:sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    • 非 root 使用与开机自启:sudo usermod -aG docker $USER && sudo systemctl enable --now docker
  • 目标机准备
    • 建议预置应用目录(如 /opt/myapp)与 docker-compose.yml,CI 只负责 pull 与 up,减少在 CI 中传递敏感配置
    • 如需在 CI 中远程部署,为目标机配置 SSH 免密登录(将 CI 的公钥加入目标机 ~/.ssh/authorized_keys

二 极简应用模板与 Compose 编排

  • 单容器示例 Dockerfile(基于 DebianNginx
    • FROM debian:bookworm-slim
    • RUN apt-get update && apt-get install -y --no-install-recommends nginx && rm -rf /var/lib/apt/lists/*
    • EXPOSE 80
    • CMD [“nginx”, “-g”, “daemon off;”]
  • 构建与运行
    • 构建:docker build -t my-debian-nginx .
    • 运行:docker run -d -p 8080:80 --name my-nginx my-debian-nginx
  • 多容器示例 docker-compose.yml(Flask + PostgreSQL)
    • version: ‘3.8’
    • services:
      • web:
        • build: .
        • ports: [“5000:5000”]
        • depends_on: [db]
        • environment: [“DATABASE_URL=postgresql://user:password@db:5432/mydb”]
      • db:
        • image: postgres:15-alpine
        • environment:
          • POSTGRES_USER=user
          • POSTGRES_PASSWORD=password
          • POSTGRES_DB=mydb
        • volumes: [“postgres_data:/var/lib/postgresql/data”]
    • volumes:
      • postgres_data:
  • 部署与更新
    • 启动:docker compose up -d
    • 更新:在 CI 或目标机执行 docker compose pull && docker compose up -d --force-recreate

三 CI/CD 自动化部署

  • GitHub Actions 云端构建与远程部署
    • 触发分支:如 main
    • 关键步骤:拉取代码 → 登录镜像仓库(DOCKERHUB_USERNAME / DOCKERHUB_TOKEN)→ 构建并推送镜像(带 git shalatest 标签)→ 通过 SSH 在 Debian 目标机执行部署脚本
    • 示例工作流要点(精简版)
      • name: Deploy Docker
      • on: push: branches: [ main ]
      • jobs:
        • build-and-deploy:
          • runs-on: ubuntu-latest
          • steps:
            • uses: actions/checkout@v4
            • uses: docker/login-action@v3(登录 Docker Hub)
            • uses: docker/build-push-action@v5(推送 ${{ secrets.DOCKERHUB_USERNAME }}/myapp:${{ github.sha }} 与 latest)
            • uses: appleboy/ssh-action@v1(在目标机执行:cd /opt/myapp && docker compose pull && docker compose up -d --force-recreate)
    • 仓库 Secrets:DOCKERHUB_USERNAME、DOCKERHUB_TOKEN、PROD_HOST、PROD_USER、PROD_SSH_KEY
  • Jenkins 在 Debian 上编排全流程
    • 安装与权限:sudo apt-get install -y openjdk-11-jdk;按官方源安装 Jenkins;sudo usermod -aG docker jenkins;sudo systemctl enable --now jenkins
    • Pipeline 要点:Checkout → Build(docker build -t $IMAGE) → Push(使用 withRegistry 推送 BUILD_NUMBERlatest) → Deploy(SSH 执行:cd /opt/myapp && docker compose pull && docker compose up -d --force-recreate)

四 生产可用的最佳实践

  • 镜像与标签
    • 避免使用 latest 作为发布标签,使用 git sha语义化版本;CI 同时打 latest 仅作便捷拉取
  • 部署策略
    • 优先使用 Docker Compose 管理服务;在部署脚本中使用 pull + up -d --force-recreate 或 docker compose up -d --no-deps 做滚动更新;必要时增加 healthcheck 与回滚流程
  • 安全
    • 禁止在镜像中硬编码 密钥/密码;通过 Secrets 注入或使用 Docker Secrets/外部配置中心;SSH 使用 密钥 且最小权限
  • 可观测性
    • 容器设置 restart=unless-stopped;统一日志驱动(如 json-file 或对接 ELK/Fluentd);为关键路径添加 健康检查超时
  • 回滚与演练
    • 保留最近 N 个镜像标签;在 CI/CD 中提供 手动回滚 选项(如部署前记录当前 digest,回滚时指定该 digest 重新部署)
  • 多机与编排
    • 多实例/多环境建议引入 Swarm/Kubernetes;若仅单机多服务,使用 Compose 的 profiles 与 depends_on 管理依赖与启动顺序

0