본문 바로가기

devops/docker

Docker 없이 Buildah 툴에서 도커 이미지 빌드하기

Docker 없이 Buildah 툴에서 도커 이미지 빌드하기

컨테이너화된 애플리케이션의 빌드와 관리는 현대 소프트웨어 개발의 필수 요소 중 하나입니다. 대부분의 사용자는 Docker를 이용하지만, Docker Engine 없이도 이미지를 빌드할 수 있는 다양한 도구가 존재합니다. 이 글에서는 그중 하나인 Buildah를 사용하여 도커 이미지를 빌드하는 방법에 대해 소개합니다.

Buildah 소개

Buildah는 리눅스 컨테이너 이미지를 빌드하기 위한 도구로, Dockerfile 없이도 이미지를 생성, 수정, 그리고 버전 관리할 수 있게 해줍니다. Buildah는 OCI(Open Container Initiative) 표준을 준수하며, 도커와 호환 가능한 이미지를 생성할 수 있습니다.

Buildah 설치하기

먼저, Buildah를 사용하기 위해 시스템에 설치해야 합니다. 리눅스 배포판에 따라 설치 방법이 다를 수 있으니, 아래 예시를 참고하세요.

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:projectatomic/ppa
sudo apt-get update
sudo apt-get -y install buildah

Fedora:

sudo dnf -y install buildah

CentOS/RHEL:

sudo yum -y install buildah

Buildah를 이용한 Containerfile로 도커 이미지 빌드하기

Containerfile을 사용하여 이미지를 빌드하는 것은 컨테이너화된 애플리케이션 개발에서 흔히 사용되는 접근 방식입니다. Buildah는 이러한 파일을 이용해 Docker Engine 없이도 이미지를 빌드할 수 있는 강력한 도구입니다. 이 글에서는 Buildah와 Containerfile을 사용하여 도커 이미지를 빌드하는 방법을 소개합니다.

Containerfile 작성하기

Containerfile은 이미지 빌드 과정을 정의하는 파일입니다. Dockerfile과 매우 유사하며, Buildah는 이를 직접 사용할 수 있습니다. 아래는 간단한 웹 서버를 빌드하기 위한 Containerfile의 예시입니다.

# 기반 이미지로 alpine 사용
FROM alpine

# nginx 설치
RUN apk add --no-cache nginx

# 웹 서버 구성 파일 복사 및 디렉토리 생성
COPY nginx.conf /etc/nginx/nginx.conf
RUN mkdir -p /run/nginx

# 포트 80 오픈
EXPOSE 80

# nginx 실행
CMD ["nginx", "-g", "daemon off;"]

이 파일을 **Containerfile**이라는 이름으로 저장합니다. **nginx.conf**와 웹 서버의 홈페이지를 위한 index.html 파일도 준비해야 합니다.

Buildah를 사용한 이미지 빌드

이제 Buildah를 사용하여 위의 Containerfile로부터 이미지를 빌드할 수 있습니다. 아래 명령어를 실행하면 됩니다.

buildah bud -t my-webserver .

이 명령어는 현재 디렉토리(.)에 있는 Containerfile을 사용하여 **my-webserver**라는 태그를 가진 이미지를 빌드합니다. buildah bud 명령은 Docker의 docker build 명령어와 유사한 역할을 합니다.

이미지 확인 및 실행

빌드가 완료되면, 생성된 이미지를 확인할 수 있습니다.

buildah images

이미지를 컨테이너로 실행하려면, 다음과 같은 명령어를 사용할 수 있습니다.

podman run -d -p 8080:80 my-webserver

여기서 **podman**은 Buildah와 함께 사용할 수 있는 또 다른 컨테이너 도구입니다. 이 명령어는 8080 포트를 컨테이너의 80 포트에 바인딩하여 웹 서버에 접근할 수 있게 합니다.

이제 브라우저를 통해 **http://localhost:8080**에 접속하면, 빌드한 이미지를 기반으로 실행되는 웹 서버의 홈페이지를 볼 수 있습니다.

결론

Buildah와 Containerfile을 사용하여 Docker Engine 없이도 효율적으로 이미지를 빌드할 수 있음을 보여줍니다. 이 방법은 Dockerfile과 호환되며, OCI 표준 이미지를 생성할 수 있어 다양한 컨테이너 오케스트레이션 시스템에서 사용할 수 있습니다.