Docker Volume
Docker Volume(2022/05/06)
- Docker Container 데이터 보존 방법에는 Volume과 Bind Mount가 존재한다
1. Docker Volume
- 컨테이너가 삭제되어도, 그 내부의 데이터를 보존시키고 싶을 때 Volume을 이용하여 데이터를 보관하도록 한다
ex) 도커 볼륨 생성
1
2
3
4
$ docker volume create --name myvolume # myvolume이라는 이름을 가진 볼륨 생성
$ docker run -it --name myvolume_1 \
-v myvolume:/root/ \
alpine
1
/# echo hello, volume! >> /root/volume
1
2
3
$ docker run -it —name myvolume_2 \
-v myvolume:/root/ \
alpine
1
/# cat /root/volume
- -v 대신 —mount 옵션을 쓸 수도 있다.
1
2
3
4
ex)
$ docker run -it —name myvolume_1 \
--mount type=volume, source=myvolume, target=/root/ \
alpine
- myvolume이라는 볼륨이 실제 어디에 저장되는지 확인
1
$ docker inspect —type volume myvolume
→ Windows Docker Desktop에서는 /var/lib/docker/~~~는 어떻게 접근해야 하는지 모름
→ 설치환경마다 차이는 있겠으나, 기본적으로 Docker Data들은 모두 C:\Users\user\AppData\Local\Docker\wsl\data에 있는 etx4.vhdx라는 이미지 파일에 저장되어있다.
PowerShell을 열어서 etx4.xhdx를 베이스로 한 컨테이너를 열어서 접근한다.
1
2
3
$ docker run -v /:/data -it alpine
# chroot /data
# cd /var/lib/docker
1
$ ls /var/lib/docker/containers : 현재 존재하는 컨테이너 확인
1
$ ls /var/lib/docker/volumes : 현재 존재하는 볼륨 확인
참고 : https://velog.io/@ette9844/Windows10-에서-varlibdocker-찾기#:~:text=설치 환경마다 경로에,vhdx 형식으로 저장된다.
2. Bind Mount
- 호스트 OS쪽에 원하는 경로를 지정하여, 그 경로에 원하는 데이터들을 보존한다
1
2
3
4
5
6
7
8
9
ex)
$ docker run -d \
--name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v C:\Users\hyung\Documents\wordpress_db:/var/lib/mysql \
mysql:5.7
1
2
3
4
5
6
7
ex2)
$ docker run -d \
--name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
—mount type=bind, source=C:\Users\hyung\Documents\wordpress_db, target=/var/lib/mysql \
mysql:5.7
유의사항 :
1) Windows 진행 시 PowerShell을 이용할 것
2) PowerShell에서의 줄바꿈 문자는 ` 이다.
참고 https://docs.docker.com/storage/volumes/ https://docs.docker.com/storage/bind-mounts/
3. Volume Container
- 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 것을 말한다
- container 생성 시, —volumes-from 옵션을 설정하면 -v 또는 —volume 옵션을 적용한 컨테이너의 볼륨 디렉터리 공유가 가능하다.
ex) txt 파일 생성을 이용한 볼륨 컨테이너
1) Windows 상의 가상 리눅스 환경으로 접근한다. (WSL2가 설치되어 있음)
1
2
3
$ docker run -v /:/data -it alpine
$ root@@842db9ad4579:~/
2) 볼륨으로 사용될 컨테이너와, 추가 컨테이너 2개를 생성 —volumes-from을 이용해 컨테이너를 볼륨처럼 사용한다.
1
2
3
$ docker run -itd --name vol_container -v /root/volumes:/root alpine
$ docker run -itd --name vol_test1 —volumes-from vol_container alpine
$ docker run -itd --name vol_test2 —volumes-from vol_container alpine
3) 이미지에 원래 존재하던 디렉터리에 호스트 볼륨을 공유하면 컨테이너의 디렉터리 자체가 덮어 씌워짐
1
2
3
4
$ docker exec -it vol_test1 touch /root/happy.txt
$ ls
$ docker exec -it vol_test2 ls /root
$ docker exec -it vol_container ls /root
4) world.txt를 추가 생성
1
2
3
4
$ docker exec -it vol_container touch /root/world.txt
$ docker exec -it vol_test2 ls /root
$ docker exec -it vol_test1 ls /root
$ ls
This post is licensed under CC BY 4.0 by the author.