[Docker] 2. 도커 볼륨

sightstudio

·

2020. 9. 6. 01:18

또커

 

도커 볼륨이 무엇인지 제대로 이해하기 위해서는

먼저 Docker의 파일 시스템의 작동 방식을 정리 할 필요가 있습니다.

 

Docker Image는 일련의 Read Only Layer 로 구성되어있습니다.

컨테이너가 시작될 때, Read Only Layer 맨 위에 Read Write Layer를 추가합니다.

 

실행중인 컨테이너가 기존 파일을 수정하는 경우,

파일은 Read Only Layer에서 맨 위의  Read Write Layer로 복사됩니다.

 

도커에서 이런 Read-Only + Read-Write Layer의 조합을 Union File System이라고 부릅니다.

 

이미지 : https://docs.docker.com/storage/storagedriver/overlayfs-driver/

Read Only Layer 는 기존 파일이 수정될 경우 파일을 숨기지만, 삭제하지 않습니다. (위의 file 2)

이후 컨테이너가 삭제되면 기존에 숨겨진 파일을 다시 가져와서 로딩하기 때문에 변경 내역이 유실됩니다.

 

이를 방지하기 위해 컨테이너의 데이터를 영속화 시킬 수 있는 방법이 몇가지 있습니다.

그중 가장 활용하기 쉬운 방법이 이번에 정리할  도커 볼륨을 활용하는 것 입니다.

 

1. Volume Mount

출저 : https://docs.docker.com/storage/volumes/

도커 공식 문서에서 권장하는 방식입니다. /var/lib/docker/volumes/ 아래에 

도커 엔진이 관리하는 볼륨들이 생성되어 마운트하여 사용할 수 있습니다.

도커 엔진이 관리하기 때문에 관리 측면에서 유리합니다.

- Tutorial

1. 다음과 같이 docker volume을 생성해줍니다.

생성된 볼륨 목록은 docker volume ls 명령어를 통해 볼 수 있고,

docker volume inspect 명령어를 통해 세부 내역을 볼 수 있습니다.

 

우리가 예상한 대로 /var/lib/docker/volumes 안에 데이터가 생성된 걸 확인할 수 있습니다.

이렇게 생성된 볼륨은 컨테이너 시작시 -v 옵션을 통해 마운트할 수 있습니다.

기존에 호스트에 있는 파일을 마운트 하는것도  위와 같이 작동합니다.

 

예시) 

docker run -d             \
--name devtest          \    
-v volume-sight:/app \
nginx:latest

2. Bind Mount

출저 : https://docs.docker.com/storage/bind-mounts/

Bind Mount를 사용하면 호스트의 파일 또는 디렉토리가 상대경로로 참조되어 컨테이너에 마운트됩니다. 

도커 초창기부터 사용된 방식이며, 이 파일들은 도커 엔진이 관리하지 않기 때문에

위의 Volume Mount 에 비해 기능이 제한됩니다. 또한 호스트상에서 도커 외에 다른 프로세스가

마운트된 공간에 접근 할 수 있기 때문에 격리된 환경을 만들지 못한다는 단점이 있습니다.

 

 

바인드 마운트를 사용하려면 볼륨 이름대신 host의 경로를 입력해주면 사용가능합니다.

볼륨을 사용하는것이 아니기에 당연히 docker volume ls 등으로 확인할 수 없습니다.

 

volume에 없다

컨테이너를 inspect 해보면 다음과 같이 경로가 호스트에 바인딩 된 걸 확인 할 수 있습니다.

(위의 docker volume inspect와 혼동 주의)

예시) 

docker run -d -it            \
--name devtest              \
-v "$(pwd)"/target:/app  \
nginx:latest

 

3. tmpfs[ Linux 한정 ]

출저 : https://docs.docker.com/storage/tmpfs/

여기서 리눅스 한정이라는 뜻은, Host OS가 리눅스 계열이여야한다는 뜻입니다.

즉 docker for windows, docker for mac 유저는 위의 기능을 사용할 수 없습니다.

 

tmpfs는 temporary filesystem의 약자로, 파일 시스템대신 메모리에 저장하는 방식을 말합니다.

가장 큰 특징은 앞선 두 방식과 달리 tmpfs 컨테이너들 사이에서 마운트를 공유할 수 없다는 점 입니다.

컨테이너에서 유지하지 않으려는 중요한 파일을 임시로 저장하는 데 유용합니다.

 

예시)

docker run -d -it \
--name tmptest \
--tmpfs /app \
nginx:latest

 

 

4. 마무리

도커 볼륨을 통해 도커의 컨테이너 데이터를 영속화하는 방법을 알아 보았습니다.

평소에는 2번 bind-mount이 제일 편했기 때문에 1번을 잘 쓰지 않았는데,

도커에서는 볼륨 마운트를 추천하는군요. 더 공부해야겠습니다.

 

 

http://www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com