Docker Compose로 멀티 컨테이너 애플리케이션 관리하기

Docker Compose 개요

Docker Compose는 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 CLI 도구입니다. 하나의 명령어로 여러 컨테이너를 쉽고 효율적으로 관리할 수 있습니다.

Dockerfile은 단일 애플리케이션 컨테이너를 정의하는 데 사용됩니다. 하지만 실제 업무에서는 여러 컨테이너가 협력하여 특정 작업을 수행해야 하는 경우가 많습니다. Compose는 docker-compose.yml이라는 YAML 형식의 템플릿 파일을 통해 관련 컨테이너들을 하나의 프로젝트(project)로 묶어 정의하고, 단일 명령으로 애플리케이션을 생성 및 실행할 수 있게 해줍니다.

Compose는 Python으로 작성되었으며, Docker API를 호출하여 컨테이너를 관리합니다. 따라서 Docker API를 지원하는 모든 플랫폼에서 Compose를 사용할 수 있습니다.

핵심 개념

  • 서비스 (Service): 애플리케이션의 컨테이너를 의미하며, 동일한 이미지를 기반으로 여러 인스턴스를 실행할 수 있습니다.
  • 프로젝트 (Project): 관련된 서비스(컨테이너)들의 집합으로 완전한 비즈니스 단위를 구성합니다. docker-compose.yml 파일에 정의되며, 하위 명령어를 통해 해당 프로젝트의 모든 컨테이너 라이프사이클을 편리하게 관리합니다. Compose는 기본적으로 프로젝트 단위로 관리 대상을 지정합니다.

사용 절차

  1. Dockerfile을 사용하여 애플리케이션 실행 환경을 정의합니다.
  2. docker-compose.yml 파일을 생성하여 애플리케이션을 구성하는 각 서비스를 정의하고, 이들이 격리된 환경에서 함께 실행되도록 설정합니다.
  3. docker-compose up 명령어를 실행하여 전체 애플리케이션을 시작합니다.

설치 방법: 독립형 vs 플러그인

Linux 시스템에서 Docker Compose를 설치하는 방법은 크게 두 가지입니다.

플러그인 설치

  • 공식 문서: https://docs.docker.com/compose/install/linux/
  • V2 버전의 명령어는 docker compose (중간에 공백)입니다.
  • 최신 Docker 버전을 설치하면 Compose가 자동으로 플러그인 형태로 포함됩니다.

독립형 설치

두 가지 방식 동시 사용

두 방식을 모두 설치하면 docker-composedocker compose를 모두 사용할 수 있습니다.

Linux에 독립형 docker-compose V1 설치

# Docker Compose 바이너리 다운로드
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 실행 권한 부여
$ sudo chmod +x /usr/local/bin/docker-compose

# 버전 확인으로 설치 성공 여부 확인
$ docker-compose --version

Linux에 독립형 Docker Compose V2 설치

# 바이너리 다운로드 (예: v2.29.2)
[root@node200 ~]# curl -SL https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

# 실행 권한 부여
[root@node200 ~]# chmod +x /usr/local/bin/docker-compose

# 심볼릭 링크 생성 (선택 사항)
[root@node200 ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 파일 확인
[root@node200 ~]# ll /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 63173250 Sep  6 13:59 /usr/local/bin/docker-compose

# 버전 확인
[root@node200 ~]# docker-compose -v
Docker Compose version v2.29.2

명령어 개요

[root@anliven ~]# docker-compose --version
docker-compose version 1.26.0, build d4451659

[root@anliven ~]# docker-compose --help
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
  -c, --context NAME          Specify a context name
  --verbose                   Show more output
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to
  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against
                              the name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert keys
                              in v3 files to their non-Swarm equivalent
  --env-file PATH             Specify an alternate environment file

Commands:
  build              Build or rebuild services
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

참고 자료

태그: docker Docker Compose 컨테이너 오케스트레이션 멀티 컨테이너 클라우드 네이티브

6월 24일 18:39에 게시됨