Docker 볼륨 관리 명령어 필수 가이드
영구 데이터를 생성, 목록 확인, 검사, 마운트, 백업, 제거 및 정리하기 위한 Docker 볼륨 명령어를 알아보세요.
Docker 볼륨 관리 명령어 필수 가이드
컨테이너가 중요한 데이터를 쓰기 시작하는 순간 Docker 볼륨 관리 명령어가 중요해집니다. 컨테이너의 쓰기 가능 레이어는 컨테이너를 제거하면 사라지지만, Docker 볼륨은 데이터베이스 파일, 업로드, 캐시 데이터 또는 애플리케이션 상태를 컨테이너 재구축 과정에서 유지할 수 있습니다.
이 가이드는 핵심 docker volume 명령어, 컨테이너에 볼륨을 연결하는 방법, 그리고 정리 명령어가 예상치 못한 결과를 초래할 수 있는 상황을 보여줍니다.
Docker 볼륨이란?
Docker 볼륨은 Docker가 관리하는 스토리지 객체입니다. 기본 local 드라이버를 사용할 때 일반적으로 호스트의 Docker 관리 위치에 있으며, 컨테이너의 쓰기 가능 레이어 외부에 존재합니다. 명명된 볼륨은 이를 사용한 컨테이너를 중지, 제거 또는 재생성한 후에도 계속 사용할 수 있습니다.
볼륨은 다음과 같은 이유로 유용합니다:
- 영속성: 데이터는 컨테이너 교체 후에도 유지됩니다.
- 격리: 애플리케이션 데이터는 이미지 및 쓰기 가능 레이어와 분리됩니다.
- 드라이버 지원: 볼륨 드라이버는 로컬 디스크, 네트워크 스토리지 또는 플랫폼별 스토리지 백엔드를 사용할 수 있습니다.
- 운영 명확성: 명명된 볼륨은 익명 컨테이너 레이어보다 검사, 백업 및 재사용이 더 쉽습니다.
핵심 docker volume 명령어
docker volume 명령어는 볼륨을 생성, 목록 확인, 검사 및 삭제하기 위한 주요 인터페이스입니다.
docker volume create
명명된 볼륨 생성:
docker volume create my-app-data
Docker 생성 이름으로 볼륨 생성:
docker volume create
기본이 아닌 설정을 사용할 때 드라이버 옵션을 전달할 수도 있습니다:
docker volume create --driver local my-app-data
docker volume ls
볼륨 목록 확인:
docker volume ls
이름만 표시:
docker volume ls -q
댕글링 볼륨 필터링:
docker volume ls --filter dangling=true
dangling=true는 Docker가 해당 볼륨이 컨테이너에서 참조되지 않는 것으로 간주함을 의미합니다. 데이터가 중요하지 않다는 의미는 아닙니다.
docker volume inspect
볼륨 검사:
docker volume inspect my-app-data
로컬 볼륨의 경우 출력은 다음과 유사합니다:
[
{
"CreatedAt": "2026-05-23T10:00:00Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my-app-data/_data",
"Name": "my-app-data",
"Options": null,
"Scope": "local"
}
]
Mountpoint는 문제 해결에 유용하지만, 컨테이너가 볼륨을 사용하는 동안에는 해당 위치의 파일을 직접 편집하지 않는 것이 좋습니다. 애플리케이션이나 제어된 유지 관리 컨테이너가 데이터를 쓰도록 하세요.
docker volume rm
하나 이상의 볼륨 제거:
docker volume rm my-app-data
Docker는 어떤 컨테이너(중지된 컨테이너라도)가 볼륨을 참조하고 있으면 볼륨을 제거하지 않습니다. 먼저 해당 컨테이너를 찾아 제거하세요:
docker ps -a --filter volume=my-app-data
docker rm <컨테이너-이름-또는-ID>
docker volume rm my-app-data
이 명령어는 볼륨 데이터를 삭제합니다. 데이터가 중요하다면 먼저 백업하세요.
docker volume prune
Prune은 사용되지 않는 로컬 볼륨을 제거합니다. 현재 Docker 버전에서 docker volume prune은 기본적으로 사용되지 않는 익명 볼륨을 제거합니다. 사용되지 않는 명명된 볼륨도 제거하려면 --all을 사용하세요.
사용되지 않는 익명 볼륨 제거:
docker volume prune
확인 프롬프트 건너뛰기:
docker volume prune --force
명명된 볼륨을 포함한 모든 사용되지 않는 로컬 볼륨 제거:
docker volume prune --all
레이블을 사용하여 정리를 더 안전하게 만들기:
docker volume create --label app=myapp myapp-cache
docker volume prune --filter label=app=myapp
Prune 작업은 데이터를 영구적으로 삭제합니다. 명명된 애플리케이션 데이터를 정리하기 전에 볼륨에 무엇이 있는지 확인하세요.
컨테이너에 볼륨 마운트하기
컨테이너를 생성할 때 볼륨을 연결하세요. Docker는 명명된 볼륨이 아직 존재하지 않으면 자동으로 생성할 수 있습니다.
-v 사용
docker run --name my-postgres \
-v pgdata:/var/lib/postgresql/data \
-d postgres
여기서 pgdata는 볼륨 이름이고 /var/lib/postgresql/data는 컨테이너 내부 경로입니다.
--mount 사용
--mount는 더 명시적이며 스크립트에서 읽기 쉽습니다:
docker run --name my-redis \
--mount type=volume,source=redisdata,target=/data \
-d redis
두 형식 모두 유효합니다. 특히 추가 마운트 옵션이 있는 경우 더 명확한 키-값 구문을 원할 때 --mount를 사용하세요.
볼륨 백업 및 복원
Docker 볼륨은 영구 스토리지이지만 백업은 아닙니다. 간단한 백업 패턴은 볼륨을 마운트하고 현재 디렉토리에 아카이브를 작성하는 임시 컨테이너를 실행하는 것입니다:
docker run --rm \
-v my-app-data:/data:ro \
-v "$PWD":/backup \
alpine \
tar czf /backup/my-app-data.tgz -C /data .
빈 볼륨으로 복원:
docker volume create my-app-data-restored
docker run --rm \
-v my-app-data-restored:/data \
-v "$PWD":/backup \
alpine \
tar xzf /backup/my-app-data.tgz -C /data
데이터베이스의 경우 일관성이 중요할 때 데이터베이스 네이티브 백업 도구를 선호하세요. 라이브 데이터베이스 볼륨의 파일 시스템 아카이브는 데이터베이스가 중지되었거나 해당 백업 방법을 지원하지 않는 한 안전하지 않을 수 있습니다.
Docker 볼륨 관리 모범 사례
- 유지하려는 데이터에는 명명된 볼륨을 사용하세요.
- 애플리케이션이나 환경에 속하는 볼륨에 레이블을 지정하세요.
- 볼륨을 삭제하거나 정리하기 전에 검사하세요.
- 중요한 볼륨은 Docker 호스트 외부에 백업하세요.
- 대체할 수 없는 데이터를 익명 볼륨에만 저장하지 마세요.
- 백업뿐만 아니라 복원도 테스트하세요.
- 로컬 Docker 호스트 외부의 스토리지가 필요할 때 볼륨 드라이버를 사용하세요.
결론
유지하려는 상태에는 명명된 Docker 볼륨을 사용하고, 삭제하기 전에 검사하며, prune을 실제 데이터 손실 위험이 있는 정리 명령어로 취급하세요. 일상적인 워크플로우는 간단합니다: 볼륨을 생성하거나 Docker가 생성하도록 두고, docker run으로 마운트하고, 문제 해결 시 검사하고, 중요할 때 백업하고, 컨테이너가 참조하지 않을 때만 제거하세요.