시작하며

서비스의 개발과 CI를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다루기 위해 Docker Compose를 사용한다. 컨테이너의 옵션과 환경을 정의한 파일을 순차적으로 읽으며 구축한다.

  • 각 컨테이너의 의존성, 네트워크, 볼륨을 함께 정의할 수 있다.
  • 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있다.
  • 서비스 디스커버리는 자동으로 이루어진다.

Docker Compose 사용법

Compose 기본

web, mysql 서비스에 대한 도커 이미지명과 기본적인 포트, 링크 정보를 포함하고 있다. docker-compose ps로 확인하기 위해서는 해당 컨테이너의 프로젝트 경로(직접 명시하지 않았다면 yml 파일이 있던 루트 경로)에서 명령어를 입력해야 한다. docker ps는 어디서든 확인 가능하다.

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    
docker-compose ps
 
     Name               Command           State                Ports              
----------------------------------------------------------------------------------
docker_mysql_1   mysqld                   Up                                      
docker_web_1     apachectl -DFOREGROUND   Up      0.0.0.0:80->80/tcp,:::80->80/tcp

Compose 활용

YAML 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의 4가지 항목으로 구성된다.

주요 질문과 답변

1. 특정 YAML 파일에서 생성된 다수의 프로젝트를 제어하기 위해서는 -f 옵션과 -p 옵션을 사용한다. 각 옵션을 설명하라.

1) -f : yaml 파일의 위치를 지정한다.
2) -p : 프로젝트의 이름을 명시한다.

2. 컨테이너들이 의존관계를 가지는 경우, 선행 컨테이너가 완벽히 준비되고 나서 후행 컨테이너를 실행시키려면 어떤 방법을 사용하는가?

선행 컨테이너의 상태를 확인할 수 있는 쉘 스크립트를 후행 컨테이너의 entrypoint로 지정한다.

3. YAML 파일과 스웜모드를 함께 사용하는 환경에서 생성된 컨테이너의 묶음을 뜻하는 말은 무엇인가? 또, 스택 생성시에 무시되는 YAML 옵션은 무엇인가?

1) 스택(stack)
2) links, depends_on과 같이 의존성을 나타내는 항목. 의존성 개념을 사용하려면 양 컨테이너가 같은 호스트에 생성되어야 하기 때문이다.

4. 도커 컨테이너를 구성하는 3가지 구성요소와 각각의 기능을 설명하라.

1) runC : OCI(Open Container Initiative) 런타임 표준을 준수하는 컨테이너를 생성 및 실행하기 위한 툴
2) containerd : 여러개의 runC 컨테이너 프로세스 및 이미지를 관리하는 주체
3) docker-engine : containerd와 통신해 runC를 사용할 수 있게 하는 엔드유저용 툴

5. on-premise와 cloud 모두에서 사용 가능한 k8s(kubernetes) 서비스는 무엇인가?

kubespray, kubeadm

정리하며

Docker Compose는 여러 컨테이너를 단일 YAML 파일로 정의하고 일괄적으로 관리할 수 있는 도구다. 서비스 간 의존관계, 네트워크, 볼륨을 선언적으로 표현할 수 있어 개발 환경 구성과 CI 파이프라인 구축에 널리 활용된다. 스웜 모드와 함께 사용할 경우 스택 개념으로 확장되며, 이 경우 links, depends_on 같은 의존성 항목은 무시된다는 점을 유의해야 한다.