[Docker] 도커 컴포즈

공혁준·2022년 6월 16일
0

Docker

목록 보기
9/9
post-thumbnail

📌 도커 컴포즈에 대해 다룹니다.

도커 컴포즈를 사용하는 이유

여러 개의 컨테이너가 하나의 애플리케이션으로 동작할 때 매번 run 명령어를 실행하는 것은 불편하다.

👉 도커 컴포즈(Docker Compose)는 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공한다.

  • 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작
  • run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨 등도 정의 가능
  • 컨테이너의 수가 많아지고 정의해야 할 옵션이 많아질 때 유용

도커 컴포즈 사용법

도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 도커 컨테이너를 생성한다.

기본적으로 어떠한 설정도 하지 않으면 도커 컴포즈는 현재 디렉터리의 docker-compose.yml 파일을 읽어 로컬의 도커 엔진에게 컨테이너 생성을 요청한다.

docker-compose.yml 파일을 생성한 후 docker-compose up -d 명령어로 컨테이너를 생성한다.

docker-compose.yml 예시

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
  1. version: YAML 파일 포맷의 버전을 나타낸다. 버전은 1, 2, 2.1, 3 등이 있다. 도커 컴포즈 버전은 도커 엔진 버전에 의존성이 있으므로 가능하다면 최신 버전을 사용하는 것이 좋다.
  2. services: 생성될 컨테이너들을 묶어놓은 단위이다. 서비스 항목 아래에는 각 컨테이너에 적용될 생성 옵션을 지정한다.
  3. web, mysql: 생성될 서비스의 이름이다. 이 항목 아래에 컨테이너가 생성될 때 필요한 옵션을 지정할 수 있다.

도커 컴포즈의 프로젝트, 서비스, 컨테이너

도커 컴포즈는 컨테이너를 프로젝트 및 서비스 단위로 구분하므로 컨테이너의 이름은 일반적으로 다음과 같은 형식으로 정해진다.

[프로젝트 이름]_[서비스 이름]_[서비스 내에서 컨테이너의 번호]

하나의 프로젝트는 여러 개의 서비스로 구성되고, 각 서비스는 여러 개의 컨테이너로 구성된다.

docker-compose scale 명령어로 컨테이너를 추가적으로 생성할 수 있다.

생성된 프로젝트는 docker-compose down 명령어로 삭제할 수 있다. 프로젝트를 삭제하면 서비스의 컨테이너 또한 전부 정지된 뒤 삭제된다.

도커 컴포즈는 기본적으로 현재 디렉터리의 이름으로 된 프로젝트를 제어한다. 예를 들어 /home/ubuntu 디렉터리에 docker-compose.yml 파일이 있고, docker-compose down 명령어를 사용하면 ubuntu라는 이름을 가진 프로젝트를 삭제한다. 그러나 -p 옵션을 사용하게 되면 제어할 프로젝트의 이름을 명시할 수 있다.

YAML 파일 작성

YAML 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의의 4가지 항목으로 구성된다. 이 중 많이 사용하는 것은 서비스 정의이며, 볼륨 정의와 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로 사용된다.

  1. 버전 정의
    YAML 파일 포맷에는 버전 1, 2, 2.1, 3이 있다. 버전 3은 도커 스웜 모드와 호환되는 버전이므로 가능하면 최신 버전의 도커 컴포즈를 사용하는 것이 좋다.
    버전 항목은 일반적으로 YAML 파일의 맨 윗부분에 명시한다.
version: '3.0'
  1. 서비스 정의
    서비스는 도커 컴포즈로 생성할 컨테이너 옵션을 정의한다. 이 항목에 쓰인 각 서비스는 컨테이너로 구현되고 하나의 프로젝트로서 도커 컴포즈에 의해 관리된다. 서비스의 이름은 services의 하위 항목으로 정의하고, 컨테이너의 옵션은 서비스 이름의 하위 항목에 정의한다.
services:
  my_container_1:
    image: ...
  my_container_2:
    image: ...
profile
몰입을 즐기는 개발자입니다.

0개의 댓글