도커(Docker) Volume이란?
- 도커(Docker)는 container 안의 파일 변경 사항을 UnionFS을 통해 관리
- UnionFS은 이미지 layer와 write layer를 합쳐 container의 데이터를 관리하는 데, container 삭제 시 write layer도 삭제 됨
- write layer에는 이미지 layer의 데이터에서 변경된 사항을 저장하므로 write layer 삭제 시 데이터가 사라짐**(데이터 휘발성)**
- Container의 데이터 휘발성 때문에 데이터를 container가 아닌 호스트에 저장할 때,
- 또는 container끼리 데이터를 공유할 때 Volume를 사용
도커(Docker) Volume 사용법 1
- 이 방법은 container의 데이터를 호스트에 유지할 때 사용할 수 있음
- 하지만 Volume이 /var/lib/docker/volumes/에 생기며 이름이 docker에서 자동으로 생성한 hash값을 사용
- container가 삭제되면 데이터를 찾기 힘들기 때문에 추천하지 않음
$ docker run -it -v /data centos /bin/bash
$ docker run -it -v (컨테이너의 volume 디렉토리) (이미지) /bin/bash
이를 통해 컨테이너를 생성 시 /var/lib/docker/volumes에 hash값을 가지는 디렉토리가 생성되고, _data 디렉토리 안에 컨테이너의 /data 디렉토리가 매핑
즉, 컨테이너에서 /data 디렉토리에 파일을 생성/삭제/변경 등의 작업을 하게되면, 호스트의 /var/lib/docker/volumes/xxxx 디렉토리에 같은 내용이 있음
도커(Docker) Volume 사용법 2 - 1
- 이 방법을 사용하면 호스트의 특정 디렉토리(or 파일)을 container와 매핑
- Volume의 위치를 사용자가 정할 수 있으므로 데이터를 찾기 쉬움
$ docker run -it -v /root/data:/data centos /bin/bash
$ docker run -it -v (호스트 디렉토리):(컨테이너의 volume 디렉토리) (이미지) /bin/bash