본문 바로가기
docker

docker buildx

by misankim 2023. 3. 6.
좀 더 상세한 내용의 가이드는 아래 게시글  참고
 
docker buildx



기존 docker build 명령어보다 다양한 옵션을 제공하는 docker cli plugin



공식 가이드 문서

 

공식 github



# 설치

 

최신 릴리스 확인

 

mkdir -p ~/.docker/cli-plugins/

curl -L https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx

chmod 755 ~/.docker/cli-plugins/docker-buildx

docker buildx version

 

(참고) buildx를 기본 builder 로 사용하기(docker build 커맨드가 docker buildx build 커맨드와 같아짐)
docker buildx install



# 빌드
-> --load(현재 docker images 에 로드), --push(레지스트리에 푸쉬) 옵션을 지정하지 않으면 빌드만 실행됨

 

docker buildx build -t my-image:1.0 ./ --load

 

 

혹은 빌드 완료 후 바로 레지스트리로 푸쉬하려면

 

docker buildx build -t my-image:1.0 ./ --push



# 멀티 플랫폼 빌드

 

## 세팅

 

요구 사항(커널 버전이 낮아 centos7 인스턴스에서는 불가하여 amazon linux 환경에서 테스트 완료)
kernel >= 4.8
binfmt-support >= 2.1.7

 

qemu 관련 패키지 설치(설치 후 재부팅 필요)
yum install -y qemu-user qemu-*-static qemu-kvm-tools qemu-kvm virt-install libvirt libvirt-python libguestfs-tools-c qemu-system-aarch64 glib2-devel pixman-devel

 

멀티 플랫폼 지원 추가(docker desktop 환경에서는 설치 필요 없음)
-> 빌드를 지원하는 플랫폼이 추가됨
docker run --privileged --rm tonistiigi/binfmt --install all

 

(참고) 지원 추가 전/후 지원하는 플랫폼 비교

 

지원 추가 전
my-build * docker-container

출력
my-build0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/386

 

지원 추가 후
my-build * docker-container

출력
my-build0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

 

## 도커 파일 작성

 

mkdir apache-alpine && cd apache-alpine

vim Dockerfile
FROM alpine:latest

RUN apk update --no-cache && apk add --no-cache apache2

ENTRYPOINT [ "httpd","-D","FOREGROUND" ]

EXPOSE 80

 

## 빌드

 

빌더 생성
docker buildx create --use --name my-build

 

생성된 빌더 정보 확인
docker buildx ls
docker buildx inspect --bootstrap

 

멀티 플랫폼으로 빌드된 이미지는 --load 옵션 사용 불가, 반드시 --push 옵션으로 레지스트리로 푸쉬해야함

 

ecr docker 로그인(ecr 콘솔에서 확인 가능)
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/s1v1h3u2

 

빌드 실행하여 푸쉬
docker buildx build --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7 -t public.ecr.aws/s1v1h3u2/apache-alpine-multi:1.0 ./ --push

 

대상 아키텍쳐 환경에서 컨테이너 실행
docker run -d --name apache-alpine-multi -p 80:80 public.ecr.aws/s1v1h3u2/apache-alpine-multi:1.0
 
이미지의 아키텍쳐 확인
docker exec -it apache-alpine-multi arch






'docker' 카테고리의 다른 글

Alpine Linux로 Docker 이미지 빌드  (0) 2023.03.13
Docker buildx를 통한 멀티 플랫폼 이미지 빌드  (0) 2023.03.11
traefik 리버스 프록시 로드밸런서  (1) 2023.03.06
docker swarm  (0) 2023.03.06