Docker & kubernetes

05. Docker compose

최슬슬 2024. 2. 12. 00:45

Docker compose

  • 여러 개의 컨테니어 옵션과 환경을 정의한 파일(YAML)을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작하는 시스템
  • docker compose를 쓰기 위해서는 반드시 컨테니어 설정이 정의된 YAML 파일을 작성해야함
  • 리눅스 같은 경우 따로 docker compose 설치를 해야함
  • 파일을 github에서 다운받고, 받은 파일을 "/usr/local/bin/"에 "docker-compose"라는 이름으로 저장
  • chmod +x /usr/local/bin/docker-compose 이후, docker-composer -v로 설치 잘 되었는지 확인 가능
  • 일반적으로 docker compose는 현재 디럭터리의 이름으로 된 프로젝트를 제어
  • "-p" 옵션으로 제어할 프로젝트를 지정할 수 있음
  • docer-compose -p {프로젝트 이름}

YAML 파일

  • 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의로 구성됨
  • 가장 많이 사용하는 것은 서비스 정의
  • 볼륨과 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로 사용 가능
  • 일반적으로 현재 디렉터리 혹은 상위 디렉터리에 있는 "docker-compose.yml" 파일을 찾아 컨테이너를 실행하지만, 파일위치를 직접 입력해줄 수 있음
  • docker-compose -f {파일 경로}

버전 정의

  • 일반적으로 yml 파일 가장 위에 들어감
  • 최신 버전을 사용하는 것을 권장

서비스 정의

  • docker compose로 생성할 컨테이너 옵션을 정의
  • 각 서비스는 컨테이너로 구현되고 하나의 프로젝트로서 도커 컴포즈에 의해 관리됨
  • 서비스 이름들은 service의 하위 항목으로 정의되고 컨테이너 옵션은 서비스 이름의 하위 항목에 정의됨
    • 하위 항목: image, links, enviroment, command, 네트워크 정의, 볼륨 정의 등

docker-compose config

  • yml파일의 검사하여 오타나 파일 포맷이 적절한지 확인해줌
  • "-f" 옵션으로 yml 파일 경로 지정 가능
    • 만약 네트워크 정의를 하지 않는다면?
      • 도커 컴포즈는 프로젝트 별로 브리지 타입의 네트워크를 생성하여 사용함
    • 예시 yml 파일
version: '3.0'
	services:
    	web:
        	image: test
            ports:
            	-"80:80"
     	mysql:
        	image: sql
            command: mysql