Docker Node.js nodemon

도커를 활용하여 Express를 구동하기 위해 이전 포스팅을 통해 기본적인 앱을 띄워 보았다. 도커를 통해 express를 실행하였지만 코드의 수정이 있을 때 마다 빌드를 다시 해주어야 하는 문제점이 있었다.
node.js에서는 nodemon이라는 모듈을 사용하여 개발환경에서 코드의 변경사항이 감지되었을때 자동으로 코드의 반영사항을 포함하기 위해 서버를 재시동 해주며 개발을 진행한다.

도커를 통해 띄운 express를 로컬에서 작업 후 변경사항을 반영해주기 위해서는 도커의 작업 디렉토리와 로컬 작업 디렉토리를 볼륨 연결 설정을 통해 연결해주고 nodemon으로 express를 구동해주면 된다.

  1. docker-compose.yml
    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
    32
    33
    version: "3.8"

    services:
    mysql:
    image: mysql:5.7
    command:
    --default-authentication-plugin=mysql_native_password
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
    MYSQL_DATABASE: test
    MYSQL_USER: test
    MYSQL_PASSWORD: 1210ss
    MYSQL_ROOT_PASSWORD: 1210ss
    ports:
    - "3306:3306"
    volumes:
    - ./data:/var/lib/mysql
    - ./mysql.conf:/etc/mysql/conf.d

    docker-test:
    build:
    context: .
    args:
    PORT: "4000"
    image: docker-node-app
    container_name: docker-node-app
    volumes:
    - .:/usr/src/app
    - /usr/src/app/node_modules
    ports:
    - "1210:4000"
    docker-compose.yml 파일을 통해 여러 컨테이너를 한번에 관리해주는 방식으로 하나의 서비스를 위해 실행하거나 존재해야하는 이미지들을 한 파일을 통해 정의하는 방식이다.

mysql은 이 후 사용할 예정이므로 넘어가도록 하고 volumes옵션이 중요한 부분이다.

volumes은 다음과 같이 작성해 주면된다. <로컬 작업 디렉토리>:<도커 컨테이너 디렉토리> 이것은 로컬 디렉토리와 도커의 디렉토리를 연결하겠다는 의미로 코드의 변경이나 생성 삭제와 같은 작업의 결과를 공유해준다.

이 후 nodemon을 통해 express 를 실행하고 로컬에서 작업 후 변경사항이 생기게 되면 도커에서 실행중인 express가 재시동 되며 수정 사항을 반영하게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FROM node:12

ARG PORT
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# . 은 현재 디렉토리의 모든것을 /usr/src/app으로 복사한다는 의미다.
COPY . /usr/src/app
RUN npm install

RUN npm install -g nodemon
# Bundle app source

EXPOSE $PORT

# 도커에서 nodemon을 실행하기 위해 필요한 옵션
CMD ["nodemon", "-L", "app.js"]

컨테이너를 다시 빌드 후 접속하고 코드를 수정하면 변경사항이 자동으로 반영되는 모습을 확인 할 수 있다.

Author

han Ju Ryeon

Posted on

2021-12-19

Updated on

2021-12-19

Licensed under

댓글