Skip to content
Go back

M1 Mac 에서 Podman 으로 Container Image 빌드하기

Published:  at  10:30 PM

이번 글에서는 M1 Mac 에서 Podman 으로 Container Image (Docker Image) 빌드에 관하여 이야기하려고 해요.

M1 Mac 이 출시된 이후로 압도적인 성능에 감탄하여 M1 으로 넘어가신 분들이 많이 있는 것으로 보여요.

다 좋은데, 이미지 빌드 및 실행과 관련하여 로컬(M1)에서 작업 시 몇 가지 문제가 있어요.

따라서, 아래의 사항들을 준수해야 로컬(M1)에서 amd64 이미지를 문제 없이 빌드할 수 있어요.

아래의 내용들은 Podman 을 기준으로 작성되었어요.

Step 1. Base Image Pull & Image Build 시 적절한 platform (Architecture) 지정하기.

일반적으로는 Dockerfile 을 이용한 빌드 시 아래와 같이 커맨드를 작성해요.

$ podman build -t <CONTAINER IMAGE REGISTRY>:<CONTAINER IMAGE TAG> <DOCKERFILE PATH>

하지만 위와 같이 입력 시 architecture 가 맞지 않아 Base Image 를 가져오는 단계에서부터 실패할 수 있어요.

이를 해결하기 위해 아래와 같이 직접 architecture 를 지정해 주면 돼요.

$ podman build --platform linux/amd64 -t <CONTAINER IMAGE REGISTRY>:<CONTAINER IMAGE TAG> <DOCKERFILE PATH>

--platform linux/amd64 를 추가한 것을 볼 수 있어요.

여기까지 하면 Base Image 를 가져오는 것은 잘 하고, 빌드도 잘 되는 듯 하지만 RUN 이 들어간 부분에서 실패할 것이에요.

Step 2. amd64 instruction 이 실행될 수 있도록 설정하기

Podman 에 있는 Podman Machine 을 사용한다는 가정 하에 작성했어요.

Linux 가 아닌 다른 플랫폼에서는 container 환경의 실행을 위해 일반적으로 VM 을 띄우게 돼요.

그런데 이 VM 이 M1 Mac 에서는 arm64 architecture 라서 RUN command 단계에서 에러가 발생해요.

다행히 해외의 어떤 용자 분께서 해결 방법을 제시해 주셨어요.

아래의 command 들을 순서대로 입력해 보세요.

>> podman machine ssh
$ sudo -i
# rpm-ostree install qemu-user-static
# systemctl reboot

그리고 다시 시도하면 아까 에러가 나던 부분에서 더 이상 에러가 발생하지 않는 것을 볼 수 있어요.

여기까지 하면 무사히 Container Image 를 빌드 완료하게 될 것이에요.

추가 정보

이렇게 빌드한 이미지는 대부분의 Container Image Registry 에 잘 푸시가 될 것이에요.

하지만, 간혹 Registry 에 따라 OCI format 을 지원하지 않아 푸시가 되지 않을 수 있어요.

이 경우, 아래와 같이 --format docker 옵션을 추가해서 빌드를 하면 잘 될 거에요.

$ podman build --platform linux/amd64 --format docker -t <CONTAINER IMAGE REGISTRY>:<CONTAINER IMAGE TAG> <DOCKERFILE PATH>

마치며

가능하다면 Docker Desktop 을 사용하는 쪽이 속 편하긴 한데, 경우에 따라 저걸 사용하지 못하는 경우가 있어요.

위와 같은 상황에 처하신 분들께 이 글이 도움이 되었으면 좋겠어요.



Previous Post
2021년 CKA 취득 후기
Next Post
2020년 네이버 신입 개발자 공개채용 지원 후기