alt
Home 시작하세요! 도커 / 쿠버네티스 4장 도커 컴포즈
Post
Cancel

시작하세요! 도커 / 쿠버네티스 4장 도커 컴포즈

: 필요한 컨테이너들의 설정을 하나의 파일로 구성해 한번에 띄우도록 하는 것


특징

  • 도커에 내장되어있지 않아 별도로 설치해야한다.
  • 생산성: 하나의 서비스가 여러개의 컨테이너로 구성되어있을 때 개발 환경을 위해 하나하나 띄우는 것은 생산성을 저하시킨다. 컴포즈를 통해 이러한 생상성 저하를 막을 수 있다.
  • Dockerfile을 run할때 부여했던 옵션값들을 모두 컴포즈 yaml에 작성 가능하다.


추가적인 기능

  • 스케일링: docker-compose scale service=2 와 같은 형태로 스케일링이 가능하다.
    • yaml 파일에 scale을 명시할 수도 있다.
  • depends_on : 컨테이너간 의존관계와 condition을 설정해, 해당 컨디션이 만족할 때 띄우도록 할 수 있다.


external

  • 프로젝트 생성마다 네트워크, 볼륨을 생성하는 것이 아닌 (외부에) 이미 존재하는 네트워크, 볼륨을 먹일 수 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    services:
      web: 
        image: ubuntu:14.04
        networks:
          - my_network
      
    networks: # 사용할 네트워크, 볼륨
      my_network:
        external: true
    


스웜

: 스웜모드로 생성하면 yaml에 명시한 컨테이너들의 묶음이 하나의 스택이 되고, 해당 컨테이너들은 클러스터에서 일괄 생성된다.

  • 이 때는 컴포즈 yaml로 띄웠어도 docker-compose가 아닌 docker stack으로 제어한다.
  • links, depends_on 와 같은 컨테이너 간 의존성 정의는 할 수 없다. 스웜 모드이기 때문에 클러스터 내 다른 호스트에 컨테이너가 생성될 수 있는데, 컨테이너간 의존성 정의는 한 호스트에 컨테이너가 생성되어야하기 때문이다.


도커와 컨테이너 생태계

  • OCI: 컨테이너 기술이 특정 벤더 or 회사에 의존되지 않도록 중립의 컨테이너 표준을 정의
    • 공통적으로 구현되어야 하는 런타임과 이미지 스펙의 표준을 정의한다.


도커: runC + containerd + 도커 엔진

  • runC: 컨테이너와 1:1 매칭되는, 런타임 역할
  • containerd: 컨테이너 프로세스, 이미지를 관리
  • 도커 엔진: containerd와 통신해 runC를 사용할 수 있도록 하는 엔드유저용 도구
  • 도커 컨테이너: 각각이 위와 같은 역할을 담당하기 때문에 runC와 containerd는 도커 엔진 없이 독립적으로 사용될 수 있다. 그래도 일반적으로는 도커 엔진과 함께 사용되는데, 따라서 일반적으로 도커 컨테이너라고 부른다.



Reference)

시작하세요! 도커 / 쿠버네티스

This post is licensed under CC BY 4.0 by the author.

시작하세요! 도커 / 쿠버네티스 3장 도커 스웜

시작하세요! 도커 / 쿠버네티스 6장 쿠버네티스 시작하기