여러개의 컨테이너, 즉 여러개로 구성된 어플리케이션을 구축하기 위해 컨테이너를 여러번 실행 그리고 설정이 필요하다.

또한 여러개 컨테이너가 재대로 작동하는지 테스트 단계에서 매우 복잡하다.

Docker Compose 는 여러개의 컨테이너를 하나의 서비스로 정의하여 컨테이너 묶음으로 설치 및 설정, 관리 할 수 있으며,

컨테이너를 이용한 서비서의 개발과 배포빌드를 위한 여러개의 컨테이너를 하나의 프로젝트로 다루는 작업 환경을 제공한다.

YAML파일을 이용, 여러 컨테이너들의 옵션과 설정 및 정의한 파일을 순차적으로 실행하는 방식이다.

컨테이너의 의존성, 네트워크, 볼륨 등을 복합적으로 정의 할 수 있으며,

설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절, 컨테이너의 서비스 디스커버리도 자동으로 구성한다.

Docker Compose 설치

Docker Compose는 CURL을 통해서 설치할 수 있으며 가급적 Compose 설치는 공식 사이트를 참조한다.

Docker compose 릴리즈 업데이트는 공식 사이트를 참조한다.


curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 8079k  100 8079k    0     0   256k      0  0:00:31  0:00:31 --:--:--  307k

Docker Compose 권한설정

# chmod +x /usr/local/bin/docker-compose
# chown <username> /usr/local/bin/docker-compose

Docker Compose 설치확인

# docker-compose --version
docker-compose version 1.21.0, build 1719ceb

Docker Compose 업그레이드

Compose를 업그레이드 한 후 기존 컨테이너를 제거하거나 마이그레이션을 한다.

docker-compose migrate-to-labels
docker container rm -f -v myapp_web_1 myapp_db_1 ...

Docker Compose 삭제

rm /usr/local/bin/docker-compose
pip uninstall docker-compose


Docker Compose 기본사용법

컨테이너의 환경설정등이 정의된 yaml 파일을 로드하여 도커 엔진을 통해 컨테이너를 생성한다.

즉, compose는 가장 먼저 yaml  파일이 작성 및 정의 되어야 한다.

다음은 해당 디렉토리 안에 docker-compose.yml 파일을 생성하였다.

# tree compose/
compose/
└── docker-compose.yml


그리고 docker-compose.yml 안에 아래와 같은 내용을 작성하였다.

해당 내용은 볼륨마운트 옵션을 추가하여 워드프레스와 데이터베이스를 생성하는 컴포즈 파일이다.

version: '2' //빌드할 버전
	services:
	db:
		image: mysql:5.7
	volumes:
		- ./mysql:/var/lib/mysql
	restart: always
	environment: //환경변수 설정
		MYSQL_ROOT_PASSWORD: wordpress
		MYSQL_DATABASE: wordpress
		MYSQL_USER: wordpress
		MYSQL_PASSWORD: wordpress
	wordpress:
	image: wordpress:latest
	volumes: //컨테이너볼륨 설정
		- ./wp:/var/www/html
	ports: //컨테이너 포트 매핑
		- "8000:80"
	restart: always
	environment:
		WORDPRESS_DB_HOST: db:3306
		WORDPRESS_DB_PASSWORD: wordpress


이제 다음의 명령어를 통하여 compose를 실행 시킨다.

# docker-compose up
...
Status: Downloaded newer image for wordpress:latest
Creating wordpress_db_1 ... done
Creating wordpress_wordpress_1 ... done

docker-compose  명령어의 서비스 끝에 이름을 별도로 입력하여 특정 서비스의 컨테이너만 별도로 생성 및 실행 할 수 있다.

또한 interactive 쎌 명령어를 사용할 수 도 있다.

  • docker-compose run web /bin/bash


서비스 컨테이너 수를 늘리거나 줄여서 같은 컨테이너 수를 일정하게 클러스터링 할 수 있다.

# docker-compose ps
        Name                       Command               State          Ports        
-------------------------------------------------------------------------------------
wordpress_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp            
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp

Docker Compose 컨테이너 삭제

# docker-compose down

생성된 컨테이너는 docker-compose down 명령어로 삭제할 수 있음.

역시 위의 명령어는 모든 컨테이너, 즉 하나의 프로젝트를 전체 삭제하는 기능임.


compose는 기본적으로 현재 디렉토리의 이름으로 생성된 컨테이너를 관리함.

/home/wordpress 디렉토리에 docker-compose 파일이 있으며, docker-compose down 명령어 실행, 즉 프로젝트 및 컨테이너를 삭제하고자 한다면,

wordpress 이름을 가진 프로젝트는 전부 삭제함.

docker-compose -p  옵션을 적용할 경우 프로젝트의 이름을 사용해 특정한 프로젝트의 이름을 명시하여 삭제할 수 있음.

즉, -p 옵션을 사용하면 하나의 docker-compose 파일로 서로 이름이 다른 여러개의 프로젝트를 생성하고 관리 할 수 있다.


Docker Compose 워크플로

UP

컴포즈 파일에 정의된 모든 컨테이너 실행. 그 로그 결과를 취합.

Build

도커파일에 의해 만들어진 이미지를 리빌드.

up 명령어는 이미지가 존재하지 않는 경우 이를 빌드하지 않기 때문에 이미지를 업데이트해야 하는 경우 이 명령어를 사용.

ps

컴포즈에 의해 관리되는 컨테이너들의 상태 표시.

run 

one-off 명령으로 컨테이너 실행.

logs

컴포즈가 관리하는 컨테이너들에 대한 로그 취합.

stop

컨테이너 중지 (삭제는 안함)

rm 

중지된 컨테이너 삭제.

-v 볼륨옵션을 사용하여 도커에서 관리하는 볼륨들을 삭제하는것이 필수.






  • No labels