CKA 강의 중 컨테이너 스토리지에 대한 내용을 정리했다.
2번 도커 파일은 1번 도커 파일과 거의 유사함
layer 1,2,3 은 동일하기 때문에 2번 파일로 빌드할 때 1,2,3 단계를 건너뜀
→ 이전 계층을 캐시해서 재사용함
이미지를 더 빠르게 만들고 디스크 공간을 효율적으로 절약 가능
image layer : read only
container layer : read & write
컨테이너 실행시 마지막 최종 레이어(container layer)를 만들게 되며, 이 레이어는 읽고 쓰기가 가능하다.
컨테이너의 애플리케이션에서 생성되는 모든 데이터(로그, 임시파일) 이 레이어에 저장된다.
컨테이너가 살아있을 때까지 이 레이어는 유지되지만, 컨테이너가 삭제되면 이 레이어와 그 내부의 모든 데이터들도 삭제된다.
컨테이너의 데이터를 영구적으로 유지하고 싶다면?
도커 볼륨을 생성하고 컨테이너 내부로 마운팅 하는 것
도커 볼륨은 일반적으로 /var/lib/docker 경로에 존재함
만약 data_volume2 라는 볼륨을 생성하지 않고 컨테이너 실행 명령을 날렸을 경우, 도커가 알아서 data_volume2 라는 볼륨을 생성한다.
도커 볼륨을 생성하지 않고 마운트 하는 방식
호스트 또는 외부 경로를 컨테이너 내부로 마운팅 하는 것
이 때 반드시 절대 경로를 사용해야 한다.
docker run -v /data/mysql:/var/lib/mysql mysql
# -v는 예전 방식
# 더 명확한 --mount 사용을 권장함
docker run \
--mount type=bind,source=/data/mysql, target=/var/lib/mysql mysql
레이어드 아키텍쳐를 유지하고 파일의 이동, 복사, 쓰기를 가능하게 하는 수행자. 이미지와 컨테이너의 스토리지를 관리한다.
종류 : AUFS, ZFS, BTRFS, Device Mapper, Overlay, Overlay2
호스트의 OS에 따라 스토리지 드라이버를 다르게 사용한다.
스토리지 드라이버마다 다른 성능과 특징이 있다고 한다.
도커 공식문서에서는 모든 리눅스에 대해 overlay2를 권장한다.
또한 device mapper는 삭제될 예정이니 다른 드라이버로 변경하라고 한다.
도커 볼륨은 storage driver가 처리하는 것이 아니라, volume driver plugin이 처리한다.
기본값은 local이지만, 그 밖의 다른 드라이버 종류가 많다.
이렇게 rexray/ebs 라는 볼륨 드라이버를 사용하도록 설정한다면,
컨테이너에서 생성되는 데이터는 aws EBS(스토리지)로 적재된다.
그러면 컨테이너가 종료되어도 생성된 데이터는 aws EBS 내부에 남게 된다.