Skip to content

[재하] 1203(일) 개발기록

박재하 edited this page Dec 3, 2023 · 1 revision

목표

  • 멀티 스테이징을 활용한 docker 이미지 최적화
    • docker 이미지 최적화 (yarn berry, 모노레포 고려)
    • 배포 테스트

멀티 스테이징을 활용한 docker 이미지 최적화

docker 이미지 최적화 (yarn berry, 모노레포 고려)

사전학습에서 배운 docker 이미지 최적화 전략을 활용, builder, runner로 스테이지를 구분 후 필요한 데이터(dist, 의존성)만 builder에서 runner로 옮긴 후 이미지를 만들고 실행하도록 구성해보았다.

FROM node:20-alpine AS builder

WORKDIR /app

ADD . /app

RUN SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm_config_arch=x64 npm_config_platform=linux yarn workspace server add sharp@0.32.6
RUN yarn workspace server build

FROM node:20-alpine AS runner

WORKDIR /app

COPY --from=builder /app/packages/server/dist /app/packages/server/dist
COPY --from=builder /app/packages/server/package.json /app/packages/server/package.json
COPY --from=builder /app/.yarn /app/.yarn
COPY --from=builder /app/.pnp.cjs /app/.pnp.cjs
COPY --from=builder /app/.yarnrc.yml /app/.yarnrc.yml
COPY --from=builder /app/yarn.lock /app/yarn.lock
COPY --from=builder /app/package.json /app/package.json

EXPOSE 3000

ENTRYPOINT ["yarn", "workspace", "server", "start:prod"]

추가로 고려해줘야 했던 사항은 모노레포에 yarn berry를 사용하기 때문에, 정상적으로 실행되게 하기 위해 node_modules 대신 .yarn 폴더를, 그리고 packges/server 폴더 구조를 그대로 유지한 채로 옮겨줘야 한다는 것 등이였다.

docker build -t qkrwogk/web16-b1g1-be:week5-test1 -f ./Dockerfile-was . --platform linux/amd64
스크린샷 2023-12-04 오전 1 14 20

에러 없이 빌드되며, build, push 속도도 훠어어어~~~~~얼씬 더 빨랐다 ㅋ 진즉 해야했다..

docker push qkrwogk/web16-b1g1-be:week5-test1
스크린샷 2023-12-04 오전 1 17 09 스크린샷 2023-12-04 오전 1 16 49

사진에서도 확인할 수 있지만 용량이 두 배 가까이 차이난다.

배포 테스트

배포 환경에서 예정대로 잘 실행되는지 테스트해보자.

실행중인 컨테이너를 확인해보니 페어 분이 GitHub Actions를 거치지않고 핫픽스한 컨테이너를 직접 배포해 놓으신 것 같아서, 문제 생길 수 있으니 그냥 컨테이너 하나 더 띄워서 3001번 포트로 열고 정상 실행되는지만 확인해보기로 했다.

docker pull qkrwogk/web16-b1g1-be:week5-test1
스크린샷 2023-12-04 오전 1 24 06

pull도 아주그냥 훨씬 빠름 ㅋ

docker run -d -p 3001:3000 --env-file ./.env2 qkrwogk/web16-b1g1-be:week5-test1
스크린샷 2023-12-04 오전 1 24 15

에러 없이 잘 올라가는 것 확인했고

스크린샷 2023-12-04 오전 1 32 27

ACG에서 3001번 임시 허용

스크린샷 2023-12-04 오전 1 25 28 스크린샷 2023-12-04 오전 1 26 04

아주 잘 실행된다. 성공성공!!

학습 메모

  1. Kubernetes 기초(minikube), docker image 최적화(멀티스테이징), AWS IAM & EC2
  2. NestJS 프로젝트 docker 배포 + 이미지 크기 줄이기

소개

규칙

학습 기록

[공통] 개발 기록

[재하] 개발 기록

[준섭] 개발 기록

회의록

스크럼 기록

팀 회고

개인 회고

멘토링 일지

Clone this wiki locally