文章内容
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 |
🧰 五、推荐实践总结
-
✅ 用 GitHub 管理代码;
-
✅ 用 Dockerfile 定义环境;
-
✅ 用 GitHub Actions 构建镜像;
-
✅ 把镜像推送到 Docker Hub 或 GitHub Container Registry (GHCR);
-
✅ 服务器只需拉镜像 + 启动容器。
其它相关推荐:
1、docker run -d 这里的 -d 参数具体作用?
评论列表