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:
이 파일에서는 두 개의 서비스(app1
및 app2
)를 정의합니다. 각 서비스는 다음과 같은 속성을 가지고 있습니다.
build
: Docker 이미지를 빌드하는 데 필요한 정보를 제공합니다.volumes
: 공유 볼륨을 설정하고 마운트할 경로를 지정합니다.
서비스 간에 공유 볼륨을 설정하기 위해 volumes
섹션에서 logs
라는 이름의 볼륨을 정의합니다. 각 서비스에서는 logs
를 마운트하고 로그를 저장하는 경로를 지정합니다.
이제 Docker Compose를 사용하여 애플리케이션을 빌드하고 실행할 수 있습니다.
애플리케이션 빌드 및 실행
우선, 애플리케이션의 Docker 이미지를 빌드해야 합니다. 이를 위해서는 docker-compose.yml
파일이 있는 디렉토리에서 다음 명령어를 실행하면 됩니다:
docker-compose build
이 명령어를 실행하면 app1
및 app2
서비스에 대한 Docker 이미지가 빌드됩니다. docker-compose build
명령어는 Dockerfile
에서 정의된 빌드 지침을 따릅니다. 이 경우, python:3.9-slim-buster
이미지에서 app.py
파일을 복사한 다음, 필요한 환경 변수(APP_NAME
)를 설정하고 애플리케이션을 시작합니다.
이제 이미지를 빌드했으므로, 애플리케이션을 실행할 수 있습니다. 다음 명령어를 실행하면 됩니다:
docker-compose up
이 명령어를 실행하면 두 서비스(app1
및 app2
)가 실행됩니다. 각 서비스는 공유 볼륨에 로그를 기록합니다. 이제 애플리케이션이 실행되고 로그가 생성되는지 확인할 수 있습니다.
볼륨 공유 테스트
이제 두 애플리케이션에서 로그를 생성해 보겠습니다. 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
각 명령어는 각각 app1
및 app2
컨테이너의 /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의 도움을 받아 작성되었습니다.
'ChatGPT > Docker' 카테고리의 다른 글
[Docker][Swarm] Docker Swarm에서의 동적 작업 슬롯 번호 설정 (0) | 2023.04.27 |
---|---|
[Docker][Compose] 도커 명령어 모음 (0) | 2023.04.24 |
[Docker][Volume] 명령어 모음 (0) | 2023.04.24 |
[Docker][Network] 도커 명령어 모음 (0) | 2023.04.24 |
[Docker][Container] 도커 명령어 모음 (0) | 2023.04.24 |