본문 바로가기
Cloud/Docker | K8s + CI, CD

[Docker] TypeScript + Node, Dockerfile 작성 및 build

by HelloJudy 2022. 6. 25.

우선 Docker Containerrun 하기 위해서는 Docker Image가 필요하다.
Docker Image를 생성하는 방법은 두 가지가 있다.

  1. container를 대상으로 commit 명령어 실행
  2. 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

반응형

댓글