수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다
개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!
교재 <시작하세요! 도커/쿠버네티스 - 용찬호 지음>를 토대로 실습을 진행하였습니다.
* 도커 컴포즈
도커 컴포즈는 컨테이너를 이용한 서비스의 개발과 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 파일로 서로 이름이 다른 여러 개의 프로젝트를 생성하고 제어할 수 있습니다.
지금까지 도커 컴포즈에 대해 알아보았습니다.
다음 포스팅은 쿠버네티스에 대해 알아보도록 하겠습니다~!
'서버 > Docker&Kubernetes' 카테고리의 다른 글
AWS에서 kubeadm으로 Kubernetes 시작하기 (0) | 2021.05.04 |
---|---|
kops로 AWS에서 Kubernetes 설치 (0) | 2021.04.28 |
Docker Swarm (0) | 2021.04.20 |
Dockerfile 작성 및 빌드 (0) | 2021.04.16 |
Docker 이미지 추출 및 저장소 생성(2/2) (0) | 2021.04.15 |
댓글