개발을 진행할때 도커를 이용하다보면 build를 진행하는 시간이 길다는 것을 알수 있습니다. 이때 개발이 완료될때마다 매번 build를 하지 않고 실시간으로 도커 컨테이너안의 코드와 개발IDE의 코드를 동기화 합니다. 필요시 확장 파일들도 동기화 할수 있습니다. 일단 코드를 동기화 하는 법에 대해서 확인해 보겠습니다.
1. 코드를 동기화하기
이번에 사용할 프로그래밍 언어는 TypeScript이며 NestJS를 이용하여 간단한 서버를 구성할 것입니다. 자세한 내용은 아래 공식 사이트를 참고해 주시기 바랍니다.
공식 NestJS 사이트 링크
프로젝트를 생성후 Dockerfile을 만들어서 작성합니다.
# ./Dockerfile
# Base 이미지를 사용합니다.
FROM node:18.18.0
# Docker Container안의 디렉토리를 설정합니다. 설정을 안할시 Root리렉토리로 설정됩니다.
WORKDIR /nestjs
# package.json을 도커 이미지에 복사합니다.
COPY package.json /nestjs
COPY package-lock.json /nestjs
# package데이터를 근거로 npm을 설치한다.
RUN npm install
# 해당 디렉토리에 있는 모든 파일, 폴더를 도커 이미지로 복사합니다.
# .dockerignore에 있는것은 제외
COPY . /nestjs
# 해당 도커 이미지에서 build를 해서 dist폴더를 생성합니다.
RUN npm run build
# 해당 이미지의 포트를 EXPOSE합니다.
# 표시만 할뿐 실제 도커 컨테이너의 포트가 노출되지 않는다.
EXPOSE 3000
# 도커 이미지를 이용하여 컨테이너를 생성시 nodejs 자동 실행(development mode)
CMD ["npm","run","start:dev"]
이제 이 도커파일을 사용할 docker-compose.yaml파일을 만듭니다.
version: '3'
# ./docker-compose.yaml
# services에서는 여러개의 컨테이너를 생성할수 있습니다.
services:
backend:
# 이미지 생성을 위해 해당 디렉토리에 있는 Dockerfile를 build한다.
# docker-compose파일에 같은경로로 Dockerfile이 있을시 '.' 을 찍으면 된다.
# 같은경로가 아닐시 상대경로로 지정해서 실행한다.
build:
context: ./
dockerfile: Dockerfile
ports:
- '4000:3000'
#개발용이기 때문에 코드수정이 있으면 컨테이너에서도 반영
volumes:
# src의 코드를 컨테이너와 실제 IDE와 동기화
- ./src:/nestjs/src
# 도커가 저장할 로그를 지정한다.
logging:
driver: 'json-file'
options:
max-file: '3'
max-size: '10m'
docker-compose로 도커 컨테이너를 실행한다.
$ docker-compose up -d --build
NestJS서버가 로컬(127.0.0.1)에서 정상적으로 동작되는 것을 확인했다. 이제 "Hello World!"를 변경해 보겠다.
// ./src/app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'The Docker has been changed';
// return 'Hello World!';
}
}
위 코드와 같이 'return'값을 수정하고 저장한 다음에 다시 로컬 4000포트를 다시 접속한다.
도커를 build하지 않고도 도커 컨테이너 한의 코드가 반영됬음을 알수 있습니다.
이런 방식으로 개발 환경을 셋팅하고 개발을 진행한다면 차후에 도커로 이미지를 생성하거나 컨테이너를 생성할때 발생하는 에러를 미리 확인할수 있고 대응할수 있습니다.
또한 궂이 프로그래밍 언어 또는 프레임 워크를 로컬에 설치하지 않고도 컨테이너로 개발을 할수 있습니다.
다음글 : docker-compose 도커를 이용하여 개발하기 - 모듈 동기화
gitHubLink : https://github.com/Alex-Choi0/docker_sync_development.git
댓글
댓글 쓰기