티스토리 뷰

이전에 SpringBoot 프로젝트를 도커 이미지로 만들어서 ECR에 올렸었는데요 이번에는 Node 프로젝트를 도커 이미지로 만들어서 ECR에 올려보겠습니다.

 

1. Node 프로젝트 생성

이미 Node로 생성된 프로젝트를 사용하겠습니다. (각자 상황에 맞는 controller 등을 추가해주세요...)

 

2. Dockerfile 생성

프로젝트 루트 디렉토리 아래 Dockerfile을 생성합니다.

FROM alpine:3.14

# set the default NODE_ENV to production
# for dev/test build with: docker build --build-arg NODE=development.
# and the testing npms will be included
ARG NODE=production
ENV NODE_ENV ${NODE}
ENV NODE_VERSION 16.8.0
ENV HOST '0.0.0.0'

# copy package info early to install npms and delete npm command
RUN mkdir -p /프로젝트명
RUN mkdir -p /프로젝트명/logs

WORKDIR /프로젝트명
COPY . ./
RUN rm -rf node_modules

RUN apk -U add curl jq bash nodejs npm yarn python3 py3-pip && \
    pip3 install awscli netaddr && \
    npm install && npm run build && apk del --purge npm && \
    rm -rvf /var/cache/* /root/.npm /tmp/*
RUN echo node --version

EXPOSE 7070
ENTRYPOINT ["bash", "./startup.sh"]

 

ENV : Dockerfile 또는 컨테이너 안에서 환경 변수로 사용 가능

 

startup.sh 파일은 아래와 같습니다.

#!/bin/bash

set -x

#exec node app/server.js
cd /프로젝트명
cp app/rds-combined-ca-bundle.pem ./build/
yarn start

 

위 파일에서 rds-combined-ca-bundle.pem 파일의 경우 AWS DocumentDB(MongoDB)에 접속하기 위해 필요한 파일로 MongoDB 생성 후 아래 명령으로 받을 수 있습니다.

wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

 

3. buildspec.yml 파일 생성

CodeBuild를 통해 Node 프로젝트를 빌드하고 도커 이미지로 생성하여 ECR에 push 하기 위해 buildspec.yml 파일을 생성합니다.

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin AWS_계정_ID.dkr.ecr.ap-northeast-2.amazonaws.com
      - REPOSITORY_URI=AWS_계정_ID.dkr.ecr.ap-northeast-2.amazonaws.com/ECR_리포지토리명
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest --build-arg NODE=production .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '[{"name":"ECR_리포지토리명","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
      - cat imagedefinitions.json

artifacts:
  files: imagedefinitions.json

 

4. 소스 올리기

Node 프로젝트의 소스를 git을 사용하여 CodeCommit에 push 합니다. (CodeCommit이 아닌 다른 git repository를 사용하여도 문제 없습니다.)

 

5. ECR 리포지토리 생성 및 CodeBuild 프로젝트 생성

이제 ECR 리포지토리와 CodeBuild 프로젝트를 생성하여 정책을 추가하고 빌드를 실행해 이미지를 ECR 리포지토리로 추가합니다. 방식은 기존 SpringBoot 프로젝트를 올릴 때와 동일하기 때문에 이전 글을 참고해 주세요 :)

 

참고

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함