Docker 볼륨에 대한 개념, 명령어를 설명하고 docker-compose 파일로 설정하는 방법에 대한 내용을 정리합니다.
Docker는 컨테이너 기반 애플리케이션을 실행하는 강력한 플랫폼입니다.
하지만 컨테이너는 본질적으로 휘발성 데이터 저장소입니다.
컨테이너가 종료되면 내부에 저장된 데이터도 사라집니다.
이를 해결하기 위해 Docker는 볼륨(Volumes)을 제공합니다.
1. Docker 볼륨 개념
Docker 볼륨은 컨테이너의 데이터를 외부에 저장하여 데이터의 영속성을 보장합니다.
볼륨은 컨테이너의 파일시스템과 호스트 시스템 간의 파일 공유를 가능하게 합니다.
볼륨의 특징
- 데이터 영속성: 컨테이너가 삭제되어도 데이터는 유지됩니다.
- 데이터 공유: 여러 컨테이너가 동일한 데이터를 공유할 수 있습니다.
- 호스트 독립성: 볼륨은 호스트 파일시스템 경로와 분리되어 관리됩니다.
- 효율성: Docker가 볼륨을 직접 관리하므로 파일시스템 성능이 최적화됩니다.
2. Docker 볼륨 종류
(1) 익명 볼륨
- 이름이 없는 볼륨으로, Docker가 자동으로 생성하고 관리합니다.
- 주로 임시 데이터 저장에 사용됩니다.
docker run -v /app/data my_image
(2) 이름 있는 볼륨
- 사용자가 명시적으로 이름을 지정한 볼륨.
- 재사용 및 관리가 용이합니다.
docker volume create my_volume
docker run -v my_volume:/app/data my_image
(3) 바인드 마운트
- 호스트 시스템의 특정 디렉토리를 컨테이너에 직접 연결.
- 데이터가 호스트 디렉토리에 저장됩니다.
docker run -v /host/path:/container/path my_image
3. 기본 Docker 명령어를 통한 볼륨 관리
Docker CLI를 사용하여 볼륨을 생성, 조회, 삭제, 연결할 수 있습니다.
(1) 볼륨 생성
이름 있는 볼륨 생성
docker volume create my_volume
볼륨 생성 시 옵션 지정
docker volume create \
--driver local \
--opt type=tmpfs \
--opt device=tmpfs \
my_tmpfs_volume
(2) 볼륨 목록 확인
docker volume ls
출력 예:
DRIVER VOLUME NAME
local my_volume
local my_tmpfs_volume
(3) 볼륨 상세 정보 확인
docker volume inspect my_volume
출력 예:
[
{
"Name": "my_volume",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/my_volume/_data",
"CreatedAt": "2024-12-24T10:00:00Z",
"Scope": "local"
}
]
(4) 볼륨 삭제
docker volume rm my_volume
참고: 볼륨이 컨테이너에 연결되어 있으면 삭제할 수 없습니다.
(5) 미사용 모든 볼륨 삭제
docker volume prune
주의: 사용하지 않는 모든 볼륨이 삭제됩니다.
4. Docker Compose를 통한 볼륨 설정
Docker Compose를 사용하면 복잡한 볼륨 구성을 선언적으로 정의할 수 있습니다.
(1) 기본 볼륨 설정
version: '3.9'
services:
app:
image: my_image
volumes:
- my_volume:/app/data
volumes:
my_volume:
my_volume
은 Docker가 관리하는 이름 있는 볼륨입니다.- 컨테이너의
/app/data
디렉토리에 마운트됩니다.
(2) 바인드 마운트 설정
version: '3.9'
services:
app:
image: my_image
volumes:
- ./host_data:/app/data
./host_data
는 호스트의 현재 디렉토리 경로입니다.- 컨테이너의
/app/data
디렉토리에 연결됩니다.
(3) 읽기 전용 볼륨
version: '3.9'
services:
app:
image: my_image
volumes:
- my_volume:/app/data:ro
volumes:
my_volume:
:ro
는 읽기 전용(읽기만 가능) 옵션입니다.
(4) 볼륨 옵션 추가
version: '3.9'
services:
app:
image: my_image
volumes:
- my_volume:/app/data
volumes:
my_volume:
driver: local
driver_opts:
type: nfs
o: addr=192.168.1.100,rw
device: ":/path/to/dir"
- NFS(Network File System)를 사용하는 예제입니다.
(5) 임시 볼륨 사용
version: '3.9'
services:
app:
image: my_image
volumes:
- type: tmpfs
target: /app/tmp
tmpfs:
size: 1000000
tmpfs
볼륨은 RAM을 사용하여 데이터를 저장합니다.- 성능이 중요한 임시 데이터에 적합합니다.
5. 볼륨 활용 사례
(1) 데이터 영속성 보장
- 데이터베이스 컨테이너의 데이터를 유지하기 위해 볼륨을 사용합니다.
services:
db:
image: postgres
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
(2) 컨테이너 간 데이터 공유
- 두 컨테이너가 동일한 데이터를 공유하도록 설정합니다.
services:
app:
image: app_image
volumes:
- shared_data:/app/shared
worker:
image: worker_image
volumes:
- shared_data:/app/shared
volumes:
shared_data:
6. Docker CLI vs. Docker Compose: 볼륨 관리 비교
기능 | Docker CLI | Docker Compose |
---|---|---|
볼륨 생성 | docker volume create | volumes 섹션에서 선언적으로 생성 |
볼륨 삭제 | docker volume rm | 자동화된 정리 가능 |
볼륨 연결 | -v 옵션 사용 | volumes 섹션에서 자동 연결 |
고급 옵션 설정 | --opt 플래그 사용 | driver_opts 로 설정 가능 |
7. 마무리
Docker 볼륨은 데이터 영속성 및 컨테이너 간 데이터 공유를 위해 필수적인 도구입니다.
CLI와 Docker Compose를 활용하면 볼륨을 유연하게 생성하고 관리할 수 있습니다.