티스토리 뷰
정중한 지적은 언제나 환영합니다!
댓글로 편히 남겨주세요
2편 에 이어서 S3 저장소 대신 컨테이너를 활용해서 배포를 해보겠다.
도커 환경을 이용할 것이고, AWS ECR(Elastic Container Registry) 서비스를 이용할 것 이다.
도커 기본 개념에 대해 이해를 하고 싶다면 아래 공식 문서를 첨부하겠다.
https://docs.docker.com/engine/
Docker Engine
Find a comprehensive overview of Docker Engine, including how to install, storage details, networking, and more
docs.docker.com
다시 한번 필자의 프로젝트 스펙을 적어본다.
서버 : express (node)
vpc : default
security group : custom (db, express 등의 포트는 뚫어주세요)
ec2 : t2micro (연습용)
rds : db.t4g.micro (연습용)
이제 시작하겠다.
목차는 다음과 같다.
1. Dockerfile 파일 추가
2. .dockerignore 파일 추가
3. Dockerrun.aws.json 파일 추가
4. deploy.yml 파일 수정
1. Dockerfile 파일 추가
먼저, Dockerfile에 대해 작성해 줄 것이다.
Dockerfile은 어떤 역할을 하는 것일까
Dockerfile은 쉽게 말해 프로젝트(애플리케이션)를 컨테이너로 배포하기 위해 Docker 이미지를 생성하는데 필요한 파일이다.
컨테이너로 배포하기 위해선 프로젝트 -> Docker 이미지 -> 컨테이너 실행 과정을 거쳐야 하며
이미지를 생성하기 위해 Dockerfile이 필요하다.
필자는 멀티 스테이지 빌드를 사용하여 Dockerfile 을 작성했다.
# 1. Build Stage
FROM node:22 AS build
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
# 2. Production Stage
FROM node:22-slim AS production
WORKDIR /usr/src/app
COPY --from=build /usr/src/app /usr/src/app
ENV PORT=3000
EXPOSE 3000
# 애플리케이션 실행
CMD ["node", "app.js"]
2. .dockerignore 파일 추가
이미지를 생성하는 데 있어 불필요한 파일은 이미지로 만들지 않는다. 이는 빌드 시간 단축, 용량 감소로 이어진다.
아래 4가지에 대해 작성해준다.
node_modules
.git
Dockerfile
.dockerignore
3. Dockerrun.aws.json 파일 추가
한 가지 더 중요한 것이 Dockerrun.aws.json 파일이다. 이는 AWS Elastic Beanstalk에서 Docker 애플리케이션을 배포하기 위해 사용하는 JSON 형식의 설정 파일이다.
Elastic Beanstalk이 Docker 이미지를 빌드하고 실행하는 데 필요한 정보를 제공하는 역할을 한다.
Dockerrun.aws.json은 두 가지 버전이 있는데 이는 아래와 같다.
- 버전 1: 단일 컨테이너 지원.
- 버전 2: 다중 컨테이너(Docker Compose) 지원.
필자의 프로젝트는 다중 컨테이너를 띄울 필요가 없기에 버전 1을 택하였다.
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "${ECR_REGISTRY}/${ECR_REPOSITORY}:${IMAGE_TAG}",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "3000"
}
]
}
4. deploy.yml 파일 수정
마지막으로 기존의 ci-cd 스크립트인 deploy.yml 파일에서 S3 부분을 ECR 관련 명령어로 수정해줌으로서 S3->ECR로 전환이 가능하게 된다.
# 3. Amazon ECR Public에 로그인
- name: Login to Amazon ECR Public
run: |
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/XXX
# 4. Docker 이미지 빌드 및 푸시
- name: Build, tag, and push image to Amazon ECR Public
env:
ECR_REGISTRY: public.ecr.aws/n1b7r8u0
ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY_NAME }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker build . -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"


'AWS' 카테고리의 다른 글
EC2에 Github Action, AWS ECR 사용하여 node.js 프로젝트 배포해보기 (0) | 2024.12.16 |
---|---|
Elastic beanstalk + Git Action 무 중단 배포 구현 - 2 (feat. S3) (5) | 2024.12.10 |
Elastic beanstalk + Git Action 무 중단 배포 구현 - 1 (feat. S3) (2) | 2024.12.05 |
EC2 모니터링- Slack 슬랙 연동 하여 알림 받기 (0) | 2024.08.24 |
- Total
- Today
- Yesterday
- 단지번호붙이기 JAVA
- k8s
- 자바
- 마법사 상어와 비바라기 자바
- 백준
- 자료구조
- 백준 1965 풀이
- 무중단배포
- java #스프링 #spring #server
- EC2
- 프로그래머스
- 쿠버네티스 오브젝트
- 쿠버네티스 개념
- 백준 상자 넣기 자바
- Java #코린이 #자바
- dfs
- AWS
- StatefulSet
- 백준 그림 자바
- k8s object
- ECR
- 구간합구하기
- 코딩테스트
- docker
- Java #객체 #자바기초 #자바
- 단지번호붙이기 자바
- 백준 상자넣기
- EB
- 행렬 테두리 회전하기 자바
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |