도커(Docker)에서 볼륨(Volume)은 컨테이너와 호스트 간 데이터를 공유하기 위한 기능입니다. 원래 컨테이너 내의 데이터는 컨테이너가 삭제되는 순간 아예 사라져버립니다. 컨테이너는 호스트와 연관되지 않고 데이터를 독립적으로 가지고 있기 때문이죠.
하지만 볼륨을 사용하게되면 컨테이너가 삭제되더라도 호스트에 데이터를 유지할 수 있기 때문에, 데이터의 지속성(Persistence)을 보장할 수 있습니다.
볼륨은 다양한 종류의 저장소를 사용할 수 있습니다. 도커 내장 드라이버인 local, NFS, Amazon EBS, Azure Disk 등 다양한 드라이버를 사용할 수 있습니다. 또한, 호스트 경로나 다른 컨테이너의 볼륨을 공유할 수도 있습니다.
볼륨을 생성하는 방법에는 크게 두 가지가 있습니다.
첫 번째 방법은 docker run 명령어에서 -v 옵션을 사용하여 볼륨을 생성하고 연결하는 방법입니다.
예를 들어, 호스트의 /mydata 경로를 컨테이너의 /data 경로에 연결하는 경우 다음과 같이 명령어를 입력합니다.
/mydata가 존재하지 않는 디렉토리인 경우 저절로 해당 디렉토리를 만들게 됩니다.
docker run -v /mydata:/data [이미지명]
docker run 이후 터미널을 통해 호스트의 /mydata 경로로 접근하면 컨테이너 속 /data 경로에 있던 데이터를 그대로 보실 수 있습니다.
또한 컨테이너를 삭제하더라도 이 데이터는 계속 유지되어 있습니다.
cd /mydata
ls
그렇다면 이미 존재하는 호스트의 /mydata를 새로운 컨테이너의 디렉토리와 공유하도록 하면 어떻게 될까요?
# 새로운 컨테이너 생성
# 호스트 디렉토리 /mydata에 컨테이너 디렉토리 /data를 연결
docker run -v /mydata:/data [이미지명]
그럼 호스트에서 공유된 파일이 컨테이너의 /data에서 보여지게 됩니다.
즉 호스트 /mydata의 데이터가 컨테이너 /data에 덮어씌워지게 됩니다.
두 번째 방법은 docker volume create 명령어를 사용하는 방법입니다.
이 명령어를 사용하면 볼륨을 미리 생성한 후, 컨테이너와 볼륨을 연결할 수 있습니다.
docker volume create 명령어를 사용하여 볼륨을 생성합니다. 이 때, 생성된 볼륨은 도커 호스트의 파일 시스템에 저장됩니다.
$ docker volume create myvolume
그리고나서 docker run 명령어를 사용하여 컨테이너를 생성하면서 생성한 볼륨과 연결합니다.
$ docker run -it -v myvolume:/mydata [이미지명]
컨테이너를 생성하면서, 호스트의 myvolume 볼륨을 컨테이너 내부의 /mydata 경로에 마운트합니다.
이제 컨테이너 내부에서 /mydata 경로에 파일을 생성하거나 수정하면 해당 파일은 호스트의 myvolume 볼륨에 저장됩니다.
$ echo "Hello World" > /mydata/hello.txt
그리고 다른 컨테이너 생성시 똑같이 호스트의 myvolume 볼륨을 컨테이너의 내부 디렉토리로 마운트하게 되면,
그 내부 디렉토리에서도 hello.txt 파일이 보이게 됩니다.
댓글