본문 바로가기
IT/Docker

Docker Container tutorial (도커 컨테이너 매뉴얼) 2-5.명령어 (volume)

by halizy 2018. 7. 14.


이번 포스팅은 기본적으로 docker 운영에 있어서 사용되는 명령어에 대해 다뤄보았습니다.

문의 사항은 댓글로 남겨주시면 성심성의껏 답변드리도록 하겠습니다




Docker command (Volume)




호스트 데이터 볼륨 사용 (-v)


# 데이터볼륨은 데이터를 컨테이너가 아닌 호스트에 저장하는 방식

# 컨테이너안의 파일은 UnionFS로 관리되지만 (https://en.wikipedia.org/wiki/UnionFS)

# 데이터볼륨을 사용하면 UnionFS를 통하지 않고 바로 호스트에 저장됨

# 컨테이너들끼리의 파일 공유에 활용

# 아래는 데이터볼륨을 사용하는 예제

# -v 옵션없이 컨테이너를 실행시키면 


$ docker run -i -t --name hello-no-volume ubuntu /bin/bash 


  root@da83f5211e54:/# df -h

 


Filesystem              Size UsedAvailUse%Mounted on
rootfs                29G 8.9G  19G 33%/
none                 29G 8.9G  19G 33%/
tmpfs                1.5G    1.5G  0%/dev
shm                 64M    0  64M  0%/dev/shm
tmpfs                1.5G    1.5G  0%/sys/fs/cgroup

/dev/mapper/host--01--vg-root 

29G 8.9G  19G 33%

/etc/host

tmpfs                1.5G    1.5G  0%/proc/kcore
tmpfs                1.5G    1.5G  0%/proc/latency_stats
tmpfs                1.5G    1.5G  0%/proc/timer_stats

# -v 옵션으로 데이터볼륨을 사용하게 하면 /data가 있고 이 경로에 저장된 데이터는 호스트에 저장됨.
$ docker run -i -t --name hello-volume -v /data ubuntu /bin/bash
  root@b3d49d3d7fdf:/# df -h
Filesystem              Size UsedAvailUse%Mounted on
rootfs                29G 8.9G  19G 33%/
none                 29G 8.9G  19G 33%/
tmpfs                1.5G    1.5G  0%/dev
shm                 64M    0  64M  0%/dev/shm
tmpfs                1.5G    1.5G  0%/sys/fs/cgroup

/dev/mapper/host--01--vg-root 

29G 8.9G  19G 33%/data
tmpfs                1.5G    1.5G  0%/proc/kcore
tmpfs                1.5G    1.5G  0%/proc/latency_stats
tmpfs                1.5G    1.5G  0%/proc/timer_stats
 root@b3d49d3d7fdf:/# touch /data/blabla
# 호스트 어디에 파일이 쓰여졌는지 확인은
$ docker inspect -f "{{ .Mounts }}" hello-volume
[{9f0e7c3c6b212ff157b5f194ce450558073aa82a55071ef22aeda7c6092cde1f /var/lib/docker/volumes/9f0e7c3c6b212ff157b5f194ce450558073aa82a55071ef22aeda7c6092cde1f/_data /data local  true}]
$ sudo ls /var/lib/docker/volumes/9f0e7c3c6b212ff157b5f194ce450558073aa82a55071ef22aeda7c6092cde1f/_data
blabla
# 호스트의 특정경로를 지정할수도 있고, 두 컨테이너에서 데이터볼륨을 공유할 수도 있다.
#   -v /root/data:/data => 호스트경로:컨테이너경로
$ docker run -i -t --name hello-volume1 -v /root/data:/data ubuntu /bin/bash
root@5085cf7c19a7:/# exit
$ docker run -i -t --name hello-volume2 -v /root/data:/data ubuntu /bin/bash
root@052c33a4416e:/# exit
$ docker start hello-volume1
$ docker start hello-volume2
$ docker attach hello-volume1
touch /data/hello01
$ docker attach hello-volume2
touch /data/hello02
$ sudo ls /root/data
# 거꾸로 호스트에서 파일을 쓰고 컨테이너에서 사용할수도 있다.
  root@host:~/data# touch host
$ docker start hello-volume2
$ docker attach hello-volume2
  root@052c33a4416e:/# ls /data
 hello01  hello02  host



데이터 볼륨 컨테이너 사용 (--volume-from)


# 데이터볼륨을 이용해 호스트-컨테이너, 컨테이너-컨테이너의 디렉토리 공유를 할수도 있지만

# 데이터볼륨컨테이너를 이용해서 할수도 있음


1. 데이터볼륨컨테이너생성


$ docker run -i -t --name volume_container -v /root/data:/data ubuntu /bin/bash


   root@e8a8a81fe700:/# 상태에서 ctrl+p 또는 ctrl+q해 컨테이너를 실행시킨채로 빠져나옴


2. 일반컨테이너생성후 위 데이터볼륨컨테이너에 연결


$ docker run -i -t --volumes-from volume_container --name hello1 ubuntu /bin/bash


   root@54eeca9fd57b:/# df -h


Filesystem               Size  Used Avail Use% Mounted on
rootfs                 29G  8.9G   19G  33% /
none                  29G  8.9G   19G  33% /
tmpfs                 1.5G     1.5G   0% /dev
shm                  64M     0   64M   0% /dev/shm
tmpfs                 1.5G     1.5G   0% /sys/fs/cgroup

/dev/mapper/host--01--vg-root 

29G  8.9G   19G  33% /data
tmpfs                 1.5G     1.5G   0% /proc/kcore
tmpfs                 1.5G     1.5G   0% /proc/latency_stats
tmpfs                 1.5G     1.5G   0% /proc/timer_stats



   root@54eeca9fd57b:/# touch /data/written_hello1


   root@54eeca9fd57b:/# exit


3. 일반컨테이너 하나 더 연결


$ docker run -i -t --volumes-from volume_container --name hello2 ubuntu /bin/bash


   root@6128876c89a4:/# touch /data/written_hello2


   root@6128876c89a4:/# exit


   exit


4. 볼륨컨테이너에서 데이터확인


$ docker attach volume_container


   root@e8a8a81fe700:/# ls /data


   written_hello1  written_hello2



댓글