Docker Compose 개요
- 공식 문서: https://docs.docker.com/compose/
- Compose 파일 레퍼런스: https://docs.docker.com/reference/compose-file/
- GitHub 저장소: https://github.com/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는 기본적으로 프로젝트 단위로 관리 대상을 지정합니다.
사용 절차
- Dockerfile을 사용하여 애플리케이션 실행 환경을 정의합니다.
docker-compose.yml파일을 생성하여 애플리케이션을 구성하는 각 서비스를 정의하고, 이들이 격리된 환경에서 함께 실행되도록 설정합니다.docker-compose up명령어를 실행하여 전체 애플리케이션을 시작합니다.
설치 방법: 독립형 vs 플러그인
Linux 시스템에서 Docker Compose를 설치하는 방법은 크게 두 가지입니다.
플러그인 설치
- 공식 문서: https://docs.docker.com/compose/install/linux/
- V2 버전의 명령어는
docker compose(중간에 공백)입니다. - 최신 Docker 버전을 설치하면 Compose가 자동으로 플러그인 형태로 포함됩니다.
독립형 설치
- 공식 문서: https://docs.docker.com/compose/install/standalone/
- V1, V2 모두 명령어는
docker-compose(중간에 하이픈)입니다.
두 가지 방식 동시 사용
두 방식을 모두 설치하면 docker-compose와 docker 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