- Đăng vào
GitHub Actions build và push Docker image lên ghcr.io
Giới thiệu
GitHub Actions là một công cụ mạnh mẽ giúp tự động hóa quy trình phát triển phần mềm, bao gồm cả việc build và deploy Docker image. Với GitHub Container Registry (GHCR), bạn có thể lưu trữ và quản lý các Docker image một cách dễ dàng ngay trong hệ sinh thái GitHub.
Trong bài viết này, mình sẽ hướng dẫn bạn cách thiết lập một workflow GitHub Actions để tự động build Docker image và đẩy lên GHCR, giúp tối ưu hóa quy trình CI/CD của dự án. Cùng bắt đầu nhé! 🚀
Triển khai
name: "Build and Push Docker Image"
on:
push:
branches:
- main
jobs:
build-docker:
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository_owner }}/my-image
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=ref,event=branch
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build push docker image
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
Workflow này tự động build và đẩy (push) Docker image lên GitHub Container Registry (ghcr.io) mỗi khi có code được đẩy lên nhánh main
.
Các bước hoạt động
Kích hoạt (Trigger)
- Workflow được kích hoạt khi có sự kiện
push
lên nhánhmain
.
- Workflow được kích hoạt khi có sự kiện
Phân quyền (Permissions)
- Cho phép đọc nội dung repository (
contents: read
) và ghi package (packages: write
) để có thể push image lên ghcr.io.
- Cho phép đọc nội dung repository (
Chạy trên môi trường
- Workflow chạy trên máy ảo
ubuntu-latest
.
- Workflow chạy trên máy ảo
Các bước thực hiện (Steps)
- Checkout: Sử dụng action
actions/checkout@v4
để lấy mã nguồn về máy runner. - Docker meta: Sử dụng action
docker/metadata-action@v5
để tạo metadata cho image, bao gồm tên image và các tag (ví dụ:latest
, tên nhánh). - Set up QEMU: Thiết lập QEMU để hỗ trợ build đa nền tảng (multi-platform).
- Set up Docker Buildx: Thiết lập Docker Buildx để build image hiệu quả hơn và hỗ trợ cache.
- Log in to the Container registry: Đăng nhập vào GitHub Container Registry (ghcr.io) bằng tài khoản GitHub và token bí mật.
- Build push docker image: Sử dụng action
docker/build-push-action@v6
để build Docker image từ fileDockerfile
và push lên ghcr.io với các tag và label đã tạo ở bước meta. Đồng thời sử dụng cache để tăng tốc độ build.
- Checkout: Sử dụng action
Kết quả
- Mỗi lần push lên nhánh
main
, một Docker image mới sẽ được build và đẩy lên registryghcr.io
với các tag phù hợp (ví dụ:latest
, tên nhánh).
Demo
Chúc thành công,
ANH NGUYỄN
Hiện tại mình đang tìm kiếm công việc mới với nhiều thử thách để chinh phục.
Mọi thông tin có thể gửi về me@nvtienanh.info.