민프
[AWS][EC2] EC2 + Docker + ECR로 Nestjs 어플리케이션 배포하기 (feat. 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) 본문
[AWS][EC2] EC2 + Docker + ECR로 Nestjs 어플리케이션 배포하기 (feat. 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)
민프야 2025. 4. 5. 23:03준비물
- Docker
- nestjs Docker Image
- IAM (AccessKey, Secret Accesskey)
- ECR
- EC2
과정
- 로컬에서 Nestjs Docker image 생성
- ECR에 PUSH
- EC2(ubuntu)에 적용
1. EC2(ubuntu) - Docker 설치 (SSH)
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl start docker
sudo usermod -aG docker $USER
설치확인
docker --version
2. EC2 - AWS CLI 설치
순차적으로 진행
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
압축해제
unzip awscliv2.zip
설치
sudo ./aws/install
설치확인
aws --version
2-1. EC2 - AWS CLI Configure
IAM 생성 때 발급받은 Accesskey, Secret Accesskey를 잘 넣어주시면 됩니다.
3. EC2 - ECR 로그인
ECR - 레포지토리 선택 - 푸시 명령 보기 보시면 있습니다.
로그인 완료
4. EC2 - ECR 이미지 PULL
docker pull ECR 이미지 주소
아래 permission deiend 에러가 나온다면 'sudo'를 앞에 붙여주거나
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/
aws configure 자격증명이 제대로 되어있는지 확인을 해봅시다.
pull이 완료가 되면 아래와 같이 나오게 됩니다.
5. EC2 - Docker - ECR 이미지 적용
sudo docker run -d -p 3000:3000 이미지이름
sudo docker tag 이미지URI 별칭입력(예: test-api-docker)
sudo docker run -d -p 3000:3000 test-api-docker
이렇게 하고 아래와 같이 브라우저에서 접속 확인을 해보자
http://<EC2 퍼블릭 IP>:3000
만약 이렇게 했는데 안됐다면
먼저 docker가 잘 실행되고 있는지 확인해보자
실행중인 도커 확인
sudo docker ps
없다면 다음으로 로그 확인을 해봅시다.
sudo docker logs -f <컨테이너_ID>
저 같은 경우 아래 에러가 나왔네요
포맷에러가 났는데
그러고보니 처음 도커를 실행했을 때 아래 이러한 warning이 있었는데
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
알아보니 결론적으로 플랫폼(아키텍쳐) 불일치 문제였습니다.
달라서 나온로컬에서 Docker 이미지를 M1(Mac ARM64) 환경에서 빌드했고,
지금 EC2는 일반적인 x84_64(amd64)환경이기 때문에 아키텍쳐가 달라서 나오는 메세지였습니다.
5-1 . Buildx로 multi-platform image만들기
로컬에서 진행
docker buildx build --platform linux/amd64 -t test-docker-api .
만약 amd64, arm64를 모두 지원하는 이미지를 빌드하고 싶다면
docker buildx build --platform linux/amd64,linux/arm64 -t test-docker-api .
로컬에서 빌드 후, 잘 동작하는지 확인하고 -> 다시 ECR에 push -> EC2에서 ECR latest Image pull -> EC2에서 성공적으로 Docker 가 실행중인지 확인 (docker ps) -> http://<EC2 퍼블릭 IP>:3000 접근 확인
결과는 아래와 같습니다.
다음 포스팅에서는 CICD를 포함해서 진행해보겠습니다.
'DevOps > [AWS]' 카테고리의 다른 글
[AWS][EC2] ECS + Docker +ECR + CICD(github actions)를 이용하여 nestjs를 배포해보자 (0) | 2025.04.06 |
---|---|
[AWS] VPC와 Subnet (1) | 2025.03.24 |
[AWS] VPC, Subnet를 설정하기 전에 사전지식 (Private IP, NAT, CIDR) (0) | 2025.03.24 |
[AWS] EC2 인스턴스에 탄력적 IP(Elastic IP) 할당을 해보자 (0) | 2025.03.03 |
[AWS] S3 + Lambda + CloudFront + MediaConvert를 이용하여 Vod Streaming Server를 구축해보자 - 3. MediaConvert 자동화 (Lambda Trigger 설정) (0) | 2024.01.26 |