도커 볼륨은 컨테이너의 UFS(union file system)가 아닌 디렉토리로
컨테이너에 바인드 마운틴된(bind mounted) 호스트의 일반 디텍토리를 의미한다.
볼륨 초기설정은 세가지 방법이 존재한다.
■ -v 를 이용한 볼륨 설정
# docker run -i -t --name volume-container -v /data debian /bin/bash root@49340c1e5df1:/#
컨테이너의 내부에 /data 디렉토리가 볼륨으로 만들어짐.
/data 디렉토리 내부의 모든 파일은 볼륨으로 복사.
위치 확인을 위한 호스트에서 docker inspect 을 실행하면 확인 할 수 있음.
# docker inspect -f {{.Mounts}} volume-container [{volume 04605f0875bfd694165292622c72ab21... /var/lib/docker/volumes/04605f0875bfd694165292622c72ab21f09934bc04e6f39ee6440cd8f8992883/_data /data local true }]
컨테이너의 /data 볼륨은 호스트의 /var/lib/docker/volumes/{컨테이너}/_data 디렉토리로 연결됨.
테스트를 위하여 호스트 에서 volume-test-file 빈 파일을 생성 하였다.
물론, 경로는 /var/lib/docker/volumes/{컨테이너}/_data 에서 생성.
# touch volume-test-file # ls volume-test-file # docker exec -it volume-container bash root@49340c1e5df1:/# cd /data root@49340c1e5df1:/data# ls volume-test-file
반대로 컨테이너 내에서 volume-test-container 빈 파일 생성 하였다.
역시, 경로는 /data/ 에서 생성.
# touch volume-test-container # ls volume-test-container volume-test-file # pwd /var/lib/docker/volumes/04605f0875bfd694165292622c72ab21f09934bc04e6f39ee6440cd8f8992883/_data # ls volume-test-container volume-test-file
이제 우리는 실제 운영중인 오픈소스를 Docker 기반 이미지화를 만들수 있다.
■ Dockerfile 를 이용한 볼륨설정
도커파일에서 VOLUME 설정을 이용한다.
FROM debian:wheezy VOLUME /data
■ -v HOST_DIR:CONTAINER_DIR 를 사용한 볼륨 설정
-v HOST_DIR : CONTAINER_DIR를 명시하여 호스트에서 바인딩하려는 디렉토리를 지정.
# docker run -v /home/adrian/data:/data debian ls /data
호스트의 /home/adrian/data 디렉토리를 컨테이너 의 /data로 마운트 하게 된다.
데이터 공유
-v HOST_DIR:CONTAINER_DIR 은 컨테이너들 간에 파일을 공유할 때 사용할 수 있다.
--volume-from CONTAINER를 사용하면, 역시 컨테이너들 간에 파일을 공유할 수 있다.
또한, --volume-from CONTAINER는 기존 컨테이너 생성된 볼륨도 접근 할수 있다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d663f6448875 debian "ls /data" 19 minutes ago Exited (0) 19 minutes ago dreamy_visvesvaraya eb3d8ef68b60 openproject/community:7 "/usr/src/app/docker..." 20 hours ago Exited (137) 5 hours ago openproject 8dc7e37dd863 nginx "nginx -g 'daemon of..." 22 hours ago Exited (0) 5 hours ago web # docker run -it -h NEWCONTAINER --volumes-from dreamy_visvesvaraya debian /bin/bash root@NEWCONTAINER:/# ls /data/
dreamy_visvesvaraya 현재 실행중인 볼륨을 가지고 있는지 여부와 상관없이 동작하며,
볼륨에 연결된 컨테이너가 있는한 삭제 되지 않는다.
데이터 컨테이너
일반적으로 컨테이너들간의 데이터를 공유하기 위하여,
공유용도로만 사용되는 컨테이너를 데이터 컨테이너(data containers)라 한다.
--volume-from 명령을 통해 간단하게 볼륨을 장착 할수 있다.
다음은 PostgreSQL 데이터베이스용도로만 쓰이는 컨테이너 생성임 ( --volumes-from 을 사용한 컨테이너 추가됨)
# docker run --name dbdata postgres echo "Data-only container for postgres" # docker run -d --volumes-from dbdata --name db1 postgres 09b6cbbc53a7f298ddf07d1f6a7e1ba4c20c3e8d95de3d93862a583f71764c0f