docker + typescript + node 셋팅하기

cochae·2022년 11월 15일
0
post-thumbnail

typescript로 작성된 node 파일을 docker로 띄웠다.

Setting up Docker + TypeScript + Node (Hot reloading code changes in a running container) 🦄 🚀

Darian Sampare님이 올려두신 글을 보고 설정하니 docker image 빌드 후 container 띄우는 것까지 잘 됐다.

🤔 다만 피드백 몇 가지 받았는데.

  1. 현재 1개의 컨테이너를 사용하기에 docker-compose 까지는 필요 없다.
  2. docker-compose up 명령어를 실행하면 image를 매번 빌드한다 = image 파일이 무한정으로 쌓였다.
  3. docker build image - docker-compose up 까지 자동으로 실행하는 shell script(쉘 스크립트 파일) 작성하면 편하다.

1번의 경우는 docker-compose 사용이 추후 확장성에 좋기 때문에 이 부분을 변경하지 않고,
2번, 3번을 수정하기로 했다.

👉 기존의 docker-compose.yml 파일에서 build를 하고 이를 실행하게 했는데, build된 image를 실행하도록 했다.

// 원래의 docker-compose.yml
version: "3.7"

services:
  front-demo:
    build:
      context: .
      dockerfile: Dockerfile
      target: base
    volumes:
      - ./src:/home/user/app/src
      - ./nodemon.json:/home/user/app/nodemon.json
    container_name: front-demo
    expose:
      - "4000"
    ports:
      - "4000:4000"
    command: npm run dev
    
// 변경 후 
version: "3.7"

services:
  front-demo:
    image: front-demo:latest //수정된 부분, `image: 이미지명:버전` 작성하면 docker가 알아서 해당 image를 찾아서 실행해준다.
    volumes:
      - ./src:/home/user/app/src
      - ./nodemon.json:/home/user/app/nodemon.json
    container_name: front-demo
    expose:
      - "4000"
    ports:
      - "4000:4000"
    command: npm run dev
    

👉 자동으로 이미지 빌드와 실행까지 하는 shell script 작성하기

// build_n_run.sh
db_image_name="front-demo"
version="latest"

echo "## Automation docker build and run ##"

# new-build/re-build docker image
echo "=> Build new image..."
docker build -t ${db_image_name}:${version} .

# Run container
echo "=> Run container..."
docker-compose up

# remove old image like <none>
echo "=> Delete old image..."
docker rmi -f $(docker images -f "dangling=true" -q)

Dockerfiled이 있는 같은 디렉토리에 build_n_run.sh파일을 생성한다.

그리고 터미널에 ./build_n_run.sh 입력해 파일을 실행하면 된다.

컨테이너가 종료되면 <none>으로 표시되는 image 들을 모두 삭제되도록 했다.


0개의 댓글