[BooTakHae] Docker-Compose 사용

Kim Hyen Su·2024년 8월 22일

BooTakHae

목록 보기
22/22
post-thumbnail

Docker-Compose


개요

이전까지 Docker에 관련된 기본 내용들에 대해서 학습했습니다. 하지만, BooTakHae 라는 프로젝트는 MSA 구조로 하나의 Docker 이미지를 실행한다고 해서 서비스 전체를 실행할 수 없습니다. 그렇다고 이를 개별로 실행하기에는 너무 많은 명령어를 수행해줘야 해서 불편합니다. 따라서, BooTakHae 서버를 실행시킬 방법으로 Docker-Compose 라는 것을 사용해볼까 합니다.

Docker Compose 란?

도커 컴포즈는 단일 서버에서 다중 컨테이너가 필요한 애플리케이션 관리에 사용되기 위한 툴입니다. 기존에 docker-compose 라는 개별 명령어를 사용했었지만, 이후에 docker 하위 명령어로도 사용이 가능해졌습니다.(docker compose)

도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 순차적으로 컨테이너를 생성하는 방식으로 동작합니다. 자세히 말하면, 도커 컴포즈의 설정 파일 내 도커 엔진의 run 명령어의 옵션 및 각 컨테이너의 네트워크, 볼륨 등의 설정을 함께 정의할 수 있습니다.

Docker Compose 사용

설치

도커 컴포즈를 사용하기 위해서는 우선, 설치부터 해줘야 합니다. 필자의 경우, Docker Desktop을 설치하여 GUI 방식으로 Docker를 실행하며, 이는 Docker Compose 설치도 포함되어 있어 바로 사용이 가능합니다.

Docker Engine을 설치하여 사용할 경우, 별도로 Docker Compose를 설치 해줘야 합니다. Docker Compose 설치 관련해서는 공식문서에 OS 별로 구분되어 명시되어 있으니 참조 바랍니다.

설치가 완료되었는지 확인하기 위해 아래 명령어로 도커 컴포즈의 버전을 확인해줍니다.

$ docker-compose -v

output :

PS C:\project\sinatra> docker-compose -v
Docker Compose version v2.27.0-desktop.2
PS C:\project\sinatra>_

위에서 설명한대로, docker-composedocker compose 는 다른 명령어이기에 Option이 다를 수 있음을 인지해야 합니다. 실제로 docker compose -v 라는 명령어를 입력 시 version 정보를 확인할 수 없습니다.

사용법

  1. Host에 폴더를 생성하고 해당 폴 더 내 docker-compose.yml 파일을 배치합니다.
  2. 파일은 Host에 배치되지만 명령어는 Docker Host에 전달됩니다. 즉, 도커 컴포즈에서 Docker Container 실행 시 입력했던 명령어를 대신 순차적, 일괄적으로 실행해줍니다.
  3. Docker-Compose로 만들어진 컨테이너들도 Docker Engine 위에서 동일하게 동작합니다.

docker-compose.yml 작성

docker-compose.yml 파일에 자주 사용되는 명령어는 다음과 같습니다.

주의사항
yaml 파일 내 들여쓰기 시 Tab을 사용하게 되면 인식하지 못하므로, Space 2개를 사용하여 depth를 구분해줘야 합니다.

version

도커 컴포즈의 버전을 명시하기 위한 명령어이지만, 현재에는 폐기(obsolete)되어 사용 시 경고문이 뜬다고 합니다.

services

생성될 컨테이너들을 묶은 단위입니다. 각 서비스명을 지정한 뒤 그 안에 컨테이너 실행 옵션을 정의합니다.

networks

서비스가 서로 통신할 수 있도록 해주는 요소입니다. 기본적으로 Compose는 애플리케이션에 대해 단일 네트워크를 설정합니다. 각 컨테이너는 기본 네트워크에 가입하고 네트워크를 통해 다른 컨테이너에 접근이 가능합니다.

volumes

컨테이너 엔진이 구현한 영구 데이터 저장소 기술입니다. 이를 최상위 선언을 통해서 여러 서비스에서 공유할 수 있는 명명된 볼륨을 구성할 수 있습니다. 즉, 네트워크 단위로 사용할 수 있는 볼륨이 생성됨을 의미합니다.

예를 들면, 다음과 같이 db-data 라는 volume이 있습니다.

services:
  backend:
    image: example/database
    volumes:
      - db-data:/etc/data

  backup:
    image: backup-service
    volumes:
      - db-data:/var/lib/backup/data

volumes:
  db-data:

db-data 볼륨은 /var/lib/backup/data/etc/data 라는 컨테이너 경로에 각각 마운트 됩니다.

Configs

Docker 이미지를 다시 빌드할 필요 없이 서비스가 동작을 조정할 수 있습니다. 볼륨과 마찬가지로 configs는 컨테이너의 파일 시스템에 파일로 마운트됩니다. Linux 컨테이너는 /<config-name> 그리고 Windows 컨테이너는 C:\<config-name> 을 기본 마운트 경로로 설정 되어 있습니다.

이외에 자세한 명령어들에 대한 정보가 궁금하면, compose file 작성 공식 document를 참조 바랍니다.

이제, 실제 docker-compose.yml 파일을 작성해보겠습니다.

Docker-Compose 작성

profile
백엔드 서버 엔지니어

0개의 댓글