文章内容

2025/11/12 17:38:08,作 者: 黄兵

Dockerfile 构建系统与 GitHub

我通过 Dockerfile 构建系统,同时使用了 GitHub,在部署的时候应该怎么部署?两者是否冲突?

答案是:
不会冲突,但你需要明确两者在部署流程中的角色分工
我们来分清楚:

🧩 一、GitHub 与 Docker 的定位不同

工具 主要职责 在部署中的作用
GitHub 源代码托管、版本控制、CI/CD 自动化 代码管理、自动构建、触发部署
Docker / Dockerfile 应用打包成可移植的容器镜像 构建运行环境,保证跨系统一致性

两者配合得非常常见:
👉 代码放在 GitHub → GitHub Actions 构建 Docker 镜像 → 推送到镜像仓库(如 Docker Hub、GHCR、Harbor)→ 服务器拉取镜像运行。

🚀 二、标准部署流程(推荐做法)

下面是一个典型的、既使用 GitHub 又使用 Dockerfile 的生产级部署流程。

步骤 1️⃣:准备项目

项目根目录包含:

.
├── Dockerfile
├── requirements.txt
├── main.py
├── utils/
├── ...
└── .github/
    └── workflows/
        └── deploy.yml     ← GitHub Actions 自动化脚本

步骤 2️⃣:在 GitHub Actions 构建 Docker 镜像

.github/workflows/deploy.yml 里添加一个构建并推送镜像的流程:

name: Build and Deploy

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Build Docker image
        run: docker build -t your_dockerhub_user/your_app_name:latest .

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Push Docker image
        run: docker push your_dockerhub_user/your_app_name:latest

步骤 3️⃣:在服务器上部署容器

然后在你自己的服务器(或云主机)上运行:

docker pull your_dockerhub_user/your_app_name:latest
docker stop your_app || true
docker rm your_app || true
docker run -d \
  --name your_app \
  -p 80:80 \
  --env-file .env \
  your_dockerhub_user/your_app_name:latest

如果你想自动化部署,还可以让 GitHub Actions 在构建完后直接 SSH 到服务器执行上述命令,例如使用:

- name: Deploy via SSH
  uses: appleboy/[email protected]
  with:
    host: ${{ secrets.SERVER_HOST }}
    username: ${{ secrets.SERVER_USER }}
    key: ${{ secrets.SSH_PRIVATE_KEY }}
    script: |
      docker pull your_dockerhub_user/your_app_name:latest
      docker stop your_app || true
      docker rm your_app || true
      docker run -d --name your_app -p 80:80 your_dockerhub_user/your_app_name:latest

🧠 三、关于“是否冲突”的详细解释

误解 实际情况
“Dockerfile 构建系统” 和 “GitHub 部署” 会相互覆盖吗? ❌ 不会。GitHub 只保存代码版本;Dockerfile 定义运行环境。
“我需要手动构建镜像还是让 GitHub 自动构建?” 二选一。推荐让 GitHub Actions 自动构建镜像并推送到仓库
“我部署时拉 GitHub 的源码还是 Docker 镜像?” 建议拉取 Docker 镜像,而不是重新克隆源码。
“本地开发要用 GitHub 吗?” 本地开发依旧用 GitHub 管理代码;部署环境用 Docker 镜像运行,保证一致性。

🧱 四、三种常见部署方案

模式 说明 特点
模式 A:手动构建 + 手动部署 本地 docker build → 上传服务器 → docker run 简单但不自动化
模式 B:GitHub Actions 构建 + 手动部署 Actions 构建推送镜像 → 服务器拉取 自动构建,半自动部署
模式 C:GitHub Actions 全自动部署(推荐) GitHub 自动构建 + 推镜像 + SSH 部署 全流程自动化,CI/CD

🧰 五、推荐实践总结

  1. ✅ 用 GitHub 管理代码

  2. ✅ 用 Dockerfile 定义环境

  3. ✅ 用 GitHub Actions 构建镜像

  4. ✅ 把镜像推送到 Docker Hub 或 GitHub Container Registry (GHCR)

  5. ✅ 服务器只需拉镜像 + 启动容器。


其它相关推荐:

1、docker run -d 这里的 -d 参数具体作用?

2、Docker 容器开机自动启动

3、Docker 部署支持 HTTP/3(QUIC)的 Nginx

4、基于容器的全链路运维平台实践

5、Docker的安装,配置,更新和卸载

分享到:

发表评论

评论列表