Docker storage driver

  1. layered architecture

    • 각 layer에서는 이전 layer의 변경 사항만을 저장함
    • 이를 통해 동일한 layer는 다시 생성하지 않고 1번을 가져와 진행
    • image를 빨리 생성, 디스크 공간 절약

    • contianer에 의해 생성된 data는 layer 6에 저장
    • container가 작동 중일 때만 write 가능하며 container 삭제시 같이 삭제됨
    • image layer의 파일은 이미 build 되었기 때문에 변경 불가능, 읽기 전용
    • COPY-ON-WRITE을 통해 image layer 내부 file을 contianer layer에 저장하여 수정함
  2. volume
    • container에서 생성된 data를 보존하기 위한 방법
    1. /var/lib/docker/volumes : 내장된 volumes directory (volume mounting)
      • docker volume create <data_volume>
      • /var/lib/docker/volumes 생성
      • docker run -v <data_volume>:/var/lib/<myubuntu> <ubuntu>
      • 이 때 은 /var/lib/docker/volumes directory 안에 있는 directory 여야한다.
      • create 안써도 -v 사용하면 자동으로 directory 생성해줌
    2. 외장 storage 이용 (bind mounting)
      • docker run -v <외장 storage path>:/var/lib/<myubuntu> <ubuntu>
    3. 요즘엔 -v 안쓰고 --mount 사용
      • docker run --mount type=bind, source=/data/mysql, target=/var/lib/mysql mysql
      • type : volume or bind
      • source : host의 위치
      • target : container의 위치
  3. storage driver
    • storage driver를 통해 layered architecture를 구현하고 이를 통해 storage도 관리
    • layer 생성, layer에 관련된 file을 유지
    • AUFS, ZFS, BTRF…

실습

  1. docker 설치 시 자동으로 설치되는 파일 확인
    • sudo ls -l /var/lib/docker
    • /var/lib/docker/containers 안에 container ID에 해당하는 폴더 존재
  2. docker storage 및 docker 정보 확인
    • docker info | more
  3. image 설치 과정 확인
    • docker histroy <image>
  4. image의 disk 차지 용량, 공유 용량(같은 layer) 확인
    • docker system df -v