콤퓨우터/필기: KodeKloud CKA 강의

184-185. Storage in Docker and Volume Driver Plugins

파란화면 2024. 5. 17. 00:41
반응형

Storage In Docker

기본적으로 Docker는 /var/lib/docker 하위에 모든 데이터를 보관한다

  • aufs
  • containers
  • image
  • volumes

Docker (OCI) Image는 Layered Architecture로 되어 있다.

  • Dockerfile의 각 line은 기존 이미지 위에 새로운 layer를 생성한다.
FROM Ubuntu
RUN apt-get update && apt-get -y install python
RUN pip install flask flask-mysql
COPY . /opt/source-code
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
  • Layer5: 엔트리포인트 변경 (0B)
  • Layer4: 복사된 소스코드 (229B)
  • Layer3: pip 패키지 설치 내역 (6.3MiB)
  • Layer2: APT 업데이트 및 설치된 내역 (306MiB)
  • Layer1: Ubuntu Base Image (120MiB)

만약 이것과 매우 비슷한 Dockerfile로 이미지를 빌드한다면 어떨까?

FROM Ubuntu
RUN apt-get update && apt-get -y install python
RUN pip install flask flask-mysql
COPY . /opt/source-code2
ENTRYPOINT FLASK_APP=/opt/source-code2/app.py flask run

이 경우 Layer 3까지는 위의 Dockerfile와 동일한 구조를 공유하므로, Docker는 3개의 Layer를 재사용한다.

docker run을 해서 이렇게 만들어진 이미지를 구동하면, 그 위에 Container Layer를 새로 생성한다.

  • 이미지 레이어와는 달리 R/W가 가능하지만, 이 레이어의 수명은 컨테이너의 수명을 따라간다.
  • 하위에 있는 레이어는 R/O이다: 고정된 상태
    • 그렇다고 컨테이너 실행 중에 하위 레이어에 있는 데이터를 수정할 수 없는 것은 아니다.
      • 예를 들어 위의 케이스에서는 컨테이너 실행 중에 vi /opt/source-code/app.py로 app.py의 내용을 바꿀 수 있다.
      • 하지만, 새로 만들어진 Container Layer에 수정된 app.py의 내용이 저장되는 것이지 실제로 이미지파일의 내용이 변하는 것은 아니다.
        • Copy-on-write

Persistant storage: Volume

예를 들어 MySQL image를 쓴다고 하면, docker volume create data_volume으로 MySQL 서버 데이터를 저장할 volume을 만든 뒤, 컨테이너에 마운트하여 이 볼륨을 사용할 수 있다.

  • docker run -v data_volume:/var/lib/mysql mysql
    • /var/lib/docker/volumes/data_volume에 저장
    • (Volume Mounting)

외부 volume은 꼭 /var/lib/docker/volumes 하위에 있지 않아도 된다.

  • docker run -v /data/mysql:/var/lib/mysql mysql
  • (Bind Mounting)

주: -v 옵션은 deprecated되었다, --mount 명령이 권장됨

Storage Drivers

Layered Architecture의 유지, Writeable layer의 생성, Copy-and-Write를 위한 적절한 파일 이동 등등을 해 주는 친구를 Storage Driver라고 한다.

  • AUFS (Ubuntu 기본값)
  • Device Mapper
  • ZFS
  • BTRFS 등등...

Volume Drivers

Volume은 Storage Driver에 의해 처리되지 않는다

  • Volume Driver가 따로 존재
    • local
    • Microsoft Azure File Storage
    • gce-docker
    • VMWare vSphere Storage...
반응형