도커 컴포즈란?

💡 여러 개의 컨테이너로 하나의 어플리케이션을 구성할 때 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성

도커 컴포즈 설치

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