728x90


도커(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

위의 명령어는 호스트의 /root/data 디렉토리를 container의 volume 디렉토리로 사용할 수 있도록 한다.


호스트에서 /root/data 디렉토리에 파일을 생성하게 된다면, container에서도 파일이 존재하고 사용할 수 있다.


반대의 경우(container에서 파일을 생성)에도 호스트에서 파일이 존재




도커(Docker) Volume 사용법 2 - 1


여러개의 container에서 파일을 공유하고자 할때에도 사용 가능

호스트의 같은 디렉토리(파일)을 -v옵션으로 Volume로 지정하면 같은 디렉토리(파일)를 공유


$ docker run -it --name container1 -v /root/data:/data centos /bin/bash
$ docker run -it --name container2 -v /root/data:/data centos /bin/bash

container1의 /data 디렉토리와 container2의 /data 디렉토리를 호스트의 /root/data 디렉토리와 매핑 함으로써

각 각의 container에서 호스트의 디렉토리(파일)을 공유 가능




도커(Docker) Volume 사용법 3 (파일 하나를 컨테이너에 연결)


디렉토리 뿐만 아니라 호스트의 파일 하나도 container와 매핑 가능


$ docker run -it -v /root/test.txt:/root/test.txt centos /bin/bash
$ docker run -it -v (호스트 파일):(컨테이너의 파일) centos /bin/bash







728x90

'Docker' 카테고리의 다른 글

도커(Docker)의 핵심기술  (4) 2019.05.26
도커(Docker) storage driver 변경  (0) 2018.08.23
도커(Docker) 사용법  (0) 2018.08.21
도커(Docker) 설치  (1) 2018.08.20