[Docker] 도커 볼륨 바인드 마운트 생성과 삭제

도커 볼륨의 종류

 

▼ 1. 익명 볼륨(Anonymous Volume)

명시적 이름이 없이 도커가 자체적으로 이름을 만들어서 생성합니다. 컨테이너 삭제시 볼륨도 함께 사라집니다. 컨테이너를 실행할 때만 필요한 임시 데이터라면 익명 볼륨을 사용하는 것이 좋습니다.

 

docker run -v /app/data ...
view raw blog1.bash hosted with ❤ by GitHub

 

 

 

▼ 2. 명시적 볼륨 (Managed Volume)

도커 자체적으로 관리하는 볼륨으로  컨테이너가 삭제되더라도 데이터가 유지되는 특징이 있습니다. 때문에 컨테이너끼리 쉽게 공유가 가능합니다. 운영 환경에서 데이터의 영속성을 원한다면 명시적 볼륨을 사용합니다. 또한 익명의 볼륨과 달리 DockerFile 에서 생성이 불가능합니다. -v 옵션으로만 생성이 가능하고 특정 컨테이너와 연결되어 있지 않습니다. 때문에 컨테이너 간의 공유가 가능합니다.

 

docker run -v data:/app/data ...
view raw blog2.bash hosted with ❤ by GitHub

 

 

 

▼ 3. 바인드 마운트(Bind Mount)

호스트의 특정 디렉토리를 컨테이너 내부에 마운트 하기 때문에 컨테이너가 삭제되더라도 호스트의 디렉토리는 그대로 유지가 가능합니다. 개발 환경에서 주로 사용되며 소스를 변경하면서 적용 및 테스트가 수월합니다.

 

docker run -v /path/to/code:/app/code ...
# 읽기 전용시 :ro 추가
docker run -v /path/to/code:/app/code:ro ...
view raw blog3.bash hosted with ❤ by GitHub

 

 

 

마운트 방식 특징

 

마운트 방식 경로 데이터 유지 호스트 접근 주요 사용처
명시적 볼륨 /var/lib/docker/volumes/ O (컨테이너 삭제 후에도 유지) 직접 접근 어려움 운영 환경, 데이터 공유
익명 볼륨 /var/lib/docker/volumes/<random-id>/ O (컨테이너 삭제 시 유지, 하지만 관리 어려움) 불가 임시 데이터 저장
바인드 마운트 호스트의 특정 디렉토리 (/host/path) O (컨테이너 삭제와 무관) 가능 개발 환경, 로컬 테스트

 

 

볼륨 생성, 조회, 검사 삭제

 

▼ 1. 도커 볼륨 관련 명령어

 

# 볼륨에 관련된 명령어
docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove unused local volumes
rm Remove one or more volumes
view raw blog4.bash hosted with ❤ by GitHub

 

 

 

▼ 2. 도커  볼륨 조회 - 볼륨은 도커에 의해 관리됩니다.

 

# bind mount 볼륨은 도커에 의해 관리되는 볼륨이 아니여서 표시되지 않음
docker volume ls
local 59a7abaff8d44f94177a4ddaa173d0b2d9d44eead77fa7441ac37d8cf720af16
local 3612fa9507d22cfe619b4cb5604dcd557589ff522ada09619c9d5e4b1f39b7bf
local feedback
local feedback_data
view raw blog5.bash hosted with ❤ by GitHub

 

 

 

▼ 3. 도커 볼륨 생성에 관련된 명령어

 

# 볼륨 생성에 관련된 명령어
docker volume create --help
Usage: docker volume create [OPTIONS] [VOLUME]
Create a volume
Options:
-d, --driver string Specify volume driver name (default "local")
--label list Set metadata for a volume
-o, --opt map Set driver specific options (default map[])
view raw blog6.bash hosted with ❤ by GitHub

 

 

 

▼ 4. 도커 볼륨 생성하기

 

docker volume create feedback-files
view raw blog7.bash hosted with ❤ by GitHub

 

 

▼ 5. 도커 볼륨 검사 - 마운트 포인트 (Mountpoint)는 실제 물리적 위치가 아니라 가상 머신 내부에 있는 위치입니다.

 

docker volume inspect feedback
[
{
"CreatedAt": "2025-01-24T04:48:55Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/feedback/_data",
"Name": "feedback",
"Options": null,
"Scope": "local"
}
]
```
view raw blog8.bash hosted with ❤ by GitHub

 

 

 

▼ 6. 도커 볼륨 삭제 - 사용중인 볼륨은 중지(stop)한 뒤에 제거할 수 있습니다.

 

docker volume rm feedback
view raw blog9.bash hosted with ❤ by GitHub

 

 

 

▼ 7. 사용하지 않는 모든 볼륨 제거

 

docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
3612fa9507d22cfe619b4cb5604dcd557589ff522ada09619c9d5e4b1f39b7bf
Total reclaimed space: 2.226MB
view raw blog10.bash hosted with ❤ by GitHub

 

 

 

바인드 마운트 사용시 주의할 점

 

절대 경로를 사용하는 바인드 마운트는 Dockerfile 을 생성할 때 `COPY . .` 명령을 사용하지 않아도 `/app` 위치의 전체를 마운트 한다면 아무런 문제 없이 동작할 것입니다. 하지만 프로덕션 앱을 배포할 때는 절대 경로를 사용할 것도 아니고 바인드 마운트 하는 이유도 의미가 없기 때문에 `COPY . .` 를 통해 스냅샷을 복하해야 합니다.

Designed by JB FACTORY