도커 컴포즈는 공통성을 갖는 컨테이너 애플리케이션 스택을 YAML 코드로 정의하는 정의서이며 그것을 실행하기 위한 다중 컨테이너 실행 도구다.
Ubuntu 리눅스 기반으로 도커 컴포즈 설치
# 깃허브에 저장된 현재 호스트 운영체제에 맞는 최신 버전 도커 컴포즈 파일 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 실행 권한 설정 및 절대 경로 문제로 발생하는 오류 대비를 위한 심벌릭 링크 설정
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# kevin 사용자 계정에 소유권 지정
$ sudo chown kevin /usr/bin/docker-compose
# 버전 변경을 위한 재설치 및 삭제 시 원본과 링크 파일 삭제
$ sudo rm /usr/local/bin/docker-compose
$ sudo rm /usr/bin/docker-compose
docker-compose.yaml
(또는 .yml
) 파일로 작성한다.
version: "3.8"
services:
서비스명1:
# 애플리케이션 설정값 정의1
서비스명2:
# 애플리케이션 설정값 정의2
...
networks:
# 네트워크 설정, 미지정 시 자동 생성
volumes:
# 볼륨 생성
version: ‘3.8’
ERROR: version in “./docker-compose.yml” is unsupported
version: '3.8'
services:
myweb:
image: nginx:latest
mydb:
image: mariadb:10.4.6
이미지명:태그
를 명시할 수 있다.build
옵션을 사용하면 도커 컴포즈 실행과 함께 이미지가 빌드된다. version: '3.8'
services:
web:
# build 옵션에서 이미지 빌드에 필요한 Dockerfile 경로를 지정
# docker-compose.yml과 동일 경로라면 '.'을 이용
build: .
services:
web:
build:
context: .
dockerfile: ./compose/pyfla/Dockerfile-py
services
하위 옵션으로 build
와 함께 해당 서비스에 필요한 옵션을 명시할 수 있다.
container_name
: 컨테이너 이름, 생략 시 자동 부여ports
: 서비스 내부 포트와 외부 호스트 포트 지정하여 바인드, docker run -p
옵션과 동일expose
: 호스트 OS와 직접 연결하는 포트를 구성하지 않고 서비스 포트를 노출.networks
: 최상위 레벨의 networks에 정의된 네트워크 이름을 작성volumes
: 서비스 내부 디렉터리와 호스트 디렉터리를 연결하여 데이터 지속성 설정environment
: 서비스 내부 환경 변수 설정
.env
파일로 만들어 env_file
옵션에 파일명을 지정command
: 서비스 구동 이후 실행할 명령어 작성restart
: 서비스 재시작 옵션 지정depends_on
: 서비스 간 종속성을 의미하며 서비스 시작 순서 지정networks
지정 시 대역은 172.x.x.x
로 자동 할당
externel
옵션에 네트워크 이름을 작성한다.version: '3.8'
services:
mydb:
image: mysql:5.7
container_name: mysql_app
volumes:
- db_data:/var/lib/mysql
myweb:
depends_on:
- mydb
image: wordpress:latest
container_name: wordpress_app
volumes:
- web_data:/var/www/html
...
volumes:
db_data: {}
web_data: {}
# {} 생략 가능, 도커가 관리하는 볼륨 생성을 의미
| 요구사항 | 도커 명령 | 도커 컴포즈 옵션 | | — | — | — | | 컨테이너명 | —name | container_name; | | 포트 연결 | -p | ports: | | 네트워크 구성 | —net | networks: | | 재시작 | —restart | restart: | | 볼륨 | -v(—volume) | volumnes: | | 환경 변수 | -e | environment: | | 컨테이너 간 연결 | —link 컨테이너명:서비스명 | depends_on | | 이미지 | 이미지명 | image; |
도커 컴포즈는 개발 및 테스트 단계에 적합한 오케스트레이션 도구이다. 실제 운영에서는 관리적 요소가 많이 필요하기에 고급 오케스트레이션 기능을 사용하려면 쿠버네티스나 도커 스웜을 이용해야 한다.