본문 바로가기

ChatGPT/Docker

[Docker][Compose] Docker Compose로 애플리케이션 간 볼륨 공유하기

반응형

https://github.com/gboysking/docker-basic-example/tree/master/share-volume

 

GitHub - gboysking/docker-basic-example

Contribute to gboysking/docker-basic-example development by creating an account on GitHub.

github.com

소개

Docker Compose는 여러 개의 컨테이너를 사용하는 복잡한 애플리케이션을 쉽게 관리할 수 있는 도구입니다. 컨테이너 간에 데이터를 공유해야 하는 경우가 종종 있는데, 이를 위해 Docker Compose는 공유 볼륨이라는 기능을 제공합니다.

애플리케이션 간 공유 볼륨을 사용하면 각 애플리케이션의 데이터를 쉽게 공유할 수 있습니다. 예를 들어, 로그 파일이나 데이터베이스 파일을 공유 볼륨에 저장하면 여러 개의 컨테이너에서 동시에 접근할 수 있습니다. 이를 통해 애플리케이션의 가용성과 확장성을 향상시킬 수 있습니다.

이번 포스트에서는 Docker Compose를 사용하여 두 개의 애플리케이션 간에 공유 볼륨을 설정하는 방법에 대해 알아보겠습니다.

Docker Compose 파일 설정

Docker Compose를 사용하여 두 개의 애플리케이션 간에 공유 볼륨을 설정하려면 먼저 docker-compose.yml 파일을 만들어야 합니다.

다음은 docker-compose.yml 파일의 예시입니다.

version: '3'

services:
  app1:
    build:
      context: .
      args:
        APP_NAME: "app1"
    volumes:
      - logs:/app/logs
  app2:
    build:
      context: .
      args:
        APP_NAME: "app2"
    volumes:
      - logs:/app/logs

volumes:
  logs:

 

반응형

이 파일에서는 두 개의 서비스(app1app2)를 정의합니다. 각 서비스는 다음과 같은 속성을 가지고 있습니다.

  • build: Docker 이미지를 빌드하는 데 필요한 정보를 제공합니다.
  • volumes: 공유 볼륨을 설정하고 마운트할 경로를 지정합니다.

서비스 간에 공유 볼륨을 설정하기 위해 volumes 섹션에서 logs라는 이름의 볼륨을 정의합니다. 각 서비스에서는 logs를 마운트하고 로그를 저장하는 경로를 지정합니다.

이제 Docker Compose를 사용하여 애플리케이션을 빌드하고 실행할 수 있습니다.

애플리케이션 빌드 및 실행

우선, 애플리케이션의 Docker 이미지를 빌드해야 합니다. 이를 위해서는 docker-compose.yml 파일이 있는 디렉토리에서 다음 명령어를 실행하면 됩니다:

docker-compose build

이 명령어를 실행하면 app1app2 서비스에 대한 Docker 이미지가 빌드됩니다. docker-compose build 명령어는 Dockerfile에서 정의된 빌드 지침을 따릅니다. 이 경우, python:3.9-slim-buster 이미지에서 app.py 파일을 복사한 다음, 필요한 환경 변수(APP_NAME)를 설정하고 애플리케이션을 시작합니다.

이제 이미지를 빌드했으므로, 애플리케이션을 실행할 수 있습니다. 다음 명령어를 실행하면 됩니다:

docker-compose up

이 명령어를 실행하면 두 서비스(app1app2)가 실행됩니다. 각 서비스는 공유 볼륨에 로그를 기록합니다. 이제 애플리케이션이 실행되고 로그가 생성되는지 확인할 수 있습니다.

볼륨 공유 테스트

이제 두 애플리케이션에서 로그를 생성해 보겠습니다. docker-compose up을 사용하여 컨테이너를 시작한 터미널에서 Ctrl-C를 눌러 컨테이너를 중지합니다. 그런 다음 docker-compose up을 사용하여 컨테이너를 다시 시작합니다.

$ docker-compose up

애플리케이션을 실행한 후 몇 분이 지나면 각 애플리케이션의 /app/logs 디렉토리에 app.log 파일이 생성됩니다. 로그 파일은 각 애플리케이션에서 매 10초마다 생성됩니다.

$ docker-compose exec app1 ls /app/logs
$ docker-compose exec app2 ls /app/logs

각 명령어는 각각 app1app2 컨테이너의 /app/logs 디렉토리를 나열합니다. 두 명령어 모두 app.log 파일이 있음을 보여줍니다.

호스트 머신에서 로그 접근

컨테이너에서 로그 파일을 보는 것 외에도, 호스트 머신에서도 로그 파일을 볼 수 있습니다.

다음 명령어를 사용하여 share-volume_logs 볼륨의 마운트 포인트를 찾아보겠습니다.

docker volume inspect share-volume_logs | grep Mountpoint | awk '{print $2}' | sed 's/.$//'

출력된 마운트 포인트에서 app.log 파일을 열어볼 수 있습니다.

sudo tail -f 마운트_포인트/app.log

호스트 머신에서 로그 파일을 볼 수 있으므로, 필요한 경우에 볼륨 공유를 사용하여 로그 파일을 저장하고 관리하는 것이 매우 편리합니다.

 

결론

볼륨 공유를 사용하여 Docker Compose에서 서로 다른 애플리케이션 간에 데이터를 공유할 수 있습니다. 볼륨 공유는 각 서비스에서 실행되는 컨테이너의 파일 시스템을 호스트 머신 또는 다른 컨테이너와 마운트하여 사용할 수 있게 해줍니다. 이는 애플리케이션 간 데이터 공유를 효율적으로 수행하고 로그 및 데이터 저장소를 중앙 집중식으로 관리할 수 있는 이점을 제공합니다.

볼륨 공유를 사용하는 데 문제가 발생할 수 있습니다. 특히 여러 서비스가 동시에 같은 파일에 쓰려고 할 때 충돌이 발생할 수 있습니다. 이러한 문제를 방지하기 위해 Docker Compose에서 볼륨 이름을 구체적으로 지정하여 각 서비스에서 볼륨을 구분하고, 각 서비스가 다른 포트를 사용하도록 구성하여 서로 간의 충돌을 피할 수 있습니다.

이 문서에서는 Docker Compose를 사용하여 두 개의 Python 애플리케이션 간의 볼륨 공유를 구성하는 방법을 살펴보았습니다. 이를 통해 애플리케이션 간 데이터 공유를 효율적으로 수행할 수 있습니다.

 

이 글은 ChatGPT의 도움을 받아 작성되었습니다.

반응형