Search
Duplicate

Docker buildx로 멀티 아키텍처 플랫폼 image 만들기(2)

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Docker
Scrap
태그
buildx
9 more properties
이전에 맥에서 작업한 기존 image파일이 라즈베리파이에서 작동하지 않는 것을 확인하였다.
이번 시간에는 Docker의 강력한 기능 중 하나인 Buildx를 사용해서 image를 build해보자!

Docker Buildx

Buildx는 여러 다른 플랫폼 용으로 빌드하는 기능 등을 포함하는 CLI 확장 플러그인으로 19.03 버전 부터 사용할 수 있다.
아직은 experimental feature로 제공되고 있기 때문에 사용하려면 해당 기능을 직접 활성화 해야한다.

Buildx 활성화, Docker 버전 체크

우선 docker 19.03 버전부터 사용이 가능하므로 설치되어 있는 docker의 버전을 알아보자
$ docker -v
Shell
복사
현재 buildx가 사용 가능하니 Experimental Docker CLI features를 활성화 해보자
export DOCKER_CLI_EXPERIMENTAL=enabled vi ~/.docker/config.json
Shell
복사
vi 를 통해 config파일을 열게되면 아래와 같은 설정창이 나온다.
여기서 experimental 옵션을 enable로 바꿔주어야 한다.
"experimental": "enabled"
Shell
복사
이제 터미널에서 buildx가 잘 활성화 되었는지 확인해보자! 아래와 같이 buildx에 대한 설명이 나오면 정상적으로 활성화가 된 것이다.

Buildx의 기본 명령어

1) Builder Instance 확인

$ docker buildx ls
Shell
복사

2) Builder version 확인

$ docker buildx version
Shell
복사

3) Builder instance 중지 / 제거

$ docker buildx stop $ docker buildx rm
Shell
복사
docker builder를 이미 만들어둔 상태에서는 builder container가 실행중이다.
실행중인 builder container를 중지하고 지워보자

Builder 생성 및 사용 설정하기

기본적인 명령어들에 대해 이해했으니 이제 본격적으로 builder를 직접 만들어보자.
builder create에 대한 상세한 설명은 아래 docker docs를 참고하자.
builder를 생성하지 않고 사용하면 기본적으로 default builder를 사용하게 된다.
이제 원하는 옵션을 넣어 나만의 builder를 생성해보자
$ docker buildx create --name [name] --driver [option] --use
Shell
복사
—-name : builder name
—-driver : (available : [])
docker : docker daemon에 내장된 builder를 사용
docker-container : docker를 통해 생성된 buildkit container를 사용, 이 드라이버를 사용하면 multi-platform image를 내보내거나 캐싱이 가능(하지만 docker image에 자동으로 나타나지 않음)
kubernetes : kubernetes 포드를 사용, 포드를 스핀업 하여 사용가능(kubernetes를 잘 몰라서 모르겠습니다..)
—-use : 현재 builder를 기본사용으로 지정
추가로 —-platform 옵션을 사용하여 해당 builder의 build platform을 고정할 수 있다.

Buildx로 multi-platform image 만들기

이제 모든 준비는 끝났다. 만들어둔 builder를 사용해서 image를 build해보자.
우리가 테스트할 라즈베리파이의 아키텍처는 linux/arm/v7 이다. 아래 명렁어를 치면 정상적으로 image가 build되는 것을 확인할 수 있다.
$ docker buildx build --platform linux/arm/v7 -t \ rkskekzzz/ft_server_multiplatform --push .
Shell
복사
이 때, 우리는 driver로 docker-container를 사용하는 builder를 생성했기 때문에 해당 container가 실제로 작동중인 것을 알 수 있다.

라즈베리파이에서 ft_server 테스트하기!

이제 다시 라즈베리파이로 돌아가서 이미지를 실행시켜보자 우선 Docker hub에 있는 image를 Pull하자!
실제로 ft_server를 실행시킬 때 사용하는 명령어를 넣어서 작동시켜 보았다.
모두 정상적으로 잘 작동하는 것을 확인할 수 있다.
Docker buildx를 활용해서 multi-platform image를 build하는 방법에 대해 알아보았다.
이처럼 많은 서비스들이 개발을 손쉽게 진행할 수 있도록 매일 매일 더 좋은 기능을 만들고 있다. 이번 buildx를 공부하면서 크로스플랫폼 개발을 쉽게 할 수 있어서 너무 좋았지만 한편으로는 한명의 개발자가 더 많은 것을 알아야 하는 시대라는 생각이 들었다.

Reference