Buildah là gì? Hướng dẫn cài đặt và sử dụng Buildah thay thế Docker trong CI/CD

Tìm hiểu Buildah là gì, các ưu điểm vượt trội so với Docker (đặc biệt là không cần Daemon và hỗ trợ Rootless) và hướng dẫn chi tiết cách cài đặt, sử dụng Buildah trong môi trường CI/CD.

Buildah là gì? Hướng dẫn cài đặt và sử dụng Buildah thay thế Docker trong CI/CD

Trong quá trình triển khai CI/CD (Continuous Integration / Continuous Deployment), việc xây dựng container image là một bước không thể thiếu. Docker đã từng là lựa chọn duy nhất, nhưng việc sử dụng Docker-in-Docker (DinD) lại mang đến nhiều rủi ro về bảo mật và tiêu tốn tài nguyên. Buildah ra đời như một giải pháp thay thế hoàn hảo. Vậy Buildah là gì và làm cách nào để sử dụng công cụ này thay thế Docker trong CI/CD? Hãy cùng tìm hiểu chi tiết qua bài viết dưới đây.

1. Buildah là gì?

Buildah là một công cụ mã nguồn mở được phát triển bởi Red Hat, chuyên dùng để xây dựng (build) container image theo chuẩn OCI (Open Container Initiative) mà không cần sử dụng Docker Daemon.

Điều này có nghĩa là bạn có thể tạo ra các container image tương thích hoàn toàn với Docker, Podman hay Kubernetes mà không cần phải cài đặt một dịch vụ nền (daemon) nặng nề và phức tạp.

Trong hệ sinh thái container hiện đại, Buildah thường được sử dụng kết hợp với các công cụ khác như:

  • Buildah: Chuyên dùng để build container image.
  • Podman: Chuyên dùng để quản lý và chạy container.
  • Skopeo: Dùng để kiểm tra, di chuyển và sao chép image giữa các container registry.

2. Tại sao nên sử dụng Buildah thay thế Docker?

Việc chuyển đổi từ Docker sang Buildah mang lại nhiều lợi ích vượt trội, đặc biệt là trong môi trường CI/CD và Kubernetes:

2.1. Không yêu cầu Docker Daemon (Daemonless)

Với Docker, dịch vụ dockerd phải luôn chạy ngầm để có thể build image, gây lãng phí tài nguyên. Buildah hoạt động độc lập (daemonless), trực tiếp thực thi các lệnh build mà không cần dịch vụ nền.

  • Lợi ích: Tiết kiệm CPU, RAM và giảm bớt bề mặt tấn công bảo mật (attack surface).

2.2. Hỗ trợ Rootless (Không cần quyền Root)

Buildah có thể chạy dưới quyền của một người dùng thông thường (non-root) thay vì bắt buộc phải có đặc quyền root như Docker.

  • Lợi ích: Giúp tăng cường độ an toàn tối đa cho các hệ thống như GitLab CI, Jenkins, Kubernetes và OpenShift.

2.3. Giải quyết rủi ro bảo mật của Docker-in-Docker (DinD)

Trong CI/CD, để dùng Docker build image, chúng ta thường phải chạy container ở chế độ privileged: true (đặc quyền cao nhất). Điều này cực kỳ nguy hiểm vì nếu hacker xâm nhập được container, họ có thể kiểm soát toàn bộ máy chủ vật lý (host). Buildah không yêu cầu đặc quyền privileged, giúp triệt tiêu hoàn toàn rủi ro leo thang đặc quyền này.

2.4. Tương thích 100% với chuẩn OCI

Image do Buildah tạo ra tuân thủ chuẩn OCI, đảm bảo tương thích hoàn hảo với:

  • Docker
  • Podman
  • Kubernetes, containerd, CRI-O

3. Hướng dẫn cài đặt Buildah trên hệ điều hành Ubuntu

Việc cài đặt Buildah trên Ubuntu rất đơn giản. Bạn chỉ cần thực hiện các lệnh sau trên terminal:

Bước 1: Cập nhật hệ thống

sudo apt update

Bước 2: Cài đặt Buildah

sudo apt install buildah -y

Bước 3: Kiểm tra phiên bản Buildah đã cài đặt

buildah version

Kết quả ví dụ:

Version:         1.34.0
Go Version:      go1.22
Image Spec:      1.1.0
Runtime Spec:    1.1.0

4. Cách sử dụng Buildah để Build Container Image

Buildah hỗ trợ build image trực tiếp từ Dockerfile hiện có, giúp bạn chuyển đổi từ Docker sang Buildah mà không cần sửa đổi mã nguồn.

4.1. Build image bằng Dockerfile

Giả sử bạn có một Dockerfile cơ bản để chạy web tĩnh với Nginx:

# Dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/

Để build image với Buildah, bạn dùng lệnh buildah bud (bud = Build Using Dockerfile):

buildah bud -t my-nginx-app:v1 .

4.2. Kiểm tra danh sách Image

Sau khi build xong, bạn kiểm tra các image đang có bằng lệnh:

buildah images

Kết quả ví dụ:

REPOSITORY       TAG     IMAGE ID       CREATED         SIZE
my-nginx-app     v1      abc123456789   1 minute ago    42.5 MB

4.3. Đăng nhập vào Container Registry

Để đẩy (push) image lên kho lưu trữ (ví dụ GitLab Container Registry), bạn cần đăng nhập trước:

buildah login registry.gitlab.com

Hoặc sử dụng token an toàn trong CI/CD:

buildah login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com

4.4. Đẩy (Push) Image lên Registry

Tag lại image theo định dạng của registry:

buildah tag my-nginx-app:v1 registry.gitlab.com/username/project/my-nginx-app:v1

Thực hiện lệnh push:

buildah push registry.gitlab.com/username/project/my-nginx-app:v1

(Lưu ý: Buildah hỗ trợ push lên mọi registry phổ biến như Docker Hub, AWS ECR, Harbor, GitLab Registry…)

5. Ứng dụng Buildah vào GitLab CI/CD Pipeline

Đây là lúc Buildah tỏa sáng nhất. Dưới đây là một ví dụ mẫu file .gitlab-ci.yml sử dụng Buildah để build và push image một cách tối ưu và an toàn:

stages:
  - build

build_image:
  stage: build
  image: quay.io/buildah/stable:latest
  variables:
    # Cấu hình không sử dụng VFS để tăng tốc build trên CI
    STORAGE_DRIVER: vfs 
  script:
    - echo "Đăng nhập vào GitLab Registry..."
    - buildah login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    
    - echo "Đang tiến hành Build Image..."
    - buildah bud -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    
    - echo "Push Image lên Registry..."
    - buildah push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

Ưu điểm của pipeline này:

  • Không cần chạy dịch vụ Docker (Daemonless).
  • Tránh được rủi ro bảo mật từ Docker-in-Docker.
  • Mức tiêu thụ tài nguyên (RAM, CPU) ít hơn hẳn so với Docker.

6. Lời kết: Khi nào nên chuyển sang Buildah?

Buildah là một công cụ xuất sắc và đặc biệt phù hợp trong các kịch bản:

  • Xây dựng hệ thống CI/CD với GitLab CI, Jenkins Kubernetes Agent, GitHub Actions.
  • Môi trường vận hành bằng OpenShift, Kubernetes (EKS, RKE2, K3s).
  • Các hệ thống yêu cầu bảo mật khắt khe (Zero Trust, không cho phép chạy root).

Với sự phát triển mạnh mẽ của kiến trúc GitOps và DevSecOps hiện đại, việc sử dụng Buildah thay thế Docker trong quá trình đóng gói ứng dụng là một cải tiến đáng giá để mang lại một pipeline nhanh gọn, tối ưu và an toàn tuyệt đối.

Bình luận

Bài viết liên quan