728x90
멀티-플랫폼 이미지 빌드 명령어 (여러 운영체제 호환 가능한 도커 이미지 빌드)
AWS ECS와 ECR을 연계해 CI/CD를 적용하는 구성을 시도하다가 Docker image를 빌드한 환경과 이 이미지를 실행할 환경의 운영체제가 다르면 도커 이미지가 제대로 실행되지 않는 에러를 만났다. 그래서 멀티-플랫폼 이미지를 빌드할 수 있는 명령어를 새롭게 찾아봤다.
원인
일단 도커 이미지가 제대로 실행되지 않는 에러는 도커 컨테이너에 접속하면서 에러를 냈었다.
exec /usr/bin/java: exec format error
위 에러가 도커 컨테이너에 접속하는 명령언데 exec부터 format error를 던지니 지금 뭔가 도커 이미지에 문제가 있던 거였다.
찾아보니 도커 이미지를 빌드할 때와 배포할 때의 운영체제 두 개에 전부 호환되는 이미지를 빌드할 수 있는 명령어가 있었다.
명령어
docker buildx build --platform=linux/amd64,linux/arm64 -t [ECR Repository]:latest . --push
이 명령어는 Docker를 사용하여 멀티-플랫폼 이미지를 빌드하고 푸시하는 것이다.
명령어의 각 부분을 하나씩 살펴보겠다.
- docker buildx build
- Docker Buildx는 Docker의 일부로, BuildKit을 사용하여 표준 docker build 명령어보다 더 많은 기능을 제공한다. 여기에서는 멀티-플랫폼 빌드를 수행한다.
- --platform=linux/amd64,linux/arm64
- 이 옵션은 어떤 CPU 아키텍처를 대상으로 이미지를 빌드할 것인지 지정한다.
- 여기에서는 linux/amd64와 linux/arm64 두 가지 아키텍처를 대상으로 한다.
- -t [ECR Repository]:latest
- 이 부분은 빌드된 이미지에 태그를 부여하는 것이다.
- 여기에서는 Amazon ECR (Elastic Container Registry)의 특정 리포지토리와 태그 latest를 지정하고 있다.
- .
- 이 부분은 빌드 컨텍스트의 위치를 지정한다.
- 현재 디렉토리(.)가 컨텍스트로 설정되어 있다.
- --push
- 이 플래그는 빌드가 완료된 후에 이미지를 위에서 지정한 리포지토리에 자동으로 푸시하도록 한다.
따라서 이 명령어는 현재 디렉토리의 Dockerfile을 사용하여 linux/amd64와 linux/arm64 플랫폼을 대상으로 이미지를 빌드하고, 빌드된 이미지를 Amazon ECR의 recipia-repository에 latest 태그로 푸시하는 작업을 수행한다.
만약에 도커 이미지를 빌드하고 배포할 운영 체제가 다르다면 위 명령어를 사용하면 된다.
[AWS] ECS 생성1 - ECR 생성하기 (M1 Mac 제외)
'Docker' 카테고리의 다른 글
[Docker] docker run httpd 명령어 쳤을때 AH00558 경고 나올때 (0) | 2023.10.22 |
---|---|
[Docker] Docker의 이해 - Docker hub로 이미지 공유하기 (push) (2) | 2023.10.22 |
[Docker] Docker의 이해 - Docker image 만들기 (Dockerfile & build) (2) | 2023.10.21 |
[Docker] Docker의 이해 - Docker image 만들기 (commit 명령어 사용) (0) | 2023.10.21 |
[Docker] Docker의 이해 - Docker Compose (1) | 2023.10.21 |