컨테이너와 이미지의 기본 원리는 이미지는 읽기 전용 파일로 사용되고 컨테이너는 이 위에 컨테이너 레이어를 생성해서 컨테이너의 고유 공간을 생성하는 것이지만 실제로 컨테이너 내부에서 읽기, 쓰기 작업이 일어날 때 드라이버에 따라 Copy on Write(CoW) 혹은 Redirect-on-Write(RoW) 개념을 사용한다.
스냅숏은 원본 파일은 읽기 전용으로 사용하고 이 파일이 변경되면 새로운 공간을 할당하는 것인데 스토리지를 스냅숏으로 만들면 스냅숏 안에 파일이 어디에 저장되어 있는지가 목록으로 저장된다. 이 스냅숏을 사용하다 파일 안에 변화가 생기면 변경된 내역을 따로 관리해 스냅숏을 사용한다.
CoW는 스냅숏의 파일에 쓰기 작업을 수행할 때 스냅숏 공간에 원본 파일을 복사하고 쓰기 요청을 반영한다. 이 과정에서 복사하기 위해 파일을 읽는 작업 한 번, 파일을 스냅숏 공간에 쓰고 변경된 사항을 쓰는 작업 한 번 총 두 번의 쓰기 작업이 일어나서 오버헤드가 발생한다.
RoW는 한 번의 쓰기 작업만 일어난다. 스냅숏 공간에 복사하는 게 아니라 스냅숏에 기록된 원본 파일은 스냅숏 파일로 묶은뒤 변경 사항을 새로운 장소에 할당받아 덮어쓰는 형식이다. 스냅숏 파일은 그대로 사용하고 새로운 블록은 변경사항으로써 사용하는 것이다.
간단하게 스냅숏이라는 개념으로 스냅숏 파일을 불변상태로 유지할 수 있다는 것을 체크해 두면 된다.
도커, 컨테이너에 적용하면 이미지 레이어는 각 스냅숏, 컨테이너는 스냅숏을 사용하는 변경점으로 볼 수 있다. 컨테이너 레이어엔 이전 변경 사항이 저장되어 있고 컨테이너를 이미지로 만들면 변경된 사항이 스냅샷으로 생성되고 하나의 이미지 레이어로 존재하게 된다.
📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] : Devicemapper 드라이버 사용하기 (0) | 2022.03.01 |
---|---|
[Docker] : AUFS 드라이버 사용하기 (0) | 2022.02.28 |
[Docker] : 도커 스토리지 드라이버 변경하기 --storage-driver (0) | 2022.02.28 |
[Docker] : 도커 데몬에 보안 적용하기 --tlsverify (0) | 2022.02.28 |
[Docker] : 도커 데몬 제어 명령어 -H (0) | 2022.02.27 |
댓글