개요
기본적으로 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/