좀 더 상세한 내용의 가이드는 아래 게시글 참고
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 |