티스토리 뷰
상황
express로 개발한 backend 서버를 도커 이미지로 만들어 컨테이너로 생성해야 하는 상황이다.
관련해서 진행한 내용을 정리해본다.
프로젝트 구조
Working Directory
|
dist
src
Dockerfile
package.json
package-lock.json
빌드 및 실행 환경
typescript로 구성하였으므로 build 과정이 필요했다.
javascript 프로젝트 인 경우는 빌드 과정은 생략하면 된다.
환경
express + typescript + esm
packages.json
"scripts": {
...
"build": "npx ts-node build.ts",
"start": "node -r module-alias/register ./dist --env=production",
...
},
위와 같이 packages.json 에 빌드 및 빌드 파일 실행 스크립트를 작성하였다.
위 스크립트는 컨테이너에서 빌드 파일을 실행할 때 사용할 것이다.
- 빌드 파일 생성 경로: /dist
Dockerfile 작성
이제 Docker Image를 만들기위해 Dockerfile을 작성 해보자.
# 1단계: 빌드 단계
FROM node AS build
WORKDIR /app
COPY ./ ./
RUN npm install
RUN npm run build
# 2단계: 실제 이미지 생성
FROM node:20-alpine
# 앱 디렉터리 생성
WORKDIR /usr/src/app
COPY package*.json ./
# 앱 소스 추가
## 1단계에서 생성된 파일을 복사해준다.
COPY --from=build ./app/dist ./dist
# --production: devDependencies 제외
RUN npm install --production
# --production: devDependencies 제외
CMD npm run start
참조
- Multi-stage builds
- 빌드된 파일을 이용하여 컨테이너 구성을 해야 했는데, 이럴 때 유용하게 사용할 수 있는 기능
- 첫 번째 단계 에서는 build를 한다. 최종 단계에서는 빌드된 파일을 대상 경로에 복사해준다.
빌드 과정이 필요없는 경우 Multi-stage builds를 사용하지 않고 바로 생성하면 된다.
주요 실행구문에 대한 설명은 아래와 같다.
- COPY --from=build ./app/dist ./dist
- build 단계에서 생성된 파일을 ./dist 경로로 복사
- Working Directory를 /usr/src/app 로 설정했으므로 /usr/src/app/dist 경로에 복사됨.
- build 단계에서 생성된 파일을 ./dist 경로로 복사
- RUN npm install --production
- production 모드로 dependency 패키지를 설치한다. devDependency를 제외한 패키지가 설치된다.
- CMD npm run start
- package.json 에 작성된 start 스크립트를 실행한다.
도커 이미지 빌드
Dockerfile이 작성된 경로에서 아래의 명령어를 실행해준다.
# -t: 이미지 이름 설정
# .: 현재 경로에 Dockerfile을 사용하여 빌드
docker build -t my-express-image .
이렇게 하면 이미지 까지 생성이 완료 되었다.
그 다음 단계인 DB와 연결하여 컨테이너를 생성하는 것은 다음 포트스에서 다루겠다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 오블완
- Oracle Database 19c install
- 강서 운전면허 시험장
- oracle 19c 설치
- 1종 적성검사 과태료
- epel repo
- 1종 적성검사 신체검사
- Oracle Database 19C 설치
- rest api 단건 다건
- 1종 적성검사 국가건강검진
- rest api crud
- rest api 조회 생성 수정 삭제
- postgresql 수정시간 자동 갱신
- docker multi stage build
- postgresql trigger
- postgresql on update current_timestamp
- mariadb 외래키 조회
- express crud
- epel/x86_64
- 외래키 인덱스 생성 구문 쿼리
- 외래키 생성
- postgresql 트리거
- postgresql 외래키
- unplugin-auto-import
- docker image 경량화
- 1종 적성검사
- dockerignore
- 티스토리챌린지
- 스파르타 코딩클럽
- 외래키 삭제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함