[Docker] docker의 용량을 차지하는 overlay2는 무엇일까?
이전에 overlay2에 용량이 가득 차 배포를 실패하는 상황이 발생하여 해결한 적이 있었다.
그런데 이 overlay2라는게 과연 무엇일까?
OverlayFS
먼저 overlay2를 알기 위해선 OverlayFS를 알 필요가 있다.
OverlayFS는 유니온 마운트 파일 시스템으로, 이를 통해 사용자는 한 파일 시스템을 다른 파일 시스템 위에 오버레이(overlay)할 수 있다. (이외에도 AUFS, Devicemapper가 있다)
OverlayFS는 overlay 또는 overlay2 중 하나를 사용한다. overlay는 커널 3.18 버전부터 기본적으로 내장되어 있으며, overlay2는 4.0부터 지원된다.
Docker를 설치하면 자동으로 사용되도록 설정되며 최신 버전의 Docker는 기본적으로 OverlayFS를 사용한다.
overlay2가 docker build와 같은 계층 관련 Docker 명령에 더 나은 성능을 제공하고 백업 파일 시스템에서 더 적은 inode를 사용하여 inode 사용 측면에서 더 효율적이다. 또 overlay는 lowerdir라는 단일화된 이미지 레이어를 사용하는 반면 overlay2는 여러 개의 레이어 구조를 지원한다. 가능하다면 overlay2를 사용하는 것이 좋다.
Copy-on-Write (CoW)
OverlayFS를 포함한 유니온 마운트 파일 시스템은 Copy-on-Write(CoW) 전략을 사용한다.
즉, 이미지는 읽기 전용으로 구성되며, 이미지의 데이터를 변경해야 하는 경우 변경된 정보를 따로 저장한다.
이후 데이터를 읽을 때는 유니온 파일 시스템을 이용해 원본과 변경된 정보를 조합해서 읽게 된다.
대표적으로, OverlayFS는 다음과 같이 두 개의 레이어가 있는 구조를 갖고 있다.
lowerdir은 읽기 전용인 이미지 레이어에 해당하고 변경되지 않는 원본 데이터를 포함한다.
upperdir는 컨테이너 레이어에 해당하고 읽기/쓰기가 가능하다. 위에서 말한 변경사항에 관련된 정보는 이 레이어에 기록된다.
이 레이어들이 결합되어(merged) 컨테이너 마운트(Container mount)에서 통합된 뷰를 생성한다.
추가적으로 AUFS는 여러 개의 이미지 레이어가 있는 구조를 갖고 있다.
좀 더 자세히 알고 싶다면 다음 글을 참고하자.
https://docker-docs.uclv.cu/storage/storagedriver/aufs-driver/
최근에는 OverlayFS2 방식을 많이 사용한다고 한다. (카카오 기술블로그 - 컨테이너 파일시스템)
(유니온 파일 시스템 구현체는 AUFS -> OverlayFS -> OverlayFS2으로 발전되었다.)
[참고]
[1] https://junstar92.tistory.com/170#1.-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84%EC%9D%98-%EC%9B%90%EB%A6%AC
[2] https://docs.redhat.com/ko/documentation/openshift_container_platform/3.11/html/scaling_and_performance_guide/comparing-overlay-graph-drivers
[3] https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/7/html/7.2_release_notes/technology-preview-file_systems#technology-preview-file_systems
[4] https://docs.docker.com/storage/storagedriver/
[5] https://docker-docs.uclv.cu/storage/storagedriver/aufs-driver/
[6] https://www.joinc.co.kr/w/man/12/docker/storage
[7] https://tech.kakaoenterprise.com/154
[8] https://tech.kakaoenterprise.com/171
[9] https://blog.naver.com/alice_k106/221530340759
'DevOps > Docker' 카테고리의 다른 글
[Docker] 디스크 용량으로 인한 배포 실패 상황 (0) | 2024.07.27 |
---|