Docker Compose에서 볼륨(Volume) 설정하기
Docker Compose에서 볼륨(Volume) 설정하기
Docker Compose에서 볼륨(Volume) 설정하기
Docker Compose는 여러 컨테이너를 효율적으로 관리할 수 있도록 도와주는 도구입니다. 그 중에서도 볼륨(Volume)은 컨테이너가 삭제되거나 재시작되더라도 데이터를 유지하고, 여러 컨테이너 간에 데이터를 공유할 수 있는 강력한 기능을 제공합니다. 이 글에서는 Docker Compose에서 볼륨을 사용하는 방법을 단계별로 알아보겠습니다.
1. 볼륨이란 무엇인가?
볼륨(Volume)은 컨테이너의 파일 시스템 외부에 위치한 저장소로, 컨테이너가 삭제되더라도 데이터를 유지할 수 있습니다. 볼륨은 Docker에서 데이터를 영구적으로 보관하거나 여러 컨테이너에서 데이터를 공유할 때 사용됩니다.
볼륨의 주요 특징:
- 데이터 영속성: 컨테이너가 삭제되더라도 볼륨에 저장된 데이터는 유지됩니다.
- 컨테이너 간 데이터 공유: 여러 컨테이너가 동일한 볼륨을 참조하여 데이터를 공유할 수 있습니다.
- 호스트와의 데이터 공유: 로컬 호스트의 디렉토리와 컨테이너 내 디렉토리를 연결할 수 있습니다.
2. 기본 볼륨 설정
Docker Compose에서 볼륨을 설정하는 가장 간단한 방법은 서비스의 volumes
섹션에서 컨테이너 내부 경로를 지정하는 것입니다. 별도의 볼륨을 정의하지 않으면 익명 볼륨이 생성되어 사용됩니다.
예시:
version: '3'
services:
web:
image: nginx
volumes:
- /var/www/html
설명:
web
서비스는nginx
이미지로 생성되며,/var/www/html
경로에 익명 볼륨이 자동으로 마운트됩니다. 이 볼륨은 컨테이너가 종료되거나 삭제되어도 데이터가 유지됩니다.
3. 명명된 볼륨 사용
명명된 볼륨은 이름을 지정하여 데이터를 보다 쉽게 관리할 수 있습니다. 명명된 볼륨은 여러 컨테이너에서 참조할 수 있으며, 컨테이너를 삭제하더라도 Docker에 저장된 데이터는 유지됩니다.
예시:
version: '3'
services:
web:
image: nginx
volumes:
- mydata:/var/www/html
volumes:
mydata:
설명:
mydata
라는 이름의 볼륨을 정의하고, 이를web
서비스의/var/www/html
경로에 마운트합니다.- 명명된 볼륨
mydata
는 컨테이너가 삭제되어도 유지되며, 이후 다른 서비스에서도 동일한 볼륨을 사용할 수 있습니다.
4. 호스트 디렉토리를 볼륨으로 사용하기
로컬 머신(호스트)의 디렉토리를 컨테이너에 마운트하여, 개발 환경에서 실시간으로 파일을 수정하고 테스트할 수 있습니다. 이를 통해 컨테이너 내부의 파일을 직접 편집하지 않고도 로컬에서 작업한 결과를 컨테이너에서 반영할 수 있습니다.
예시:
version: '3'
services:
web:
image: nginx
volumes:
- ./local-data:/var/www/html
설명:
./local-data
는 호스트의 로컬 디렉토리입니다. 이 디렉토리는nginx
컨테이너의/var/www/html
경로에 마운트됩니다.- 호스트 디렉토리에서 파일을 수정하면, 컨테이너 내에서도 즉시 변경 사항이 반영됩니다. 이를 통해 개발자가 로컬 파일을 수정하면서 실시간으로 컨테이너에서 반영되는 결과를 확인할 수 있습니다.
5. 읽기 전용 볼륨 설정
일부 경우에는 데이터를 읽기 전용으로 설정하여 컨테이너 내에서 파일을 수정할 수 없도록 할 수 있습니다. 읽기 전용 볼륨은 데이터를 안전하게 유지할 때 유용합니다.
예시:
version: '3'
services:
web:
image: nginx
volumes:
- ./local-data:/var/www/html:ro
설명:
:ro
는 읽기 전용(read-only)을 의미합니다.web
서비스는./local-data
디렉토리를 마운트하지만, 이 디렉토리는 컨테이너 내에서 수정할 수 없습니다. 이는 중요한 데이터가 수정되지 않도록 보호하는 데 유용합니다.
6. 여러 컨테이너에서 볼륨 공유하기
같은 볼륨을 여러 컨테이너에서 공유하여 데이터를 협업할 수 있습니다. 예를 들어, 웹 애플리케이션 컨테이너와 백업 컨테이너가 동일한 데이터 볼륨을 사용할 수 있습니다.
예시:
version: '3'
services:
web:
image: nginx
volumes:
- shared-data:/var/www/html
backup:
image: busybox
volumes:
- shared-data:/data
command: tar cvf /backup.tar /data
volumes:
shared-data:
설명:
web
과backup
서비스는 동일한 볼륨shared-data
를 공유합니다.web
서비스는 이 볼륨을/var/www/html
경로에 마운트하고,backup
서비스는 동일한 볼륨을/data
로 마운트하여 데이터를 백업합니다.- 이를 통해 데이터가 두 컨테이너 간에 공유되며,
backup
서비스는web
서비스의 데이터를 백업할 수 있습니다.
7. 볼륨 옵션 설정
Docker Compose에서 볼륨의 동작을 세부적으로 제어할 수 있는 다양한 옵션을 설정할 수 있습니다. 예를 들어, driver
를 사용하여 특정 드라이버로 볼륨을 생성하거나, driver_opts
로 볼륨의 설정을 상세하게 조정할 수 있습니다.
예시:
version: '3'
services:
web:
image: nginx
volumes:
- mydata:/var/www/html
volumes:
mydata:
driver: local
driver_opts:
type: none
device: /srv/docker-data
o: bind
설명:
mydata
볼륨은local
드라이버를 사용하여 생성되며, 호스트의/srv/docker-data
디렉토리가 컨테이너에 바인딩됩니다.driver_opts
옵션을 통해 볼륨의 세부 설정을 지정할 수 있습니다. 이 예에서는 로컬 디렉토리를 볼륨으로 사용하도록 설정했습니다.
8. 익명 볼륨과 명명된 볼륨의 차이점
- 익명 볼륨: 이름이 없는 볼륨이며, 컨테이너가 삭제될 때 볼륨도 삭제될 가능성이 있습니다. 주로 일회성 데이터 저장에 사용됩니다.
- 명명된 볼륨: 이름이 지정된 볼륨으로, 컨테이너가 삭제되더라도 데이터는 유지됩니다. 데이터가 중요할 경우 명명된 볼륨을 사용하는 것이 좋습니다.
9. 볼륨 제거하기
더 이상 필요하지 않은 볼륨을 제거하려면 docker-compose down -v
명령어를 사용하여 관련된 모든 볼륨을 삭제할 수 있습니다.
docker-compose down -v
이 명령은 모든 컨테이너를 종료하고, 사용 중인 모든 볼륨을 삭제합니다. 단, 명명된 볼륨은 docker volume rm <volume_name>
명령을 통해 직접 삭제해야 합니다.
10. 정리
Docker Compose에서 볼륨을 설정하는 것은 데이터의 영속성을 유지하고, 여러 컨테이너 간에 데이터를 공유하는 데 중요한 역할을 합니다. 볼륨을 사용하면 데이터를 안전하게 보관하고 관리할 수 있으며, 개발 환경에서도 실시간으로 파일을 수정하고 반영할 수 있는 편리함을 제공합니다.
- 기본 볼륨 설정을 통해 데이터를 영속적으로 보관할 수 있습니다.
- 명명된 볼륨은 데이터가 손실되지 않도록 안전하게 관리할 수 있습니다.
- 호스트 디렉토리와 컨테이너 간의 실시간 데이터 동기화가 가능합니다.
- 여러 컨테이너가 동일한 볼륨을 공유하여 협업할 수 있습니다.