본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

Docker Compose

by 정민규 2021. 4. 22.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

교재 <시작하세요! 도커/쿠버네티스 - 용찬호 지음>를 토대로 실습을 진행하였습니다.

 

 

 

 

 

* 도커 컴포즈

 

도커 컴포즈는 컨테이너를 이용한 서비스의 개발과 CI를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공합니다.

도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작합니다. 소규모 컨테이너 개발 환경에서는 도커 엔진의 run 명령어로 컨테이너를 생성하는 것이 더 편리할 수도 있지만, 컨테이너의 수가 많아지고 정의해야 할 옵션이 많아진다면 도커 컴포즈를 사용하는 것이 좋습니다. 

 

 

 

 

 

 

* 도커 컴포즈 설치

#curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

 

 

 

* 실행 권한 부여

chmod +x /usr/local/bin/docker-compose

 

 

 

* 설치 확인

#docker-compose -v

 

 

 

 

 

 

 

 

* 도커 컴포즈 기본 사용법

 

도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너를 생성합니다. 따라서 도커 컴포즈를 사용하려면 가장 먼저 YAML  파일을 작성해야 합니다.

 

 

다음의 run 명령어를 docker-compose.yml 파일로 변환해 컨테이너를 생성하고 실행해 봅니다.

#docker run -d --name mysql \
alicek106/composetest:mysql \
mysqld

#docker run -d -p 80:80 \
--link mysql:db --name web \
alicek106/composetest:web \
apachectl -DFOREGROUND

 

 

 

docker-compose.yml

version: '3.0'
services:
        web:
                image: alicek106/composetest:web
                ports:
                        - "80:80"
                links:
                        - mysql:db
                command: apachectl -DFOREGROUND
        mysql:
                image: alicek106/composetest:mysql
                command: mysqld

 

 

version : YAML 파일 포맷의 버전을 나타냅니다. 버전은 1, 2, 2.1, 3.0 등이 있습니다. 도커 컴포즈 버전은 도커 엔진 버전에 의존성이 있으므로 가능하다면 최신 버전을 사용하는 것이 좋습니다.

 

services : 생성될 컨테이너들을 묶어놓은 단위입니다. 서비스 항목 아래에는 각 컨테이너에 적용될 생성 옵션을 지정합니다.

 

image : 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정합니다. 이미지가 도커에 존재하지 않으면 저장소에서 자동으로 내려받습니다.

 

links : docker run 명령어의 --link와 같으며, 다른 서비스에 서비스명만으로 접글할 수 있도록 설정합니다.

 

command : 컨테이너가 실행될 때 수행할 명령어를 설정하며, docker run 명령어의 마지막에 붙는 커맨드와 같습니다.

 

web, msql : 생성될 서비스의 이름입니다. docker run에서 사용하는 옵션과 동일하게 image, ports, links, command 등을 정의할 수 있습니다.

 

 

 

 

 

 

* 도커 컴포즈의 프로젝트, 서비스, 컨테이너

 

 

도커 컴포즈는 컨테이너를 프로젝트 및 서비스 단위로 구분하므로 컨테이너의 이름에 형식이 존재합니다.

 

제가 생성한 프로젝트의 이름은 bin이고, 각 서비스의 이름은 mysql, web입니다.

위에서 docker-compose up -d를 실행했을 때 프로젝트의 이름을 별도로 입력하지 않았지만,

도커 컴포즈는 기본적으로 docker-compose.yml 파일이 위치한 디렉토리의 이름을 프로젝트 이름으로 사용합니다.

 

 

 

 

* 도커 컴포즈의 구성 단위

 

                                     프로젝트              서비스               컨테이너 

docker-compose.yml  ----->   bin       ----->     web     ----->      web_1

                                                               mysql   ----->      mysql_1

 

 

 

위와 같이 하나의 프로젝트는 여러 개의 서비스로 구성되고, 각 서비스는 여러 개의 컨테이너로 구성됩니다. 스웜 모드에서의 서비스와 마찬가지로, 하나의 서비스에는 여러 개으 컨테이너가 존재할 수 있으므로 차례대로 증가하는 컨테이너의 번호를 붙여 서비스 내의 컨테이너를 구분합니다.

 

docker-compose scale 명령어로 bin_mysql_2, bin_mysql_3 을 생성할 수 있습니다.

ex) #docker-compose scale mysql=2

 

 

 

 

 

 

 

 

* 프로젝트 삭제

 

#docker-compose down
// 프로젝트를 삭제하면 서비스의 컨테이너 또한 전부 정지된 뒤 삭제됩니다.

 

 

 

 

 

 

 

 

 

도커 컴포즈는 기본적으로 현재 디렉터리의 이름으로 된 프로젝트를 제어합니다.

그러나 -p 옵션에 프로젝트의 이름을 사용해 제어할 프로젝트의 이름을 명시할 수 있습니다.

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

도커 컴포즈 myproject 생성

 

 

도커 컴포즈 myproject 삭제

 

 

 

 

 

 

 

지금까지 도커 컴포즈에 대해 알아보았습니다.

다음 포스팅은 쿠버네티스에 대해 알아보도록 하겠습니다~!

 

반응형

댓글