-
[AWS] AWS ECR을 활용해서 EC2에서 도커로 배포하기-2AWS 2024. 12. 8. 15:36
AWS ECR을 활용해서 EC2에서 도커로 배포하기-2
EC2에서 이미지를 다운받아 컨테이너를 실행해보자
EC2
docker pull [ECR에서 이미지 URI]
하지만 에러가 발생한다.
발생된 에러
Error response from daemon: Head "https://026090546022.dkr.ecr.ap-northeast-2.amazonaws. com/v2/ecr-practice-server/manifests/latest": no basic auth credentials
에러의 원인 / 해결
에러 메시지에 no basic auth credentials라고 적혀있다. 아직 ec2에서 aws 로그인 인증이 안된것이다.
저번에 ec에 aws IAM 계정의 액세스키를 등록해놨으므로 이를 기반으로 aws 로그인 하기위해서
AWS ECR 레포지토리 - 푸시명령보기 - (1번 명령어 ec2입력)
1. Retrieve an authentication token and authenticate your Docker client to your registry. Use the AWS CLI
여기에 나와있는 명령어를 ec2에서 실행시켜보자.
이제는 도커 이미지를 pull 할수 있게 되었다.
하지만 도커 이미지를 통해 컨테이너를 실행해보면 다음의 에러가 발생한다.
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
에러의 원인
위의 에러는 CPU 아키텍처 환경이 다르다는 의미이다. 이미지를 빌드할때는 M1과 같은 ARM기반의 환경에서 진행되고, 이미지 실행은 ARM기반이 아닌 환경에서 할 때 이런 에러가 발생한다.
(※애플의 M시리즈 CPU를 이용할때 발생한다)
에러 해결
이 에러를 해결하기 위해서는 이미지를 빌드할 때 이미지를 실행시키고자 하는 CPU 아키텍처에 맞춰서 이미지 빌드해야 한다. 맥북인 로컬환경에서 이미지를 다시 빌드해보자
로컬(맥북)
docker build --platform linux/amd64 -t instagram-server .
//추가된 옵션 --platform linux/amd64
앞으로 맥북(M시리즈 CPU)의 로컬에서 빌드한 이미지를 ec2환경에서 쓸때는 위의 옵션을 추가해야한다.
(※AWS EC2의 CPU 아키텍처 확인하는 방법)
ec2 명령어 입력
lscpu
출력
// x86_64 = linux/amd64 Architecture: x86_64
EC2에 nestJS, postgres, redis 서버 띄우기
compose.yml 작성
compose파일 작성
컨테이너 실행(필요한 이미지 다운)
docker compose up -d --build
코드 변경시 업데이트하여 재배포하기
1.이미지 빌드
2.aws로그인
3.푸시
4.docker compose pull (컴포즈에 있는 이미지들 업데이트)
5.docker compose up -d --build
의 과정을 거쳐 업데이트 된 코드를 재배포할 수 있다.
결과
다시 로컬에서 이미지를 빌드하여 ECR에 push하고 EC2 pull하여 컨테이너를 실행해보니 정상실행되는 것을 확인할 수 있었다.
이제 jdk나 nodejs 와 같은 별도의 프로그램 설치없이 오로지 도커만 설치해서 이미지를 다운받고 배포할 수 있게 되었다.
도커 컴포즈까지 함께 쓰면 더 편하고 간소화시킬 수 있다.
'AWS' 카테고리의 다른 글
[AWS] AWS S3 / CloudFront 를 이용해서 정적 웹서비스 배포하기 (0) 2024.12.14 [AWS]EC2 용량(스토리지)확장하기 (0) 2024.12.10