지니데비 기록 자세히보기

데브옵스/Orchestration

[Kubernetes] 53. Docker Volume - Storage Drivers

지니데비 2025. 1. 8. 14:22
728x90


docker storage는 storage drivers(저장소 드라이버)와 volume drivers(볼륨 드라이버)가 있다. 플러그인은 무엇인가?

 

docker는 /var/lib/docker 경로에 설치된다. 하위에 aufs, containers, image, volumes 폴더가 있다.

 

Image layer(docker build)

docker로 빌드할 때 dockerfile에 명시된 순서대로 레이어가 쌓인다. 다른 이미지를 빌드할 때도 마찬가지이다. 레이어가 겹겹이 쌓이는데 이전에 빌드했던 이미지와 중복되는 사항은 캐시에서 불러와서 사용하기 때문에 더 빠르다. 새로 변경된 사항만 레이어로 쌓인다. 이미지가 빌드되면 이미 빌드된 각각의 레이어는 수정할 수 없고 읽기만 가능하므로, 수정이 필요할 경우 새로 이미지를 빌드해야 한다. 앱 소스코드는 이미지 레이어에 들어간다.

 

Container layer(docker run)

docker run으로는 빌드된 이미지(읽기만 가능한) 위에 읽기와 함께 쓰기도 가능한, 새로운 레이어를 추가한다. 사용한 이미지가 같으면 모든 컨테이너의 이미지 레이어는 동일하며 컨테이너간에 공유된다.

 

Copy-On-Write 메커니즘

컨테이너에서 앱 소스코드를 수정해도 이미지는 새로 빌드되지 않았으므로 원본의 이미지는 유지되고 컨테이너 레이어에서만 수정된다. 해당 컨테이너가 삭제되면 수정한 앱 소스코드 또한 삭제된다.

 

Volumes(docker volume create data_volume)

컨테이너에서 추가하거나 수정한 데이터를 영구적으로 유지하기 위해 사용한다. 컨테이너를 생성할 때 docker run -v data_volume:/var/lib/mysql mysql 명령을 통해 이미지 레이어 중 mysql 레이어의 볼륨을 지정하여 마운트할 수 있다. 이로써 컨테이너를 삭제해도 해당 컨테이너에서 생성하거나 추가한 데이터를 docker host에 생성한 data_volume 폴더에서 확인할 수 있다. (/var/lib/docker/volumes/data_volume) 

 

docker run -v data_volume:/var/lib/mysql mysql

docker run -v data_volume2:/var/lib/mysql mysql [Volume mounting]

docker run -v /data/mysql:/var/lib/mysql mysql [Bind mounting]
==
docker run \
--mount type=bind,source=/data/mysql,target=/var/lib/mysql mysql
# source는 docker host 안이고 target은 컨테이너 안이다.

 

docker는 storage driver(저장소 드라이버)를 이용하여 복사와 쓰기를 가능하게 하고 layer architechture를 가능하게 한다.

저장소 드라이버는 AUFS, ZFS, BTRFS, Device Mapper, Overlay, Overlay2가 있다. OS에 따라 default 저장소 드라이버가 다르며 ubuntu의 경우 AUFS가 default이다.

728x90
반응형