[Docker] 도커 컨테이너를 이용하여 노드 프로젝트 초기 셋팅하기

나른한 개발자·2022년 4월 10일
0

studylog

목록 보기
40/45

노드 공부 차원에서 이전에 장고로 진행했던 프로젝트를 노드로 바꿔보는 작업을 하고있다. 기존에 해왔던 것처럼 로컬에 개발 환경을 구축하지 않고 도커를 이용해서 초기셋팅을 하기로 했다.

현 프로젝트에서 필요한 컨테이너는 (1) 노드 서버, (2) postgres 서버이다. 두 개의 컨테이너를 사용하므로, docker-compose로 복수의 컨테이너를 실행시키기로 했다.

// Dockerfile

[1] FROM node:17.8.0

[2] WORKDIR /usr/src/app

[3] COPY ["./", "./"]

[4] RUN npm install

[1]: 기반이 되는 이미지이다. 노드 17.8.0 버전을 사용하도록 하고 있다.
[2]: RUN, CMD, ENTRYPOINT, COPY 등의 명령어가 실행될 경로이다.
[3]: package-lock.json, 소스 코드 파일을 포함하여 프로젝트의 모든 파일을 복사한다.
[4]: package-lock.json을 토대로 프로젝트에 필요한 모든 모듈을 설치한다.

// docker-compose.yml

version: "3.8"
services:
  postgresql:
    image: postgres:14.2
    restart: always
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
    ports:
      - '5432:5432'
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_PASSWORD: ${DB_PW}
      POSTGRES_NAME: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      TZ: "Asia/Seoul"
  node:
    depends_on:
      - postgresql
    working_dir: /usr/src/app
    env_file:
      - .env
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - ./:/app
    ports:
      - 80:3000
    command: bash -c "npm start"

노드 컨테이너는 앞서 작성한 Dockerfile을 기반으로 빌드되도록 하고있다. 반면 DB서버를 띄울 컨테이너는 많은 설정이 필요하지 않으므로 별도의 도커파일 없이 docker-compose.yml만으로 빌드되도록 했다.

restart

도커가 중지되었을 때 항상 재시작하도록 한다.

volumes

호스트의 애플리케이션 파일과 컨테이너 내의 파일을 마운트시켜주는 설정이다. 이렇게 하면 로컬이나 컨테이너 내에서 파일 수정 사항이 생겨도 상호 간에 반영된다.

ports

호스트의 5432포트와 컨테이너의 5432 컨테이너를 연결시킨다.

depends_on

서비스 간 종속성 순서대로 컨테이너를 실행시키는 설정으로, 여기에선 postgresql을 먼저 실행시키고 node 컨테이너를 실행시키도록 하고 있다.

command

도커 실행 시 npm start 명령어를 실행시키도록 하고있다.


이후 docker-compose up -d 명령어를 통해 컨테이너를 실행시켜주면 된다. 현 프로젝트에서는 보다 간편한 도커 이용을 위해 vscode의 docker extension을 설치하여 컨테이너를 구동시키고 작업을 진행하고 있다.

기타 도커 관련 명령어는 추후에 따로 정리하도록 하겠다.

profile
Start fast to fail fast

0개의 댓글