민프

[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) 본문

DevOps/[AWS]

[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를 포함해서 진행해보겠습니다.

Comments