Featured image of post Docker 컨테이너로 구축하는 로컬 개발 환경 입문Featured image of post Docker 컨테이너로 구축하는 로컬 개발 환경 입문

Docker 컨테이너로 구축하는 로컬 개발 환경 입문

새로운 프로그래밍 언어와 프레임 워크를 시도 할 때마다 호스트 OS에 직접 런타임 (Node.js, Python, Ruby 등)이나 데이터베이스 (PostgreSQL, MySQL)를 설치하지 않습니까? 버젼 경합이나 언인스톨시의 쓰레기 파일에 고민하는 「OS 환경 오염」은, Docker 컨테이너를 활용하면 완전히 과거의 것이 됩니다. 실용적인 로컬 개발 환경의 구축 순서를 핸즈온 형식으로 정리합니다.

왜 호스트 OS에 직접 들어가지 않는가?

안건 A에서는 Python 3.10, 안건 B에서는 Python 3.12가 필요……라고 하는 버전의 충돌은 일상차반사입니다. Docker를 사용하면 애플리케이션 실행 환경과 미들웨어를 별도의 일회용 컨테이너로 격리할 수 있습니다. PC를 신조했을 때도 리포지토리를 클론하고 명령을 1발 두드리는 것만으로 엄청나게 다른 개발 환경이 즉시 재현됩니다.

실천 : 웹 앱 + DB의 최소 구성 compose.yaml

다음은, Node.js 환경과 PostgreSQL 데이타베이스를 연계시키는 표준적인 compose.yaml 의 기술예입니다.

services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - DATABASE_URL=postgres://devuser:devpass@db:5432/devdb
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: devpass
      POSTGRES_DB: devdb
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  db-data:

개발을 원활하게 진행하기 위한 2대 Tips

  1. 핫 리로드 및 볼륨 마운트: 호스트측 소스 코드 변경을 즉시 반영하기 위해 현재 디렉토리를 컨테이너 내에 바인드 마운트(.:/app)합니다. 다만, 컨테이너내의 node_modules나 가상 환경이 호스트측의 하늘 폴더로 덧쓰기되지 않게, 익명 볼륨으로 보호하는 것이 포인트입니다.
  2. VS Code Dev Containers의 활용: 에디터의 확장 기능 「Dev Containers」를 조합하면, VS Code 자체를 컨테이너내에서 기동해, 컨테이너측의 보완 엔진이나 린터를 호스트와 변함없는 조작감으로 원활하게 이용할 수 있습니다.

깨끗하고 재현성이 높은 개발 기반을 얻고 코드를 작성하는 것에만 집중합시다.