译自:Boost Your CI/CD Pipeline: Automate Docker With GitHub Actions 作者:Advait Patel
了解如何使用 GitHub Actions 自动化 Docker 工作流程,以实现更快的部署。
在本指南中,我们将深入探讨如何使用 GitHub Actions 自动化 Docker 工作流程,只需几个简单的步骤即可启动并运行。随着云原生开发的兴起和 CI/CD 流水线日益复杂,自动化是必不可少的。GitHub Actions 提供了一种无缝的方式来将 Docker 集成到你的工作流程中,从而减少手动工作并提高部署速度。
让我们开始吧!
让我们直接进入设置 GitHub Actions。你需要做的第一件事是创建一个工作流程文件。它是一个简单的 YAML 文件,位于你的 repo 的 .github/workflows/
目录下。
步骤 1:创建工作流程文件
.github
的文件夹(如果它尚不存在)。workflows
的文件夹。.github/workflows/
中创建一个名为 docker.yml
(或任何你喜欢的名称)的文件。这是你的 docker.yml 文件的基本结构:
name: Docker Workflow
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Build Docker Image
run: docker build -t myapp:${{ github.sha }} .
- name: Push Docker Image
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login --username ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push myapp:${{ github.sha }}
上面的 YAML 文件会自动构建。此外,每当更改被移动到 main
分支时,它都会推送你的 Docker 镜像。
有两种选择可用于执行你的工作流程:
GitHub 托管的 runners 是默认选项。设置相对免维护,并且对你来说很方便。
使用自托管的 runners,用户可以完全控制工作流程执行机器。虽然此方法提供了更高的灵活性,但它需要持续维护。
对于大多数用户来说,GitHub 托管的 runners 将是首选解决方案。因为它们最适合 Docker 构建。
假设你已经推送了一些新代码。现在,你想自动化构建你的 Docker 镜像。你可以这样做。
你将在 GitHub Actions 工作流程文件中使用 docker build
命令来自动构建你的 Docker 镜像。
例如,在你的 docker.yml
文件中:
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
上述命令将创建一个 Docker 镜像,并使用 commit SHA (${{ github.sha }})
对其进行标记。它确保每个镜像都使用 commit ID 唯一标记。
你可能希望以有意义的方式标记你的镜像。例如,按分支名称,或者使用版本标签。你可以使用 GitHub Actions 变量来做到这一点:
- name: Build and tag Docker image
run: docker build -t myapp:${{ github.sha }} -t myapp:${{ github.ref }} .
在这个例子中:
${{ github.sha }}
使用唯一的 commit 哈希标记镜像。${{ github.ref }}
使用分支名称(例如,refs/heads/main)标记它。 它可以使你的镜像易于跟踪和识别。现在你已经构建了镜像,下一步是将其推送到容器注册表,例如 Docker Hub 或 GitHub Container Registry (GHCR)。
首先,你需要验证 Docker 才能推送镜像。由于你不想直接在 YAML 文件中暴露你的凭据,因此 GitHub Secrets 是你的好帮手。
转到你的 GitHub repo 的 Settings > Secrets 并添加两个 secrets:
DOCKER_USERNAME
DOCKER_PASSWORD
然后,在你的工作流程文件中,你将使用这些 secrets 登录到你的 Docker:
- name: Log in to Docker Hub
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login --username ${{ secrets.DOCKER_USERNAME }} --password-stdin
最后,登录后,推送你的 Docker 镜像:
- name: Push Docker image to Docker Hub
run: docker push myapp:${{ github.sha }}
YAML 代码将你的镜像推送到 Docker Hub。此外,如果这是你的选择,你可以将其换成 GHCR。
你现有的工作流程必须支持多种机器架构,例如 ARM 和 x86。它允许启动从 Raspberry Pi (基于 ARM) 设备到基于云的服务器 (基于 x86) 的硬件操作。在此阶段,QEMU+Buildx 在 GitHub Actions 内部的组合非常方便。
首先,你必须在你的工作流程文件中设置 QEMU 和 Buildx。
以下是它的样子:
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Buildx
uses: docker/setup-buildx-action@v1
- name: Build multi-arch Docker image
run: |
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:${{ github.sha }} .
这将为 amd64(标准桌面/服务器架构)和 arm64(Raspberry Pi 和一些云服务器使用)构建镜像。
安全性始终是重中之重。 你不希望推送有漏洞的镜像。
你可以将 Trivy 和 Snyk 等安全工具集成到你的 GitHub Actions 中,以在构建过程中扫描你的镜像。 这是一个使用 Trivy 的示例:
- name: Scan Docker image for vulnerabilities
run: |
trivy image myapp:${{ github.sha }}
if [ $? -ne 0 ]; then exit 1; fi
如果 Trivy 检测到漏洞,构建将失败。 这确保只有安全的镜像才能被推送。
你已经构建了你的 Docker 镜像,现在必须将其推送到注册表。 现在,是时候部署它了。
使用 GitHub Actions,你可以轻松地将你的 Docker 镜像部署到 Kubernetes 集群。 这是如何做到的:
- name: Deploy to Kubernetes
uses: appleboy/kubernetes-action@v0.1.0
with:
kubeconfig: ${{ secrets.KUBECONFIG }}
context: ${{ secrets.K8S_CONTEXT }}
command: kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}
该 action 使用标记为 ${{ github.sha }}
的最新镜像更新 Kubernetes 部署。
使用 GitHub Actions 自动化你的 Docker 工作流程可以显著提高你的开发管道、可靠性和安全性。 因此,你现在拥有一个无需手动干预的自动化管道,它可以构建 Docker 镜像,将它们推送到注册表,扫描它们以查找已知漏洞,并将它们部署到你的环境中。
最好的部分? 你只需几行 YAML 即可直接从 GitHub 完成所有这些操作。 因此,无论你是推送代码、测试镜像还是部署到生产环境,GitHub Actions 都能满足你的需求。
那么,你准备好冒险了吗? 立即开始自动化你的 Docker 工作流程! 有关完整的演示,请查看 GitHub 存储库。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有