우선 Docker Container를 run 하기 위해서는 Docker Image가 필요하다.
Docker Image를 생성하는 방법은 두 가지가 있다.
- container를 대상으로 commit 명령어 실행
- Dockerfile을 작성해서 build 명령어 실행
이때 나는 이미 사용하고 있는 container가 없기 때문에 Dockerfile을 이용해서 Image를 build 했다.
1. Image (이미지)
✔️ 도커 이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것이다.
다음과 같은 이미지 파일을 만들기 위해서 Dockerfile을 작성해보자.
2. Dockerfile
- FROM : 어떤 리눅스를 사용할 것인지에 대한 것
- COPY : 파일 복사
- 현재 디렉토리 밑에 /app에 복사 (/app은 컨테이너의 디렉토리)
- WORKERDIR : 컨테이너에서 명령어가 실행되는 디렉토리
- RUN : 컨테이너를 구성할 파일을 만들 때 사용
- CMD : 컨테이너가 실행된 후에 실행할 명령어
브라우저는 Typescript를 실행할 수 없다. 따라서 개발 환경에서는 ts-node로 실행을 해주었고
배포할 때는 Javascript 파일로 컴파일해주어야 한다.
- package.json
"scripts": {
// js 파일로 컴파일
"build": "tsc",
// 컴파일한 서버 시작
"js-start": "node ./index.js",
// 개발 환경에서 서버 시작
"start": "nodemon --exec ts-node index.ts",
}
내 프로젝트의 배포 관련 스크립트는 다음과 같이 쓰여 있다.
- tsconfig.json
{
"compilerOptions": {
"target": "es2020",
"module": "commonjs",
"rootDir": "./",
"outDir": "./dist",
"moduleResolution": "node",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"strictNullChecks": false,
"typeRoots": ["./src/customType", "./node_modules/@types"]
},
"include": ["./**/*.ts"],
"exclude": ["node_modules"]
}
인풋 파일이 없는 tsc 명령일 경우, tsconfig.json에 설정된 모든 디렉토리를 체인 하여 컴파일한다.
컴파일과 관련된 설정 파일을 보면 컴파일된 파일은 dist 폴더 아래에 생성된다.
- rootDir: 입력 파일들의 루트 디렉토리 설정.
- outDir: 출력될 디렉토리 설정
- Dockerfile
FROM node:18-alpine3.15
WORKDIR /usr/src/app
COPY package.json ./
COPY yarn.lock ./
RUN yarn install
COPY . .
// 컴파일
RUN yarn build
COPY ./src/swagger.yaml ./dist/src/
COPY ./src/swagger ./dist/src/
COPY .env ./dist/
COPY package.json ./dist/
WORKDIR ./dist
RUN yarn install
EXPOSE 5000
CMD ["yarn", "js-start"]
일반 js파일과 달리 컴파일을 거친다.
이제 파일 시작은 dist 폴더 내에서 진행하기 때문에 서버 시작에 필요한 파일들을 dist 파일로 복사해야한다.
- Docker Images Build
docker build –t node-pill-my-rhythm-app:0.0.1 .
📌 Reference
반응형
'Cloud > Docker | K8s + CI, CD' 카테고리의 다른 글
Cloud Computing (0) | 2022.07.12 |
---|---|
[Docker] Flask로 NLP 모델 서빙하기 (0) | 2022.06.25 |
[CI/CD][#2] Jenkins를 활용한 자동화 파이프라인 구축 (0) | 2022.05.24 |
[CI/CD][#1] EC2(ubuntu)에 Jenkins 설치하기 (0) | 2022.05.23 |
댓글