# 'node:21-alpine' 이미지를 기반으로 하는 빌드단계를 시작합니다.
# 이 단계의 이름은 development라고 지정합니다.
FROM node:21-alpine AS development
# 빌드 시간동안 사용할 변수 'NODE_ENV'를 선언하고, 기본값으로 'development'를 설정합니다.
ARG NODE_ENV=development
# ARG로 설정된 'NODE_ENV' 값을 이미지내에서 실행되는 애플리케이션에 'development'로 환경설정합니다.
ENV NODE_ENV=${NODE_ENV}
# 이미지 내의 작업 디렉터리를 '/app'으로 설정합니다.
WORKDIR /app
# 로컬 컴퓨터 디렉터리 내에서 package.json, package-lock.json 파일을 /app 으로 복사합니다.
COPY package*.json ./
# package.json에 작성된 npm 패키지들을 설치합니다.
RUN npm install
# 로컬 컴퓨터에 있는 현재 디렉터리의 모든 파일을 /app으로 복사합니다.
COPY . .
# package.json에 정의된 build 스크립트를 실행해 애플리케이션을 빌드합니다.
RUN npm run build
# 새로운 빌드 단계를 시작하며, 이 단계는 'production'으로 이름을 지정합니다.
FROM node:21-alpine AS production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /app
# 'development' 빌드 단계에서 생성된 '/app/dist' 디렉터리를 현재 작업 '/app' 디렉터리에 복사합니다.
COPY --from=development /app/dist ./dist
COPY package*.json ./
# devDependencied를 제외하고, dependencied에 명시된 npm 패키지들만 설치합니다.
RUN npm install --only=production
# 컨테이너가 시작될 때 실행할 명령어를 지정합니다. node dist/main 명령어로 애플리케이션을 실행합니다.
CMD ["node","dist/main"]
이 프로젝트에서 개발용: .develop.env
, 배포용: .production.env
으로 환경변수를 2개로 구분하여 사용했기 때문에 NODE_ENV 변수를 다르게 지정했습니다.
ECR은 도커의 이미지를 저장하는 저장소입니다.
AWS console의 ECR에 들어가서 시작하기를 클릭합니다.
사용할 레포지토리의 이름을 작성해주고 바로 생성해줍니다.
생성한 ECR에 Docker 이미지 업로드하는 것은 다음글에서 해보겠습니다.
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html
해당 링크에 가서 AWS CLI를 로컬 컴퓨터에 설치합니다.
우측 상단의 사용자이름을 클릭하고 보안 자격 증명을 클릭합니다.
액세스 키란에서 액세스 키 만들기를 클릭합니다.
IAM에서 사용자를 생성하여 해당 사용자만을 위한 액세스키를 생성할 수 있습니다. 이 프로젝트는 저만 사용하므로 root 계정으로 액세스키를 만들겠습니다.
.csv 파일을 다운 받아 액세스키와 비밀 액세스 키를 잘 기록해두세요.
AWS Access Key ID
에는 Access Key ID 붙여 넣으세요.
AWS Secret Access Key
에는 Secret Access Key 붙여 넣으세요.
Default region name
은 'ap-northeast-2' 작성하세요
Default output format
은 Enter 치고 넘어갑니다.
생성한 ECR에 접속하여 우측 상단의 '푸시 명령 보기'를 클릭합니다.
macOS, Windows에 맞는 곳을 클릭하시고 아래 명령어를 차례대로 복사하여
프로젝트 루트 디렉터리의 터미널에서 실행합니다.
주의
ERROR: Cannot connect to the Docker daemon at unix:///Users/heo-changwon/.docker/run/docker.sock. Is the docker daemon running?
라는 에러가 발생한다면 docker를 켰는지 확인해주세요.
ECR 레포지토리에 이미지가 저장된 것을 확인할 수 있습니다.