buildah는 리눅스 환경에서 컨테이너 이미지를 생성, 수정, 관리, 푸시(push)하기 위한 오픈소스 커맨드라인 도구이다. 도커(Docker) 없이 컨테이너 이미지를 다룰 수 있도록 설계되었으며, 데몬리스(daemonless) 및 루트리스(rootless) 작동 방식을 지원하여 보안성과 유연성이 뛰어나다.
개요
buildah는 Red Hat이 주도하는 컨테이너 도구 생태계의 일부로, Podman, Skopeo, CRI-O 등과 함께 OCI(Open Container Initiative) 표준을 따르는 도구이다. 전통적으로 컨테이너 이미지 생성은 Docker에 의존했으나, Docker는 데몬(dockerd)이 필요하고 보안적으로 루트 권한이 요구되는 환경이 많았다. 이에 비해 buildah는 더 가볍고 안전한 방식으로 컨테이너 이미지를 빌드할 수 있어, 특히 Kubernetes, OpenShift, CI/CD 환경에서 널리 사용된다.
주요 특징
- 데몬리스 작동: 백그라운드 서비스 없이 동작함
- 루트리스 이미지 빌드 지원
- Dockerfile 없이 커맨드 기반으로 이미지 레이어 조작 가능
- 컨테이너 내부에서도 이미지 빌드 가능
- Podman, Skopeo와 연동 가능 (Red Hat 컨테이너 도구 스택)
- OCI 이미지 표준 지원
- Tekton, OpenShift 등 CI/CD 플랫폼과의 높은 호환성
기본 명령 예시
buildah를 이용한 이미지 빌드는 다음과 같은 흐름으로 진행된다:
# 베이스 이미지에서 컨테이너 생성
container=$(buildah from registry.access.redhat.com/ubi8/ubi)
# 해당 컨테이너에 파일 복사 및 명령 실행
buildah copy $container ./app /app
buildah run $container -- dnf install -y python3
# 컨테이너 설정
buildah config --cmd "python3 /app/main.py" $container
# 이미지 생성
buildah commit $container myimage:latest
# 레지스트리에 푸시
buildah push myimage:latest docker://registry.example.com/myimage:latest
Docker와의 비교
| 항목 | buildah | Docker |
|---|---|---|
| 데몬 필요 여부 | 없음 (데몬리스) | 있음 (dockerd 필요) |
| 루트 권한 요구 | 선택적 (루트리스 가능) | 루트 권한 기본 필요 |
| 컨테이너 내 빌드 | 가능 | 복잡함 (Docker-in-Docker 필요) |
| 빌드 방식 | 커맨드 기반 + Dockerfile 선택적 | Dockerfile 중심 |
| 보안성 | 높음 (최소 권한 원칙) | 상대적으로 낮음 |
| Kubernetes 연동 | 높음 | 제한적 |
| 실행 관리 기능 | 없음 (Podman과 연계 필요) | 컨테이너 실행 포함 |
사용 환경
- OpenShift CI/CD 파이프라인 (Tekton Task 내 이미지 빌드)
- Kubernetes 클러스터 내부 빌드 작업
- 보안 민감한 환경 (루트 권한 제한)
- Podman 기반 개발 환경과 연동
- Docker 대체 도구로 컨테이너 빌드 분리