docker image error
에러 문구
제 노트북은 apple m1 입니다.
클러스터 설정과 노드그룹을 모두 만들고 로컬에서 docker에서 이미지 build 후 ECR에 올려 pod으로 간단히 돌려봤는데 BackOff가 났습니다.
log를 보려했더니 아래와 같은 문구가 나타납니다.
exec /usr/local/bin/docker-entrypoint.sh: exec format error
이 문구는 다른 플랫폼에서 image를 build해서 생기는 문제라고 합니다.
제가 찾은 해결방법은 2가지가 있습니다.
첫번째 해결방법 code commit, code build, code pipeline
code commit
code commit 말고 그냥 github 이용하셔도 됩니다.
git을 복제하나 아애 remote로 설정하는 방법이 있습니다.
아래 공식문서에 잘 나와 있고 연결하고 나중에는 그냥 git이랑 똑같이 쓰면 됩니다.
refference: https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html
code build
이름 적고 소스에 code commit이나 github을 연결해주고 build spec을 작성해서 같이 넣어주면 됩니다.
아직 아티팩트는 필요없으니 아티팩트는 없음으로 두면 됩니다. 사실 여기까지만 해도 됩니다. 나중에 커밋할때마다 직접 빌드하면 되니까요.
code pipeline
code commit을 사용하면 트리거를 설정할 필요가 없지만 github을 사용하면 트리거를 설정해주어야 합니다.
code build는 위에서 만든거 설정해주고 code deploy는 넘어 갑니다. 이렇게 만들어주면 commit할때마다 알아서 image를 build하고 push 합니다.
평가
편하기는 한데 로컬의 컴퓨터만큼 빠르지는 않습니다. 몇분 기다려야 합니다.
그리고 비용도 발생하게 되구요.
두번쨰 해결방법 docker buildx
docker buildx create --name multi-arch-builder --driver docker-container --bootstrap --use
docker buildx build --platform linux/amd64 --push
두번째는 docker buildx를 이용하는 방법입니다.
다른 플랫폼에서도 이용할 수 있게 만들어 줍니다.
"ecr:push": "docker buildx build --platform linux/amd64 -t <Repository>${npm_config_name}:latest -f ./apps/${npm_config_name}/Dockerfile --push ."
npm run ecr:push --name=<이름>
package.json에 위와같이 만들어 줍니다.
monorepo를 이용하다보니 app마다 이미지가 달라서 그것도 arg로 설정했습니다.