다중 아키텍처 컨테이너 이미지 구축을 자동화하는 방법

in #kr-dev2 years ago

다중 아키텍처 컨테이너 이미지 구축을 자동화하는 방법

많은 개발자들이 로컬 환경을 Apple M1(ARM 기반 실리콘)으로 옮기고 있고, AWS에서 비용 인스턴스당 최고의 성능을 제공하는 ARM 기반 Graviton2 인스턴스를 제공하고 있으므로 다중 아키텍처(amd64, arm64) 컨테이너 이미지를 고려해야 합니다. 이 기사에서는 로컬 환경에서 다중 아키텍처 이미지를 빌드하고 GitHub Actions 및 AWS CodeBuilds를 통해 자동화하는 방법을 설명합니다.

https://unsplash.com/photos/eo5jK8Mmz68

## 사용자 스토리

- As a: 개발자가 단일 아키텍처로 수동으로 컨테이너 이미지
를 빌드합니다.
- 그래서: 개발자가 컨테이너를 다중 아키텍처 환경에 쉽게 전달할 수 있습니다.

## 쉬운 승리

docker buildx ls환경에 설치된 에뮬레이터를 보여줍니다. 목록이 표시되지 않으면 컴퓨터에 Docker 빌드를 설치할 수 있습니다.

Buildx는 다중 플랫폼 구축을 위한 내장 지원 제공과 같은 많은 강력한 빌드 기능을 지원합니다. 모든 빌드 는 추가 컨테이너에서 실행되는 Moby/Buildkit 빌더 엔진으로 실행 되는 buildx 를 통해 실행됩니다.

컨테이너 ID 이미지 명령 생성된 상태 포트 이름 15166d7ffcf9 moby/buildkit:buildx-stable-1 "buildkitd" 3주 전 최대 4시간 buildx_buildkit_mybuilder0 docker buildx ls 이름/노드 드라이버/ENDPOINT 상태 플랫폼 mybuilder * docker-container   mybuilder0 unix:/// linux/arm64, linux/amd64, linux/amd64/v2, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/을 실행하는 var/run/docker.sock v7, linux/arm/v6 데스크탑-리눅스 도커

## Buildx로 이미지 빌드

https://docs.docker.com/build/building/multi-platform/#getting-started

buildx로 Dockerfile을 빌드하고 빌드할 아키텍처 목록을 쉼표로 구분된 목록으로 전달합니다. 예를 들어

docker buildx build -platform linux/amd64,linux/arm64 \ -t cloudacode/simple-test:latest - push .

Buildx는 x86 바이너리를 포함하는 버전과 arm64 바이너리를 포함하는 버전의 두 가지 버전을 가져온 다음 각 버전에서 셸 바이너리를 실행합니다.

docker buildx 는 로컬에서 다중 플랫폼 이미지를 지원하지 않으므로 이미지를 레지스트리에 바로 푸시하지 않으려면 컨테이너 이미지를 하나씩 빌드해야 합니다.

 amd64 arm64 의 아치  용 ; docker buildx build -t cloudacode/simple-test:latest- $arch - platform linux/ $arch - 출력 유형 =docker .; 완료

## 다양한 건축 방법

CPU는 해당 아키텍처에 대한 바이너리만 실행할 수 있습니다. x86 CPU는 ARM 바이너리를 실행할 수 없으며 그 반대도 마찬가지입니다. 이것이 buildx가 소프트웨어를 기본적으로 빌드하는 대신 소프트웨어를 에뮬레이션하기 위해 나온 이유입니다. AWS CodeBuild와 같은 클라우드 기반 빌드 플랫폼을 사용하는 경우 공급자는 일반적으로 다중 아키텍처 호스트 이미지를 지원하며 기본 방식으로 컨테이너 이미지를 빌드할 수 있습니다.

AWS CloudBuild를 통한 Buildx VS Native를 통한 에뮬레이션

### GitHub 작업 을 통한 Buildx

buildx를 사용하여 여러 플랫폼을 에뮬레이션하고 CI 파이프라인의 레지스트리에 푸시합니다.

github 작업 워크플로를 추가하기 전에 암호화된 dockerhub 로그인 자격 증명(사용자 이름 및 암호)을 리포지토리의 비밀로 만들어야 합니다.

결국 GitHub 작업이 트리거되고 다중 아키텍처 이미지를 빌드하고 dockerhub에 자동으로 푸시하는 것을 볼 수 있습니다.

다중 아키텍처 이미지 구축을 위한 GitHub Action

DockerHub 다중 아키텍처 이미지

### AWS 코드빌드

CodePipeline 및 CodeBuild를 사용하면 기본 방식으로 다중 아키텍처 도커 이미지 빌드를 자동화하고 DockerHub에 푸시할 수 있습니다. 다음 다이어그램은 아키텍처를 보여줍니다.

AWS CodeBuild 및 CodePipeline을 사용하여 다중 아키텍처 이미지 빌드 자동화

다음은 AWS CodeBuild 및 AWS CodePipeline을 사용하여 여러 아키텍처 도커 이미지를 빌드하는 terraform 모듈입니다.

사용자 지정 모듈을 쉽게 사용하여 terraform을 통해 AWS CodePipline, CodeBuild, SecretManager 및 S3 버킷 리소스를 배포할 수 있습니다. 다음은 구성입니다.

terraform 코드를 적용하기 전에 buildspec.ymlbuildspec-manifest.yml 이 소스(github) 저장소에 있는지 확인하십시오.

마지막으로 AWS CodePipeline에서 여러 단계를 볼 수 있습니다.

다중 아키텍처 이미지 구축을 위한 AWS CodePipeline

DockerHub 다중 아키텍처 이미지

출처 : https://blog.cloudacode.com/how-to-automate-building-multi-architecture-container-images-4c57c759cb2c

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.