Docker와 cross platform

ool2o8·2024년 2월 21일
0

wishpang (FastAPI+React)

목록 보기
5/6

람다에서 동작하던 이미지를 cloud run으로 옮기며 같은 이미지를 사용함에도 기존에 보지 못했던 오류가 발생했다.

OSError: [Errno 8] Exec format error: '/usr/local/bin/geckodriver'

이 오류를 통해 gcp 와 aws의 컴퓨터의 os가 다름을 알 수 있었다.
(사실은 labmda 구성할 때에 arm64로 선택했다. X86_64 선택했으면 상호 호환 됐을 듯)

aws lambda (arm64) 용 geckodriver 설치

RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux64.tar.gz

RUN sh -c 'tar -x geckodriver -zf geckodriver-v0.34.0-linux64.tar.gz -O > /usr/local/bin/geckodriver'

cloud run (adm64) 용 geckodriver 설치

RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux-aarch64.tar.gz

RUN sh -c 'tar -x geckodriver -zf geckodriver-v0.34.0-linux-aarch64.tar.gz -O > /usr/local/bin/geckodriver'

설치 파일을 os에 맞춰주니 해결됐다

artifact registry에 빌드 + 푸시

빌드와 동시에 artifact registry에 푸시하는 방법이다.
로컬에서 이미지 빌드하고 태그 지정하고 푸시하는 방법이 한줄로 줄어 편리하다.

gcloud builds submit --tag asia-northeast3-docker.pkg.dev/wishpang/wishpang/wishpangcrawler

다른 플랫폼으로 도커 이미지 빌드하기

서로 다른 플랫폼에서 같은 이미지를 풀 받을 수 있도록 빌드해서 푸시하는 방법이다.
이렇게 빌드하면 풀 받는 환경에 따라 풀 받는 이미지가 다르다.

docker buildx build --platform=linux/arm64/v8,linux/amd64 -t [태그명] --load .

0개의 댓글