티스토리 뷰
상황
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
									
							
								
								- 스파르타 코딩클럽
- vue 이벤트 해제
- nuxt3 quasar 설정
- docker multi stage build
- unmounted setinterval
- nuxt3 eslint prettier 설정
- vue watch 대체
- unplugin-auto-import
- Oracle Database 19c install
- vue 리팩토링
- docker mssql
- vue 타이머 해제
- nuxt3 structure
- unmounted document.addlistener
- 티스토리챌린지
- vue watch 위험성
- docker image 경량화
- unmounted composable
- docker mssql 이미지 생성
- 오블완
- dockerignore
- nuxt3 프로젝트 설정
- 외래키 삭제
- vue unmounted
- oracle 19c 설치
- docker mssql create database
- Oracle Database 19C 설치
- vue onunmounted
- vue watch 문제점
- 스마트피싱보호_캠페인
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
									글 보관함
									
							
					