Docker Compose는 여러 개의 Docker 컨테이너를 하나의 설정 파일로 정의하고, 이들 간의 관계를 설정할 수 있게 해줍니다. 특히, 복잡한 애플리케이션을 여러 서비스로 나누어 관리할 때 유용하며, 각 서비스가 필요한 네트워크, 볼륨 등을 설정하고 실행할 수 있습니다.


Basic Structure

Docker Compose 파일은 yaml 형식으로 작성되며, 각 서비스와 그에 관련된 설정을 정의합니다.

version: '3'  # Docker Compose 버전

services:  # 서비스 정의 시작
  service_name:  # 서비스 이름
    image: image_name:tag  # 사용할 이미지
    ports:
      - "external_port:internal_port"  # 외부 포트와 내부 포트 연결
    environment:  # 환경 변수 설정
      - ENV_VAR_NAME=value
    volumes:
      - volume_name:/path/in/container  # 볼륨 연결
    networks:
      - network_name  # 네트워크 설정

이렇게 구성된 Compose 파일에서 각 서비스는 image, ports, volumes와 같은 설정을 가질 수 있으며, 네트워크와 환경 변수도 지정할 수 있습니다.


Creating Services

Docker Compose를 사용하면, 여러 서비스를 쉽게 정의하고 실행할 수 있습니다. 예를 들어, 웹 애플리케이션과 데이터베이스를 연결하는 두 개의 서비스를 설정할 수 있습니다. 각 서비스는 독립적으로 구성되며, docker-compose.yml 파일에 작성된 설정에 따라 자동으로 실행됩니다.

version: '3'

services:
  web:
    image: nginx:latest  # Nginx 웹 서버 사용
    ports:
      - "8080:80"  # 외부 포트 8080과 내부 포트 80 연결
    networks:
      - app-network  # app-network 네트워크에 연결

  db:
    image: postgres:latest  # PostgreSQL 데이터베이스 사용
    environment:
      POSTGRES_USER: example_user
      POSTGRES_PASSWORD: example_password
      POSTGRES_DB: example_db
    volumes:
      - db-data:/var/lib/postgresql/data  # 데이터 저장을 위한 볼륨 설정
    networks:
      - app-network  # app-network 네트워크에 연결

networks:
  app-network:  # 서비스가 연결될 네트워크 정의

volumes:
  db-data:  # 데이터 영속성 보장

위 구성에서는 web 서비스와 db 서비스가 정의되어 있으며, 각각 Nginx 웹 서버와 PostgreSQL 데이터베이스를 사용합니다.


Connecting Services

Docker Compose의 강력한 기능 중 하나는 서비스 간의 연결입니다. Compose는 각 서비스가 기본적으로 동일한 네트워크에 연결되도록 설정해주므로, 별도로 네트워크 설정을 하지 않아도 됩니다. 예를 들어, web 서비스가 db 서비스에 접근하려면 db라는 서비스 이름을 사용하면 됩니다.

위 예시에서 web 서비스는 db 서비스와 같은 네트워크에 연결되어 있어, db 서비스를 db라는 이름으로 참조할 수 있습니다.

postgres://example_user:example_password@db:5432/example_db

여기서 db는 Compose 파일에서 정의한 데이터베이스 서비스 이름입니다. 이와 같이 서비스 이름을 사용하여 쉽게 다른 서비스와 연결할 수 있습니다.


Running Compose

Docker Compose 파일을 작성한 후, 서비스를 실행하려면 docker-compose 명령어를 사용합니다.

up

docker-compose up -d

docker-compose.yml 파일에 정의된 모든 서비스를 백그라운드에서 실행합니다. 로컬에 이미지가 없으면 자동으로 다운로드하거나, 필요한 경우 이미지를 빌드합니다.

down

docker-compose down

실행 중인 모든 서비스를 중지하고 삭제합니다.


References