본문 바로가기

Tech/[Container] Docker

Docker-Compose를 활용한 NestJS Dockerized (Mac M1)

요약

Mac M1 환경에서 Docker Compose 를 이용하여 NestJS 개발 환경을 도커 컨테이너로 실행합니다.

 

docker-compose.yaml 파일 생성

version 는 docker compose의 버전을 의미합니다.

services 는 해당 docker compose 사용될 docker service를 정의하는 영역을 의미합니다.

api 는 docker service의 이름을 정의합니다.

build 해당 서비스를 Container로 빌드할 때 필요한 옵션들을 정의합니다.

dockerfile 해당 서비스를 빌드할 때 Dockerfile를 참고합니다.
이때, 해당 Dockerfile에 대한 경로를 정의합니다.

context 는 docker build 명령을 실행할 경로를 뜻합니다.

ports호스트포트번호:컨테이너포트번호를 매핑할 때 사용됩니다.

volumes 는 로컬 디렉터리에 경로와 도커 컨테이너의 경로를 동기화할 때 사용됩니다.

command 는 도커 컨테이너가 실행될 때 입력되는 명령어를 의미합니다.

version: '3.8'
services:
  api:
    build:
        dockerfile: ./Dockerfile
        context: .
    ports:
        - "3000:3000"
    volumes:
        - ./:/app/
    command: ["sh", "-c", "sleep 20 && npm run start:dev"]

 

Dockerfile 파일 생성

FROM 해당 도커 이미지를 기준으로 도커 컨테이너를 생성합니다.

WORKDIR 도커 컨테이너의 작업 디렉토리를 지정합니다. 로컬 파일들을 도커 컨테이너로 복사할 때 위치입니다.

COPY 현재 로컬 컴퓨터 안에 있는 파일들을 도커 컨테이너 안으로 복사하는 기능을 말합니다.

RUN 도커 이미지 위에 패키지를 설치하거나 빌드할 때 사용합니다.

CMD docker 컨테이너가 실행(run)될 때 사용할 명령어를 작성합니다.

FROM node:14.17.4-alpine

WORKDIR /app

COPY package.json ./

RUN npm i

COPY . .

RUN npm run build

CMD [ "npm", "run", "start:dev" ]

 

Docker Container 간 네트워크를 고려하여 환경 변수 수정

해당 내용은 각 개발 환경마다 상이하기 때문에 별도로 정리하지는 않았습니다.

다만, 간혹 간과할 수 있는 부분이기 때문에 언급합니다.

 

Docker Compose build

해당 명령어를 한 번 실행한 이후부터는 도커 이미지가 빌드되어 도커 이미지 캐시 스토리지에 저장됩니다.

따라서, build 옵션을 제거하고 백그라운드로 돌리는 -d 옵션을 사용하면 편리합니다.

docker-compose up --build

 

Reference

https://jojoldu.tistory.com/587