Post

Docker Volume

Docker Volume(2022/05/06)

  • Docker Container 데이터 보존 방법에는 Volume과 Bind Mount가 존재한다

1. Docker Volume

  • 컨테이너가 삭제되어도, 그 내부의 데이터를 보존시키고 싶을 때 Volume을 이용하여 데이터를 보관하도록 한다

image

image

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

image

  • -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

image

→ Windows Docker Desktop에서는 /var/lib/docker/~~~는 어떻게 접근해야 하는지 모름

→ 설치환경마다 차이는 있겠으나, 기본적으로 Docker Data들은 모두 C:\Users\user\AppData\Local\Docker\wsl\data에 있는 etx4.vhdx라는 이미지 파일에 저장되어있다.

image

PowerShell을 열어서 etx4.xhdx를 베이스로 한 컨테이너를 열어서 접근한다.

1
2
3
$ docker run -v /:/data -it alpine
# chroot /data
# cd /var/lib/docker
1
$ ls /var/lib/docker/containers : 현재 존재하는 컨테이너 확인

image

1
$ ls /var/lib/docker/volumes : 현재 존재하는 볼륨 확인

image

참고 : https://velog.io/@ette9844/Windows10-에서-varlibdocker-찾기#:~:text=설치 환경마다 경로에,vhdx 형식으로 저장된다.

참고 : https://stackoverflow.com/questions/60408574/how-to-access-var-lib-docker-in-windows-10-docker-desktop

2. Bind Mount

  • 호스트 OS쪽에 원하는 경로를 지정하여, 그 경로에 원하는 데이터들을 보존한다

image

image

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

image

유의사항 :

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 옵션을 적용한 컨테이너의 볼륨 디렉터리 공유가 가능하다.

image

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

image

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

image

This post is licensed under CC BY 4.0 by the author.