티스토리 뷰
이전에 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 프로젝트를 올릴 때와 동일하기 때문에 이전 글을 참고해 주세요 :)
참고
'AWS' 카테고리의 다른 글
[AWS CodePipeline] ECR 이미지 수정 시 자동으로 ECS로 배포 (0) | 2021.12.16 |
---|---|
[AWS ECS] ECR 이미지를 ECS로 실행 (컨테이너 실행 및 관리) (0) | 2021.12.16 |
[AWS ECR] SpringBoot project 도커 이미지로 올리기 (0) | 2021.12.15 |
[AWS Logs] ALB 로그 S3에 저장하기 (0) | 2021.12.06 |
[AWS RDS] DataGrip에서 Private Subnet RDS 연결 (1) | 2021.11.19 |
- Total
- Today
- Yesterday
- 에라토스테네스의 체
- ionic
- DFS
- array
- Algorithm
- permutation
- sort
- 프로그래머스
- 조합
- string
- java
- spring
- Combination
- 수학
- SWIFT
- AWS
- EC2
- CodePipeline
- search
- CodeDeploy
- ECR
- Baekjoon
- programmers
- CodeCommit
- 소수
- Dynamic Programming
- cloudfront
- map
- BFS
- 순열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |