Dataflow에서 커스텀 컨테이너를 사용하는 경우 컨테이너는 작업자 VM의 아키텍처와 일치해야 합니다. 이 문서에서는 x86 및 Arm VM과 호환되는 멀티아키텍처 컨테이너를 만드는 방법을 설명합니다.
Docker CLI 또는 Cloud Build를 사용하여 컨테이너 이미지를 빌드할 수 있습니다.
Docker를 사용하여 이미지 빌드
Dockerfile을 만듭니다.
FROM
안내를 사용하여 멀티아키텍처 기본 이미지를 지정합니다.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Buildx 도구를 설치합니다. 도구가 설치되었는지 확인하려면 다음 명령어를 실행합니다.
docker buildx version
다음 명령어를 실행하여
docker-container
드라이버를 사용하는 빌더 인스턴스를 만듭니다. 이 드라이버는 멀티아키텍처 이미지를 빌드하는 데 필요합니다.docker buildx create --driver=docker-container --use
--use
플래그는 새 빌더 인스턴스를 현재 빌더로 설정합니다.다음 명령어를 실행하여 Docker에서 Artifact Registry에 대한 요청을 인증하도록 구성합니다.
gcloud auth configure-docker REGION-docker.pkg.dev
REGION을 Artifact Registry 저장소의 리전으로 바꿉니다.
다음 명령어를 실행하여 컨테이너 이미지를 빌드하고 Artifact Registry에 푸시합니다.
docker buildx build \ --platform=linux/amd64,linux/arm64 \ -t REGISTRY/IMAGE:TAG \ --push .
다음을 바꿉니다.
- REGISTRY: Docker 저장소
- IMAGE: 이미지 이름
- TAG: 이미지 태그
Cloud Build를 사용하여 이미지 빌드
Dockerfile을 만듭니다.
FROM
안내를 사용하여 멀티아키텍처 기본 이미지를 지정합니다.FROM apache/beam_python3.10_sdk:2.50.0 # Make your customizations here, for example: ENV FOO=/bar COPY path/to/myfile ./
Dockerfile이 포함된 동일한 디렉터리에서
docker_buildx.yaml
이라는 파일을 만듭니다. 다음 텍스트를 붙여넣습니다.steps: - name: 'docker' args: ['buildx', 'create', '--driver', 'docker-container', '--name', 'container', '--use'] - name: 'docker' args: ['buildx', 'build', '--platform', 'linux/amd64,linux/arm64', '-t', 'REGISTRY/IMAGE:TAG', '--push', '.']
다음을 바꿉니다.
- REGISTRY: Docker 저장소
- IMAGE: 이미지 이름
- TAG: 이미지 태그
이미지를 빌드하고 푸시하려면
gcloud builds submit
명령어를 실행합니다.gcloud builds submit --region=REGION --config docker_buildx.yaml
REGION을 사용할 Cloud Build 서비스의 리전으로 바꿉니다.
자세한 내용은 Cloud Build로 Docker 이미지 빌드 및 푸시를 참조하세요.
컨테이너 이미지 확인
Google Cloud 콘솔에서 저장소 페이지를 엽니다.
컨테이너 이미지가 있는 저장소를 클릭합니다.
이미지를 클릭하여 버전을 확인합니다.
버전을 클릭합니다.
매니페스트를 클릭합니다.
매니페스트 파일의
platform
섹션에는arm64
및amd64
의 항목이 있어야 합니다. 예를 들면 다음과 같습니다.{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:441d5438885049e2b388523a8cb5b77ea829c3c3f53326fb221fe185abd67f07", "size": 3074, "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:d3b98b0f8f3f555f5453c79b240bd2b862d4f52d853fe81bae55f01a663de29c", "size": 3073, "platform": { "architecture": "arm64", "os": "linux" } } ] }