SECTION4 도커 컴포즈
도커 컴포즈란?
💡 여러 개의 컨테이너로 하나의 어플리케이션을 구성할 때 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성
도커 컴포즈 설치
curl -L <https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname> -s `-
`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
도커 컴포즈 1.11.0 버젼
컨테이너 생성
docker-compose up -d
현 디렉터리 내 docker-compose.yml 파일을 가지고 컨테이너 생성
YAML 파일은 들여쓰기로 구분을 하는데 TAB을 인식 못하므로 SPACE BAR를 두 번 써야 한다!
컨테이너 수 조정
docker-compose scale {SERVICE_NAME}=2
YAML 파일 작성법
YAML 파일의 항목
- 버전 정의
- 서비스 정의
- 볼륨 정의
- 네트워크 정의
💡 각 항목의 하위 항목을 정의하려면 두 번의 SPACEBAR로 들여쓰기를 해야 한다.
버전 정의
YAML 파일 포맷 버전을 명시해준다.(도커 컴포즈 버전 1.10 버전에서는 3버전 포맷을 사용 가능)
version: '3.0'
서비스 정의
서비스는 도커에서 컨테이너를 생성할 옵션을 정의
services:
my_container_1:
image: //이미지 정의
ports:
- "8080"
links: //다른 서비스에 서비스명만으로 접근할 수 있도록 설정 {service:alias}로 별칭 설정 가능
-db
-db:database
environment: //doker run 명령어의 -e -env 옵션 동일, 컨테이너 내 환경변수를 딕셔너리나 배열 형태로 지정
- MYSQL_ROOT_PASSWORD=mypassword
- MYSQL_DATABASE_NAME=mydb
또는
environment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE_NAME:mydb
command: //docker run 명령어 마지막에 붙는 커맨드와 동일, 배열 형태로도 가능
command: apachectl -DFOREGROUND
command: [apachectl, -DFOREGROUND]
depends_on //이 항목에 명시된 컨테이너가 먼저 생성
-mysql
my_container_2:
build: //build 항목에 정의된 도커파일을 build하게
볼륨 정의
volumes:
driver: flocker
driver_opts:
opt:"1"
opt2: 2
//기존 볼륨을 사용할 시
volumes:
-myvolume:/var/www/html //myvolume 이라는 외부볼륨을 web 서비스의 컨테이너에 마운트
volumes:
myvolume:
external:true
네트워크 정의
version:'3.0'
services:
networks:
ipam:
mynetwork:
driver: overlay //driver 정의
driver_opts:
subnet: "255.255.255.0"
IPAddress: "10.0.0.2"
//기존 네트워크를 사용할 시
networks:
-alice106_network
networks:
alice106_network:
external:true
yaml 파일 검증
yaml 파일 작성 후 오타나 포맷이 적절한 지 검사를 하는 용도이다.
docker_compose config
도커 컴포즈 네트워크
YAML파일에 정의하지 않으면 도커 컴포즈는 프로젝트 별로 브릿지 타입의 네트워크를 제공한다.
스택 네트워크
도커 생태계
OCI란?
- containerd
- runc