(**) docker volume 컨테이너

docker 를 사용할 때는 volume 컨테이너를 권장하고 있습니다. 
도대체 볼륨 컨테이너란 무얼까요?
한마디로 볼륨만 설정하고 다른 용도로 사용되지 않는 컨테이너 입니다. 
왜 이런 걸 사용할까요?
정답은 컨테이너간의 볼륨 공유와 볼륨 관리를 효율적으로 하고자 하는 목적이 강합니다. 
이전 강좌에서 컨테이너에 볼륨을 지정할 때 -v 옵션을 다음과 같이 지정하는 것을 보았습니다. 
-v [호스트 절대 경로]:[컨테이너 절대 경로] 
그런데 docker 문서를 보다 보면 다음과 같이 설정하는 것을 볼 수 있습니다. 
-v [컨테이너 절대 경로] 

예를 들면 다음과 같이 지정하는 겁니다. 
$ docker run -i -t --name test_volume -v /test busybox
이런 경우에는 컨테이너의 /test 디렉토리에 변경이 가해지 경우 
해당 변경 내용을 저장하는 호스트 측 디렉토리가 없으므로 
이 컨테이너가 중지되고 삭제 되면 해당 데이터의 내용은 모두 사라집니다. 
물론 컨테이너가 유지되는 동안 이 /test 와 연결된 호스트 측 디렉토리는 
/var/lib/docker  
측에 있습니다. 

그래서 유지되는 거죠..
일단 이렇게 만들어지 컨테이너 안에서 /test 디렉토리의 
내용을 보면 아무것도 없읍니다. 
/ # cd /test
/test # ls -al
total 8
drwxr-xr-x    2 root     root          4096 Sep 18 11:57 .
drwxr-xr-x   30 root     root          4096 Sep 18 11:57 ..
/test #

그 다음 이 볼륨 컨테이너를 쓰는 컨테이너를 하나 만들어 보죠..

$ docker run -i -t --name s --volumes-from test_volume  busybox
여기서도 내용을 보면 아무것도 없습니다. 

/ # cd /test
/test # ls -al
total 8
drwxr-xr-x    2 root     root          4096 Sep 18 11:57 .
drwxr-xr-x   30 root     root          4096 Sep 18 12:00 ..
이제 s 컨테이너에서 이 디렉토리에 파일을 하나 만들어 보죠..

/test # echo "hello test" > /test/data.txt
파일이 생성되었나 봅시다.
/test # ls
data.txt
내친김에 내용도...
/test # cat data.txt
hello test
/test #
이제 test_volume 컨테이너에서 파일이 있나 보죠..

/test # ls
data.txt

역시 내용도 확인해 보고요..
/test # cat data.txt
hello test

컨테이너와 컨테이너 끼리 데이터를 공유 하는 것을 볼 수 있습니다. 

이렇게 데이터를 저장하고 유지하기 위한 목적으로 다른 컨테이너가 
--volumes-from 옵션으로 참조하는 컨테이너를 볼륨 컨테이너라고 합니다. 

볼륨 컨테이너에 지정하는 -v 옵션은 데이터의 관리를 호스트 측에 하고 싶다면
-v [호스트 절대 경로]:[컨테이너 절대 경로] 
형식으로 설정한 후 

다른 컨테이너에서 --volumes-from 옵션 으로 사용해도 됩니다. 
이렇게 볼륨 컨테이너를 사용하면 관리의 이점이 있습니다. 
특정 볼륨 컨테이너에서 필요로 하는 저장 디렉토리를 여러개 지정하고 
다른 컨테이너에서 해당 볼륨 컨테이너만 지정하면 자동적으로 쉽게 
해당 볼륨들을 사용하게 됩니다. 
이전의 시험했던 컨테이너를 모두 지우고 
다음과 같이 여러개의 디렉토리를 가지는 볼륨 컨테이너를 하나 만듭니다. 
물론 호스트와 연동 시키기로 하는 방식으로 지정합니다. 
$ docker run --name ss -i -t -v /test:/user1 -v /test2:/user2 busybox echo "ss server start"
ss server start
$ docker ps -a
CONTAINER ID        IMAGE                       COMMAND                CREATED             STATUS                     PORTS               NAMES
1960a0fdc137        busybox:buildroot-2014.02   "echo 'ss server sta   6 seconds ago       Exited (0) 5 seconds ago                       ss


이제 이 ss 라고 이름진 볼률 컨테이너를 사용하는 컨테이너를 다음과 같이 실행하여 /user1 과 /user2 가 있나 봅니다. 
$ docker run --name r1 --volumes-from ss -i -t busybox
/ # ls -al /user1
total 16
drwxr-xr-x    2 root     root          4096 Sep 18 10:04 .
drwxr-xr-x   31 root     root          4096 Sep 22 05:58 ..
-rw-r--r--    1 root     root             8 Sep 18 11:02 t.txt
-rw-r--r--    1 root     root             3 Sep 18 10:04 t2.txt
/ # ls -al /user2
total 12
drwxrwxrwx    2 root     root          4096 Sep 18 11:23 .
drwxr-xr-x   31 root     root          4096 Sep 22 05:58 ..
-rw-rw-r--    1 default  default         12 Sep 18 11:23 data.txt
/ #

예! 그렇습니다. 깔끔 하게 있습니다. 
물론 다른 컨테이너도 --volumes-from 을 이용해서 접근 할 수 있고 
동일한 디렉토리 구성을 가질 수 있습니다. 
이런 방식은 
데이터 컨테이너와 이미지를 조합하면 다양한 환경을 깔끔 하게 상호간에 
조합하는 강력한 관리 방식이 생기는 거죠..
이래서 볼륨 컨테이너를 사용하도록 유도 하는 겁니다