06D. Docker 데이터 볼륨 사용하기
06D. Docker 데이터 볼륨 사용하기 관련
Docker 데이터 볼륨은 데이터를 컨테이너가 아닌 호스트에 저장하는 방식입니다. 따라서 데이터볼륨은 컨테이너끼리 데이터를 공유할 때 활용할 수 있습니다.
Docker 컨테이너 안의 파일 변경 사항은 Union File System에 의해 관리됩니다. 하지만 데이터 볼륨은 Union File System을 통하지 않고 바로 호스트에 저장됩니다. 따라서 docker commit
명령을 통해 이미지로 생성해도 데이터 볼륨의 변경 사항은 이미지에 포함되지 않습니다.
다음 명령을 입력하면 컨테이너 안의 /data
디렉터리가 데이터 볼륨으로 설정됩니다. 컨테이너의 Bash 셸이 실행되면 /data
디렉터리로 이동한 뒤 hello
라는 빈 파일을 생성합니다. 그리고 exit
를 입력하여 Bash 셸에서 빠져나옵니다.
sudo docker run -i -t --name hello-volume -v /data ubuntu /bin/bash
cd /data/
touch hello
exit
데이터 볼륨 옵션은 -v <컨테이너 디렉터리>
형식입니다.
docker inspect
명령으로 hello-volume
컨테이너의 데이터 볼륨 경로를 확인합니다.
sudo docker inspect -f "{{ .Mounts }}" hello-volume
#
# [{volume ebf7f26c7875a77fb7dbb743efa55d9da5f29dbb7d9ef77307b696223dab81f9 /var/lib/docker/volumes/ebf7f26c7875a77fb7dbb743efa55d9da5f29dbb7d9ef77307b696223dab81f9/_data /data local true }]
ls
명령으로 앞에서 알아낸 디렉터리(/var/lib/docker/vfs/dir/xxxx
)안의 파일 목록을 출력합니다. 이 디렉터리는 컨테이너를 생성할 때마다 함께 생성됩니다.
sudo ls /var/lib/docker/volumes/ebf7f26c7875a77fb7dbb743efa55d9da5f29dbb7d9ef77307b696223dab81f9/_data
#
# hello
앞에서 생성한 hello
파일이 보입니다. 이 디렉터리에 파일을 생성하면 컨테이너 안에서도 사용할 수 있습니다.
이번에는 데이터 볼륨을 사용하여 컨테이너끼리 데이터를 공유해보겠습니다.
다음 명령을 실행하여 컨테이너를 생성하고 데이터 볼륨을 설정합니다. 컨테이너의 Bash 셸이 실행되면 /data
디렉터리로 이동한 뒤 world
라는 빈 파일을 생성합니다. 그리고 exit
를 입력하여 Bash 셸에서 빠져나옵니다.
sudo docker run -i -t --name hello-volume1 -v /root/data:/data ubuntu /bin/bash
cd /data
touch world
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
ls /data
#
# world
앞에서 생성한 world
파일이 hello-volume2
파일에서도 보입니다. /data
디렉터리에 파일을 생성하면 호스트 및 hello-volume1
컨테이너에서도 사용할 수 있습니다. 이렇게 데이터 볼륨 설정을 통해 컨테이너끼리 데이터를 공유할 수 있습니다.