
[Docker, AWS] EC2에 Express 서버 올리기
AWS와 Docker을 활용하여 Express 서버를 띄워보자. 이 과정을 통해 EC2가 무엇인지, Docker의 장점인 이식성이 어떤 것을 의미하는지 알아보자.
예전부터 서버를 직접 띄워보고 싶단 생각을 가지고있었다. 사실 이런 과정은 주로 백엔드 담당 인원들이 진행해주었기에, 직접 이를 진행해본 경험이 없지만 Docker를 학습할 겸 이를 활용해서 EC2에 올리는 과정을 진행해보고 싶었다.
목차
- 띄우는 과정에 필요한 내용
- 결과
띄우는 과정에 필요한 내용
나는 다음과 같은 과정으로 도커 이미지를 EC2에 배포했다.
- Express 서버를 이미지로 빌드하고, 이를 AWS 서비스 중 하나인 Elastic Container Repository에 올린다.
- 해당 이미지를 EC2 컴퓨터에서 받고, 이를 실행시키는 동작으로 서 버를 띄운다.
다음 과정을 통해 상세히 알아보자.
AWS 서비스와 연동하기
우선, 올리기 이전에 AWS와 연동이 필요하다. 즉, AWS 서비스를 이용하기 위한 프로그램을 설치하고 권한을 획득해야한다는 것이다.
설치할 것 & 권한 획득 방법
- AWS-CLI
AWS 서비스를 사용하기 위한 CLI이다. 아래는 mac 기준이고, window 사용자는 검색하고 다운로드 하면 된다.
$ brew install awscli
$ aws --version # 출력 된다면 정상 설치
근데, ECR에 있는 이미지를 EC2 환경에 가져오는 과정 또한 필요하므로 이를 EC2 컴퓨터에도 설치해야한다.
나는 ubuntu 환경으로 EC2를 구성했기에 아래의 과정으로 설치를 진행했다.
$ sudo apt install unzip
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version # 잘 출력된다면 정상 설치된 상태
- IAM 권한
AWS 서비스에서 IAM을 만든다. 이 때, Container 자체의 권한을 추가적으로 설정하여 ECR 구성에 사용할 수 있도록 한다.
다음의 명령어로 발급받은 키를 사용할 수 있다.
$ aws configure
- Elastic Container Repository
이미지로 만든 것을 저장할 레포지토리가 필요하다. 레포지토리를 생성하고, 이 저장공간에 이미지를 넣는다고 생각하자.
실제 업로드
우선 이미지를 만든다. 이미지는 구현한 백엔드 애플리케이션에 따라 다른데, 나는 다음과 같은 Dockerfile로 이미지를 생성했다.
- dockerfile
FROM node
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
- ECR에 빌드하고 올리기
ECR을 잘 보면 어떤방식으로 올리는지 다 나와있다. 이를 복사해서 붙혀넣는 방식으로 업로드하면 된다.
단, 주의할 점은 mac m칩과 같은 경우 CPU가 달라 일반적인 빌드 결과가 다를 수 있다. 따라서 platform을 설정하는 추가 명령어를 다음처럼 작성해여 빌드한다.
docker build --platform linux/amd64 -t [name] .
- EC2에 불러오기
ECR에 이미지를 올렸으니 이를 가져올 차례다.
나는 ubuntu환경을 기준으로 vi compose.yml
명령어를 통해 파일을 작성하고 이를 docker compose up -t --build 를 통해 불러왔다.
결과

이 처럼 정상 동작함을 확인할 수 있다.
트러블 슈팅
사실 도중에 접속되지 않는 에러가 발생했다. 접근 자체가 막혔다.
이 때, EC2의 설정이 잘못됨을 알았다. 인스턴스의 보안 그룹 설정에 TCP 설정이 되어있지 않았기에 발생한 문제였고, Express의 포트인 3000을 허용하여 문제를 해결했다.