0. 개요
이 글은 아래 글과 이어집니다.
https://ksb-dev.tistory.com/376
이전 글에서 pivot_root를 활용한 격리는 리소스 중복 문제가 있다는 것을 알 수 있었습니다.
이글에서 다루는 오버레이(Overlay) 파일시스템을 통해 위 문제를 해결할 수 있습니다.
오버레이는 여러 레이어를 중복해서 하나의 시스템을 만드는 방법입니다.
Lower 레이어는 ReadOnly로 변경이 발생하지 않습니다.
Upper 레이어는 Writable로 모든 변경은 이 레이어에 작성됩니다.
이를 CoW(Copy on Write)라고 합니다.
아래 그림을 만드는 실습을 해보겠습니다.
1. Layer Dir 1
myroot는 이전에 사용한 그대로 사용할 것입니다.
tree -L 2 myroot;
2. Layer Dir 2
tools 폴더를 만들어 which와 rm 명령어를 추가하겠습니다.
mkdir tools
which는 의존 라이브러리가 없으므로 바로 복사하면됩니다.
which which
ldd /bin/which
mkdir -p tools/usr/bin
cp /usr/bin/which tools/usr/bin/
rm은 의존 라이브러리까지 이동시킵니다.
which rm
ldd /bin/rm
mkdir -p tools/{bin,lib64,lib/x86_64-linux-gnu};
cp /bin/rm tools/bin/;
cp /lib/x86_64-linux-gnu/libc.so.6 tools/lib/x86_64-linux-gnu/;
cp /lib64/ld-linux-x86-64.so.2 tools/lib64/;
복사가 끝나면 아래와 같이 확인할 수 있습니다.
3. Upper Dir
오버레이를 위한 세 가지 폴더가 존재합니다.
- container : Upper Dir에 해당하면서 변경사항이 존재합니다.
- merge : 사용자가 보는 이미지의 최종 통합 뷰를 의미합니다.
- work : container의 자동 업데이트를 위해 존재합니다.
먼저 오버레이를 위한 폴더를 생성합니다.
mkdir -p rootfs/{container,work,merge};
오버레이 명령어는 아래와 같습니다.
# lowerdir : base 폴더를 설정합니다.
# upperdir : 변경사항이 저장될 폴더를 설정합니다.
# work : upperdir의 자동 변경을 위한 폴더를 설정합니다.
# rootfs/merge : 통합 뷰를 제공하는 폴더를 설정합니다.
mount -t overlay overlay -o lowerdir=tools:myroot,upperdir=rootfs/container,workdir=rootfs/work rootfs/merge
오버레이 마운트가 성공하니 rm, which가 생성되어 있는 것을 보실 수 있습니다.
폴더 구조는 아래와 같습니다.
tree -L 2 rootfs
escape_chroot를 삭제하면 변경사항이 container에 저장됩니다.
rm rootfs/merge/escape_chroot
tree -L 2 rootfs
레이어 이미지가 아닌 myroot를 조회하면 원본은 변경되지 않음을 알 수 있습니다.
tree -L 2 myroot;
rootfs/merge가 마운트되어 있기 때문에 마운트를 해제합니다.
umount rootfs/merge
'삽질' 카테고리의 다른 글
도커 없이 컨테이너 만들기 - 8 (0) | 2024.08.23 |
---|---|
도커 없이 컨테이너 만들기 - 7 (0) | 2024.08.23 |
도커 없이 컨테이너 만들기 - 5 (0) | 2024.08.23 |
도커 없이 컨테이너 만들기 - 4 (0) | 2024.08.23 |
도커 없이 컨테이너 만들기 - 3 (0) | 2024.08.19 |