7.1 데이터 볼륨 마운트

컨테이너에 데이터 볼륨을 마운트하는 가장 기본적인 작업부터 해보도록 하겠습니다. busybox 이미지를 이용하여 작업을 합니다.

컨테이너의 볼륨을 마운트하는 옵션으로 -v [/VolumeName]을 사용합니다. 아래와 같이 컨테이너를 시작하도록 합시다.

grouq:~ giljae$ docker run -it -v /data --name container1 busybox

container1이 시작되고 프롬프트가 표시됩니다. 프롬프트에서 아래와 같이 ls 명령을 실행합니다.

/ # ls bin data dev etc home proc root sys tmp usr var

data라는 이름의 볼륨이 표시됩니다. touch 명령어를 이용하여 file.txt 라는 파일을 생성합니다.

/ # cd data /data # touch file.txt /data # ls file.txt

지금까지 한 일은 컨테이너에 볼륨 /data를 마운트하였고, 해당 디렉토리(/data)내에 파일을 생성했습니다.

이제 exit를 입력하고 터미널로 돌아가 컨테이너를 종료합니다.

/data # exit grouq:~ giljae$

docker ps -a 를 이용하여 container1이 종료 상태인지 확인합니다.

grouq:~ giljae$ docker ps -a | grep container1 7882dab8ba00 busybox "sh" 5 minutes ago Exited (0) About a minute ago container1

이제 컨테이너를 시작할 때 docker가 수행하는 작업을 살펴보도록 하겠습니다.

grouq:~ giljae$ docker inspect container1

JSON 포맷으로 제공되고 Mounts 속성을 찾아서 살펴 봅니다. 아래는 Mounts 속성 정보입니다.

"Mounts": [ { "Type": "volume", "Name": "bf564523eed84a97674ac033f87404c5ba3c9c25221d582bdf5e00480e05370d", "Source": "/var/lib/docker/volumes/bf564523eed84a97674ac033f87404c5ba3c9c25221d582bdf5e00480e05370d/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],

볼륨(/data)을 마운트 할때 /var/lib/… 폴더를 생성 했음을 의미합니다. 이곳에 볼륨에서 만든 모든 파일이 저장됩니다. 이전에 우리는 file.txt 파일을 만들었습니다.

또한 RW 모드가 true로 설정되어 있습니다. (e.g. 읽기 및 쓰기)

컨테이너(container1)를 다시 시작하고 file.txt가 있는지 확인해봅시다.

grouq:~ giljae$ docker restart container1 container1 grouq:~ giljae$ docker attach container1 / # ls bin data dev etc home proc root sys tmp usr var / # cd data /data # ls file.txt

위에서 실행한 단계는 아래와 같습니다.

  1. 컨테이너(container1)를 다시 시작했습니다.

  2. 실행중인 컨테이너(container1)에 연결 했습니다.

  3. ls를 실행하여 볼륨(/data)가 존재하는지 확인했습니다.

  4. /data 디렉토리로 이동하여 file.txt가 있는지 확인했습니다.

데이터 볼륨을 유지하는 방법에 대해서 알게 되었습니다. 이제 컨테이너를 종료하데 컨테이너를 제거해보도록 합시다.

/data # exit grouq:~ giljae$ docker rm container1 container1 grouq:~ giljae$ docker volume ls DRIVER VOLUME NAME local 6f7b3519d129a3333d50eda99e9dcc07f502930838b166b096c7031f376a1dd3

container1을 제거했지만 데이터 볼륨이 존재함을 보여줍니다. 이것은 ghost volume입니다. 아래의 도움말을 보면 컨테이너를 제거할때 볼륨도 제거하는 -v 옵션이 존재합니다.

grouq:~ giljae$ docker rm --help Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] Remove one or more containers Options: -f, --force Force the removal of a running container (uses SIGKILL) -l, --link Remove the specified link -v, --volumes Remove the volumes associated with the container

연습:

동일한 /data 볼륨으로 다른 컨테이너를 시작하면 어떻게 될까요? 파일이 여전히 존재할까요? 아니면 각 컨테이너에 고유한 파일 시스템이 있을까요? 확인해보세요.