본문 바로가기

리눅스

[draft] 우분투에서 Docker를 사용하여 멀티 플랫폼 빌드를 지원하고 설정하는 방법

728x90

우분투 24.04에서 Docker를 사용하여 멀티 플랫폼 빌드를 지원하고 설정하는 방법

Docker에서 멀티 플랫폼 빌드(Multi-Platform Build)를 사용하려면 Docker Buildx를 활성화하고 설정해야 합니다. 멀티 플랫폼 빌드는 다양한 아키텍처(예: linux/amd64, linux/arm64)를 타겟으로 이미지를 빌드하는 데 유용합니다.

테스트 환경

$ lsb_release -d
Description:    Ubuntu 24.04.1 LTS

1. 멀티 플랫폼 빌드 지원 확인

Docker는 기본적으로 멀티 플랫폼 빌드를 지원합니다.

 

Docker 버전 확인

docker version --format '{{.Server.Version}}'
27.5.1

Docker Buildx 지원 여부 확인

  • 버전이 출력되면 Buildx가 설치되어 있고 사용 가능합니다.
docker buildx version
github.com/docker/buildx v0.20.0 8e30c46

2. Docker Buildx 활성화 및 설정

Buildx는 Docker에 기본 포함되어 있습니다. 활성화하려면 Buildx를 디폴트 빌더로 설정합니다.

실행하면 새로운 빌더가 생성되고 기본 빌더로 설정됩니다.

docker buildx create --name mybuilder --use
mybuilder
docker buildx inspect mybuilder --bootstrap
$ docker buildx inspect mybuilder --bootstrap
[+] Building 15.3s (1/1) FINISHED
 => [internal] booting buildkit                                                           15.3s
 => => pulling image moby/buildkit:buildx-stable-1                                        12.1s
 => => creating container buildx_buildkit_mybuilder0                                       3.2s
Name:          mybuilder
Driver:        docker-container
Last Activity: 2025-01-27 02:30:48 +0000 UTC

Nodes:
Name:                  mybuilder0
Endpoint:              unix:///var/run/docker.sock
Status:                running
BuildKit daemon flags: --allow-insecure-entitlement=network.host
BuildKit version:      v0.18.2
Platforms:             linux/amd64, linux/amd64/v2, linux/386
Labels:
 org.mobyproject.buildkit.worker.executor:         oci
 org.mobyproject.buildkit.worker.hostname:         3e0968253d36
 org.mobyproject.buildkit.worker.network:          host
 org.mobyproject.buildkit.worker.oci.process-mode: sandbox
 org.mobyproject.buildkit.worker.selinux.enabled:  false
 org.mobyproject.buildkit.worker.snapshotter:      overlayfs
GC Policy rule#0:
 All:            false
 Filters:        type==source.local,type==exec.cachemount,type==source.git.checkout
 Keep Duration:  48h0m0s
 Max Used Space: 488.3MiB
GC Policy rule#1:
 All:            false
 Keep Duration:  1440h0m0s
 Reserved Space: 7.451GiB
 Max Used Space: 59.6GiB
 Min Free Space: 14.9GiB
GC Policy rule#2:
 All:            false
 Reserved Space: 7.451GiB
 Max Used Space: 59.6GiB
 Min Free Space: 14.9GiB
GC Policy rule#3:
 All:            true
 Reserved Space: 7.451GiB
 Max Used Space: 59.6GiB
 Min Free Space: 14.9GiB
728x90

3. 멀티 플랫폼 빌드 확인 및 테스트

지원 플랫폼 확인

  • Docker가 지원하는 플랫폼 목록을 확인합니다.
docker buildx ls
NAME/NODE        DRIVER/ENDPOINT                   STATUS    BUILDKIT   PLATFORMS
mybuilder*       docker-container                                       
 \_ mybuilder0    \_ unix:///var/run/docker.sock   running   v0.18.2    linux/amd64 (+2), linux/386
default          docker                                                 
 \_ default       \_ default                       running   v0.18.2    linux/amd64 (+2), linux/386

Dockerfile 작성

  • Github
git clone https://github.com/anti1346/samplefile.git
vim Dockerfile
# 베이스 이미지 설정 (플랫폼에 따라 자동으로 최적화된 이미지를 가져옴)
FROM python:3.13-slim

# 메타데이터 추가 (이미지 설명)
LABEL maintainer="admin@scbyun.com" \
      description="A simple multi-platform Docker image example" \
      version="1.0"

# 컨테이너 내 작업 디렉토리 설정
WORKDIR /app

# 애플리케이션 파일 복사
COPY hello.py /app/hello.py

# Python 패키지 설치 (필요한 경우)
RUN apt update && \
    apt install -y --no-install-recommends curl && \
    apt clean && \
    rm -rf /var/lib/apt/lists/*

# 스크립트 실행 명령어 설정
CMD ["python", "/app/hello.py"]

간단한 멀티 플랫폼 빌드 테스트

  • --platform 옵션으로 빌드 대상 플랫폼을 지정합니다.
docker buildx build --platform linux/amd64 -t anti1346/samplefile:latest --load .

빌드 후 플랫폼 확인

  • 이미지가 빌드되었다면 다음 명령어로 플랫폼 정보를 확인할 수 있습니다.
docker inspect anti1346/samplefile:latest --format='{{.Architecture}}'

컨테이너 실행

docker run anti1346/samplefile:latest

 

우분투에서 Docker 멀티 플랫폼 빌드가 활성화됩니다.

 

728x90