본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Docker

Docker compose 의 사용

by bluefriday 2021. 9. 7.
반응형

 

Docker-compose 설치 및 확인

Docker compose 는 여러 개의 컨테이너를 동시에 연계해서 구동할 수 있게 해주는 컨테이너 툴이다. 도커 측에서 제공하고 있는 하나의 바이너리 파일로, 여기서는 이 docker compose 의 설치와 실행 방법에 대해서 알아보자.

docker/compose 프로젝트의 릴리즈 페이지에서 최신 버전의 docker-compose 패키지를 다운로드 받는다. OS(linux, windows), 아키텍처셋(arm64, armv7, armv6) 등에 맞춰서 다운로드 받은 후에 아래와 같이 어플리케이션 디렉토리에 이동하여 어느 위치에서나 docker-compose를 사용할 수 있도록 설정하자. (하단의 예는 docker-compose 1.29.2 버전을 사용하였다.)

### 바이너리 파일 다운로드
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

### 바이너리 파일 실행권한 부여
sudo chmod +x /usr/local/bin/docker-compose

###심볼릭 파일 생성
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

### 버전 확인
docker-compose --version
docker-compose version 1.29.2, build 1110ad01

 

 

간단한 사용 예제

Docker 이미지를 빌도하기 위해 고유의 Dockerfile을 사용하는 것과 유사하게, docker-compose 툴 또한 지정된 docker-compose yaml 문법을 사용한다. 간단한 예제로 확인해보자(예제는 docker 페이지에서 제공하는 예제를 그대로 참조하였다.)

### docker-compose.yml file ###

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

docker run 명령어와 유사한 부분이 많아서 필드의 항목을 보는 것만으로도 쉽게 의미를 알 수가 있다. 위 문법의 경우 service 필드 밑에 web, redis 라는 2개의 컨테이너를 정의하고 있다. redis 필드의 경우 다른 옵션 없이 redis:latest 이미지를 지정해주고 있으며, web의 경우 별도의 이미지를 지정하진 않았지만 build 라는 필드를 통해 현재 위치를 빌드 컨텍스트로 하여 이미지를 빌드하고 그 이미지를 바로 사용하는 것을 알 수 있다. 

여기서 web 필드 하위에 links 라는 필드가 있는데, 이 필드를 통해서 web 컨테이너는 redis 컨테이너를 네트워크적으로 접근할 수 있다. docker compose는 이런식으로 여러 개의 컨테이너를 정의하면서 컨테이너가 다른 컨테이너를 볼 수 있도록 지원한다.

docker-compose 파일의 전체 레퍼런스는 공식 페이지(v3과 v2 버전으로 구분)를 참조하도록 하자.

 

 

프로세스 구동과 삭제

위와 같이 여러 개의 컨테이너를 구동한 후에는 위에서 다운로드 받은 docker-compose 바이너리 파일과 작성한 docker-compose.yml 파일을 이용하여 컨테이너를 생성/중지/삭제 할 수 있다. 

docker-compose up -d
docker-compose ps
docker-compose down
docker-compose rm -f

 

 

Docker-compose vs Kubernetes

컨테이너를 관리해준다는 입장에서 kubernetes와 동일한 면이 있는 것으로 보이나, 여러 노드 사이에 논리적 클러스터를 구축하여 컨테이너를 분산/스케쥴링 시켜주는 기능은 없어서 오케스트레이션 툴이라고 보기에는 어렵다. 즉, 같은 컨테이너 관리 도구이나 kubernetes 와는 포지션이 다르며, 오히려 kubernetes 가 훨씬 넓은 범위의 기능을 지원한다.

하지만 docker-compose 가 가지고 있는 장점들도 많다.

먼저, 클러스터 설정 및 구축으로 다소 무거운 kubernetes에 비해서 설치와 사용이 간단하다. 굳이 클러스터를 구축하지 않아도 호스트 노드에 docker 만 설치되어 있으면 위와 같이 docker-compose 바이너리와 compose yaml 파일만으로, 의존성(dependency)이 있는 여러 컨테이너를 동시에 생성하거나 삭제, 연계할 수 있다. 이에 개발 과정에서 간편하게 사용되기도 한다.

또한 CICD 환경에서 테스트를 수행하는 경우에도, compose 파일을 이용하여 여러 개의 컨테이너를 구동하고 테스트를 진행하고 다시 내리는 식으로 여러 번의 테스트를 쉽게 수행할수도 있다.

마지막으로 어플리케이션이 단일 호스트에서 구동되어도 되는 경우에는 오히려 특정 호스트에 compose 를 이용하여 모듈 컨테이너들을 독립적으로 구동하여 다른 컨테이너나 어플리케이션에 영향을 받지 않는 고유 환경으로, 운영 환경에서도 사용될 수 있다.

 

'소프트웨어 아키텍처 > Docker' 카테고리의 다른 글

Docker - data directory 변경하기  (0) 2021.09.23
Docker registry API - pull  (0) 2021.09.22
Docker and container runtime  (0) 2021.08.30
Docker registry 내부 구조  (1) 2018.06.21
Docker registry service 2  (0) 2018.06.20

댓글