[Docker] 도커의 원리와 구조: 이미지 까보기
이전 포스트
https://blog.naver.com/sssang97/223162072850
이전 포스트에서도 언급했듯, Docker의 격리 기술은 대단한 가상화 기술 같은 것을 활용한게 아니라, 그냥 그렇게 보이게 하는 것일 뿐이다.
그래서 사실 도커의 이미지라는 것도 단순한 실행파일의 모음이다.
어떤 형태로 구성되어있는지 대략만 봐보겠다.
이미지 까보기
우선 까볼 이미지를 하나 다운받는다. 뭐라도 상관없다.
sudo docker pull rust

그리고 다음 명령을 실행하면, 이미지의 내용물이 해체된다.
mkdir rust_image
sudo docker export $(sudo docker create rust) | tar -C rust_image -xvf -;
docker create는 컨테이너를 실행 없이 생성만 하는 명령이고, docker export는 컨테이너의 내용물을 tar 압축파일로 반환한다. 그리고 tar는 그걸 다시 압축해제한다.
이미지 까보는데 굳이 컨테이너 생성까지 하는 이유는, 이미지는 별도의 레이어 여러 겹으로 이루어져있고 컨테이너화를 하는 시점에 비로소 merge되기 때문이다.
그 결과물로

뭐가 잔뜩 풀리는데
출력 디렉토리에 가보면, 그 내용물들로 꽉 차있을 것이다.

저게 다 rust 이미지 안에 들어있는 파일들이다!
저 파일들 중에서도 디펜던시가 따로 없는 파일들은 현재 호스트 환경에서도 정상적으로 사용이 가능하다.
docker 런타임은 이걸 그냥 대신 실행시켜주는 역할을 할 뿐이다.
chroot로 해당 디렉터리를 실행하면, 도커와 유사한 체험을 할 수 있다.
sudo chroot rust_image /bin/sh
물론 환경변수나 네트워크, 여러가지 격리가 반영되지 않기 때문에 완전히 동일하지는 않다.