Docker

[Docker] Volume

비번변경 2023. 7. 12. 22:15

개요

기본적으로 Docker 컨테이너 내에 저장되는 데이터는 컨테이너가 삭제될 때 휘발된다. 컨테이너 생명주기와 관계없이 데이터를 유지하기 위해서는 컨테이너 내 저장 공간을 호스트와 연결해야 하는데, Docker는 그 방법 중 하나로 Volume을 제공한다.

 

이 글에서는 Volume에 대해 정리해보려고 한다.

 

 

Volume

Volume은 컨테이너에서 생성되거나 사용되는 데이터를 유지하기 위한 방법 중 하나로, Docker가 관리하는 Host 파일 시스템의 일부에 컨테이너 데이터가 저장된다. Linux의 경우 /var/lib/docker/volume에 해당한다.

Docker CLI나 API를 통해 Volume을 관리할 수 있고 백업 또는 마이그레이션 하기 좋다.  

 

 

Volume 생성 / 조회 / 삭제

Docker CLI로 Volume을 생성하고 조회, 삭제하는 명령을 정리한다.

 

Volume 생성

docker volume create <VOLUME_NAME>

# 예시
docker volume create my-vol

 

Volume 목록 조회

docker volume ls

 

Volume 상세 정보 확인

docker volume inspect <VOLUME_NAME>

# 예시
docker volume inspect my-vol

출력의 MountPoint가 컨테이너 데이터가 저장되는 경로이다.

 

Volume 삭제

docker volume rm <VOLUME_NAME>

# 예시
docker volume rm my-vol

Volume을 삭제하면 호스트 경로도 함께 삭제되는 것을 확인할 수 있다.

 

 

Volume 사용

Volume을 이용해서 컨테이너를 실행해 본다. 컨테이너 실행 시 생성되어 있지 않는 Volume을 마운트 하면 자동으로 볼륨을 생성하고 컨테이너를 실행시킨다. volume을 컨테이너에 마운트 시킬 땐 --mount 또는 -v 옵션을 이용해 Volume 이름과 마운트 경로를 지정한다.

# --mount
docker run -d \
  --name <CONTAINER_NAME> \
  --mount source=<VOLUME_NAME>,target=</MOUNT/PATH> \
  <IMAGE_NAME>:<TAG>
  
# -v
docker run -d \
  --name <CONTAINER_NAME> \
  -v <VOLUME_NAME>:</MOUNT/PATH> \
  <IMAGE_NAME>:<TAG>
  

## 예시
docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

docker inspect 명령어로 컨테이너 정보를 확인하면 Mount 항목에서 컨테이너가 사용 중인 Volume의 정보를 확인할 수 있다.

docker inspect <CONTAINER_NAME>

실제로 컨테이너 내에서 저장한 데이터는 호스트 volume 경로에서 확인할 수 있다.

반대로 호스트의 volume 경로에서 데이터를 삭제하면 컨테이너에서도 사용할 수 없다.

실행한 컨테이너를 더 이상 사용하지 않고 데이터도 유지할 필요가 없다면 컨테이너를 중지/삭제한 후 볼륨도 삭제하면 된다.

docker container stop <CONTAINER_NAME>
docker container rm <CONTAINER_NAME>
docker volume rm <CONTAINER_NAME>

 

 

참고 문서

https://www.daleseo.com/docker-volumes-bind-mounts/

[Docker 기본(5/8)] Volume을 활용한 Data 관리

https://docs.docker.com/storage/volumes/