https://docs.docker.com/storage/volumes/
Volumes
Volume이란 Docker 컨테이너에서 생성하고 사용하는 데이터를 지속하기 위해 선호되는 메커니즘이다. 이외 다르게 bind mount는 디렉토리 구조와 호스트 머신의 OS에 따라 달라지지만, volume은 완전히 도커에서 관리된다. 볼륨은 bind mounts보다 몇 가지 장점이 존재한다.
- bind mount보다 백업 또는 마이그레이션이 더 쉽다.
- Docker CLI 명령 또는 Docker API를 통해 관리 가능하다.
- Linux, Windows 모든 컨테이너에서 동작한다
- 여러 컨테이너들 사이에서 볼륨을 좀 더 안전하게 공유가능하다.
- 볼륨 드라이버를 사용하면 원격 호스트 또는 클라우드 제공업체에 볼륨을 저장, 암호화, 기타 기능을 추가할 수 있다.
- 새로운 볼륨은 컨테이너에 의해 콘텐츠가 미리 채워질 수 있다.
- Docker Desktop의 볼륨은 Mac 및 Windows 호스트의 bind mount보다 훨씬 높은 성능을 제공한다.
또한 Volume은 컨테이너의 writable layer에 데이터를 유지하는 것보다 더 나은 선택인데, 이는 volume은 컨테이너의 사이즈를 증가시키지 않고 컨테이너의 라이프 사이클의 바깥에 존재하기 때문이다.
만약 지속될 데이터가 아닌 임시데이터들을 컨테이너에서 생성하게 된다면 tmpfs mout 사용을 고려해보라고 한다.
-v 또는 --mount 플래그 선택하기
일반적으로 --mount는 더 명시적이고 장황하다. 큰 차이점은 -v 구문은 모든 옵션을 한 필드에 결합하지만, --mount 구문은 옵션을 분리한다. 다음은 각 플래그의 syntax를 비교한 것이다.
만약 볼륨 드라이버 옵션 지정이 필요하다면, --mount를 사용해야 한다.
- -v, --volume: 세 가지의 필드로 구성되어있으며 ':' 콜론 문자로 분리되어있다. 필드는 올바른 순서로 정렬되어야 하며 각 필드의 의미는 명확하지 않다.
- 명명된 볼륨의 경우 첫 번째 필드는 볼륨의 이름이고 특정 호스트 시스템에서 고유하다. 익명 볼륨은 첫 번째 필드는 생략된다.
- 두 번째 필드는 컨테이너에 마운트 될 파일 또는 디렉토리의 경로이다.
- 세 번째 필드는 선택 사항이며 쉼표로 구분된 옵션 목록이다.
- --mount: 여러 개의 key-value 쌍으로 이루어져 있으며, ','콤마로 분리되어 있고 각각 <key>=<value> 튜플로 구성되어 있다. --mount는 -v 또는 --volume보다 뭐가 많아 보이지만 키의 순서는 중요하지 않으며 플래그의 값을 좀 더 이해하기 쉽다.
- mount의 종류에는 bind, volume, tmpfs가 있다. 해당 공식문서에서는 volume에 대한 설명이므로 volume에 대해서만 설명이 된다.
- destination은 파일 또는 디렉토리가 컨테이너에서 마운트되는 위치의 경로를 값으로 사용하며 destination, dst, target으로 지정할 수 있다.
- readonly 옵션이 있으면 바인드 마운트가 컨테이너에 읽기 전용으로 마운트된다. readonly, ro 옵션으로 지정가능하다.
- 볼륨 옵션은 두 번 이상 지정할 수 있으며 key-value 쌍을 사용한다.
볼륨 생성하고 관리하기
볼륨 생성
docker volume create my-vol
볼륨 확인
docker volume ls
local my-vol
볼륨 상세정보 확인하기
docker inspect my-vol
[
{
"CreatedAt": "2024-06-10T23:08:26+09:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": null,
"Scope": "local"
}
]
볼륨 삭제하기
docker volume rm my-vol
볼륨이 있는 컨테이너 시작 예제
존재하지 않는 볼륨으로 컨테이너를 시작하면, Docker는 volume을 자동으로 생성한다. 다음 예제는 컨테이너의 /app/ 경로에 myvol2 볼륨을 마운트하는 예제이다. -v, --mount 둘 다 같은 결과를 생성한다.
docker run -d \
--name devtest \
-v myvol2:/app \
nginx:latest
docker run -d \
--name devtest \
--mount source=myvol2,target=/app \
nginx:latest
https://devops.tutorials24x7.com/blog/how-to-change-docker-data-path-on-windows-10
https://docs.docker.com/storage/volumes/
https://stackoverflow.com/questions/43181654/locating-data-volumes-in-docker-desktop-windows
'Docker' 카테고리의 다른 글
[Docker, Ubuntu 22.04] 도커 설치부터 Nvidia-toolkit까지 (0) | 2024.01.05 |
---|---|
[Docker, WSL2] 로컬 컴퓨터의 컨테이너 VScode로 접속 (1) | 2023.10.31 |
[Docker, WSL2] docker: Error response from daemon: failed to create task for container: failed to create shim task: (0) | 2023.10.31 |
[Docker] 컨테이너에 ssh로 접속하기 (0) | 2023.09.26 |