Docker Compose
도커 컴포즈는 여러 컨테이너를 모아서 하나의 애플리케이션을 구성할 수 있도록 해준다.
yaml
파일을 사용하여 애플리케이션의 서비스를 구성한다.
이후, 단일 명령으로 yaml
파일에 정의된 모든 서비스를 만들고 시작한다.
여러 컨테이너를 띄우려면 docker run ...
명령을 컨테이너 수 만큼 실행해야 한다.
docker-compose
를 이용하면 하나의 파일에 여러 컨테이너를 실행하도록 미리 작성해두고, docker-compose.yml
파일만 실행하도록 하면 된다.
이렇게하면 여러 컨테이너를 한번에 띄우기 쉬워지고, 실행시 필요한 설정 정보들도 관리하기 편해진다.
컨테이너를 백업하거나 다른 환경으로 옮길 때에도, 기존에 작성한 docker-compose.yml
파일과 컨테이너를 띄울 때 필요한 파일 또는 디렉토리들만 백업하면 얼마든지 기존 환경과 동일한 컨테이너를 띄울 수 있다.
Docker-Compose 설치
먼저, 도커 컴포즈를 설치해야 한다. 다음과 같이 도커 컴포즈를 설치할 수 있다.
# 도커 컴포즈 설치
$ sudo curl -L https://github.com/docker/compose/releases/download/v2.1.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 도커 컴포즈 실행 권한 설정
$ sudo chmod +x /usr/local/bin/docker-compose
# 설치된 도커 컴포즈 버전 확인
$ docker-compose --version
도커 컴포즈 최신 버전 확인
Docker-Compose 작성
docker-compose.yml
파일을 생성하고, 다음과 같이 작성한다.
도커 컴포즈 실행을 위한 파일명은 무조건 docker-compose.yml
으로 작성해야 한다.
(수정)
docker-compose에서 default로 읽을 수 있는 파일 이름은 docker-compose.yml
과 docker-compose.override.yml
이다.
docker-compose -f 명령을 통해 특정 이름의 compose 파일을 사용할 수 있다.
$ docker-compose -f custom-docker-compose.yml up -d
와 같이 명령을 입력하면 custom-docker-compose.yml
파일을 읽어서 docker-compose를 실행한다.
# yaml 파일 포멧 버전
version: '3.8'
# 파일에서 쓸 볼륨을 선언
volumes:
[volume_name]:
external: true # 외부에 있는 [volume_name] 볼륨 사용
name: [volume_name]
# 생성될 컨테이너들의 묶음
services:
# 컨테이너를 여러개 띄우고 싶다면 아래에 추가하면 된다.
# 컨테이너 이름
mysql-container:
# 사용할 이미지
image: mysql
# 사용할 포트
ports:
- 3306:3306
# 사용할 볼륨
volumes:
# 도커 볼륨 사용
- todo_mysql:/var/lib/mysql
# Bind Mount 방식
# - ./db/conf.d:/etc/mysql/conf.d
# - ./db/data:/var/lib/mysql
# - ./my.cnf:/etc/mysql/my.cnf
# 환경 변수 파일. `.env` 파일에 정의된 정보를 가져온다
env_file: .env
# 환경 변수
environment:
- TZ=Asia/Seoul
restart: always
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --character-set-client-handshake=FALSE
.env
파일처럼 환경 변수 파일을 따로 빼내어 지정해줄 수 있다. 민감한 정보들이 들어있을 때 사용하기 좋다.
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=[root_pw]
MYSQL_USER=user
MYSQL_PASSWORD=[user_pw]
Docker-Compose 실행
작성한 docker-compose.yml
파일이 위치한 경로에서 다음 명령을 입력한다.
$ docker-compose up -d
위 명령에서 up
은 빌드 및 실행을 의미한다.
-d
옵션은 컨테이너를 백그라운드에서 실행해주는 옵션이다.
이후 $ docker ps
명령을 통해 확인해보면 지정한 컨테이너가 실행중인 것을 확인할 수 있다.
# 출력되는 내용이 길어서 command, ports는 잘랐다..
$ docker ps
CONTAINER ID IMAGE CREATED STATUS NAMES
ba07fc70be35 mysql 37 minutes ago Up 37 minutes mysql-container
기타 명령어
docker-compose로 띄운 컨테이너 중지 명령
docker-compose stop
docker-compose로 띄운 컨테이너 삭제 명령
docker-compose down