Docker 좀더 활용하기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

Docker 데이터 볼륨 사용하기

Docker 데이터 볼륨은 데이터를 컨테이너가 아닌 호스트에 저장하는 방식입니다. 따라서 데이터볼륨은 컨테이너끼리 데이터를 공유할 때 활용할 수 있습니다.

Docker 컨테이너 안의 파일 변경 사항은 Union File System에 의해 관리됩니다. 하지만 데이터 볼륨은 Union File System을 통하지 않고 바로 호스트에 저장됩니다. 따라서 docker commit 명령을 통해 이미지로 생성해도 데이터 볼륨의 변경 사항은 이미지에 포함되지 않습니다.


그림 6-5 Docker 데이터 볼륨

다음 명령을 입력하면 컨테이너 안의 /data 디렉터리가 데이터 볼륨으로 설정됩니다. 컨테이너의 Bash 셸이 실행되면 /data 디렉터리로 이동한 뒤 hello라는 빈 파일을 생성합니다. 그리고 exit를 입력하여 Bash 셸에서 빠져나옵니다.

$ sudo docker run -i -t --name hello-volume -v /data ubuntu /bin/bash
root@019265a6920f:/# cd /data
root@019265a6920f:/data# touch hello
root@019265a6920f:/data# exit

데이터 볼륨 옵션은 -v <컨테이너 디렉터리> 형식입니다.

docker inspect 명령으로 hello-volume 컨테이너의 데이터 볼륨 경로를 확인합니다.

$ sudo docker inspect -f "{{ .Volumes }}" hello-volume
map[/data:/var/lib/docker/vfs/dir/0e3cacb43f11d42b4a6f186198e3e2c812a8ff62c0ab7472d18e1a9735093ae1]

ls 명령으로 앞에서 알아낸 디렉터리(/var/lib/docker/vfs/dir/xxxx)안의 파일 목록을 출력합니다. 이 디렉터리는 컨테이너를 생성할 때마다 함께 생성됩니다.

$ sudo ls /var/lib/docker/vfs/dir/0e3cacb43f11d42b4a6f186198e3e2c812a8ff62c0ab7472d18e1a9735093ae1
hello

앞에서 생성한 hello 파일이 보입니다. 이 디렉터리에 파일을 생성하면 컨테이너 안에서도 사용할 수 있습니다.

이번에는 데이터 볼륨을 사용하여 컨테이너끼리 데이터를 공유해보겠습니다.


그림 6-6 Docker 데이터 볼륨으로 데이터 공유

다음 명령을 실행하여 컨테이너를 생성하고 데이터 볼륨을 설정합니다. 컨테이너의 Bash 셸이 실행되면 /data 디렉터리로 이동한 뒤 world라는 빈 파일을 생성합니다. 그리고 exit를 입력하여 Bash 셸에서 빠져나옵니다.

$ sudo docker run -i -t --name hello-volume1 -v /root/data:/data ubuntu /bin/bash
root@f7baf3abefee:/# cd /data
root@f7baf3abefee:/data# touch world
root@f7baf3abefee:/data# exit

데이터 볼륨 옵션은 -v <호스트 디렉터리>:<컨테이너 디렉터리> 형식입니다. 여기서는 호스트의 /root/data 디렉터리를 Docker 컨테이너의 /data 디렉터리에 연결합니다.

/root/data 디렉터리의 파일 목록을 출력합니다.

$ sudo ls /root/data
world

앞에서 생성한 world 파일이 보입니다.

이제 두 번째 컨테이너를 생성합니다. 컨테이너의 Bash 셸이 실행되면 /data 디렉터리의 파일 목록을 출력합니다.

$ sudo docker run -i -t --name hello-volume2 -v /root/data:/data ubuntu /bin/bash
root@af5a7bdb3e5a:/# ls /data
world

앞에서 생성한 world 파일이 hello-volume2 파일에서도 보입니다. /data 디렉터리에 파일을 생성하면 호스트 및 hello-volume1 컨테이너에서도 사용할 수 있습니다. 이렇게 데이터 볼륨 설정을 통해 컨테이너끼리 데이터를 공유할 수 있습니다.

디렉터리뿐만 아니라 호스트의 파일 하나만 컨테이너에 연결할 수도 있습니다.

$ sudo docker run -i -t --name hello-volume -v /root/hello.txt:/root/hello.txt \
    ubuntu /bin/bash

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014