Docker,layer, image, aufs, parent, size, build, container, aufs, device mapper : today Key
개발자와 Sysadmin을 위해서 빌드(Build)하고, 이동(Ship)하고, 분산된 어플리케이션을 실행(Run)하기 위한 OpenPlatform인
Docker의 5번째 포스팅입니다.
지난 포스팅에 이어서 Docker의 Layer 이미지에 대한 두 번째 내용입니다.
지난 포스팅에서 나눈 이유가 길어져서 였는 데, 테스트 한지가 조금 되다보니 뒷 부분 정리한게 생각보다 길어지진 않았습니다. ^^;
물론 추후 언제라도 동일한 주제로 해당 내용은 업데이트 될 수 있습니다! ^^
그럼 먼저 Docker의 이미지에 대한 간단한 몇 가지 정리에 이어서, 지난 포스팅과 마찬가지로 테스트한 내용을 중심으로 이해해보겠습니다.
다음 포스팅도 대략적으로 50% 이상 써 놓은 상태여서 다음 포스팅까지는 멀지 않은 시일내에 업데이트 하도록 하겠습니다.
Docker Layered Image.
▪ Docker는 하나의 Image에 Layer를 결합하기 위해서 Union File System을 사용.
▪ Union 파일 시스템은 branches 알려져 있는 각 파일 시스템 내 파일 및 디렉토리들을 transparent하게 오버레이 형태로 적용되어
하나의 일관된 파일 시스템을 형성
▪ Docker Image가 변경될 때, 새로운 Layer가 생성
▪ Docker Image에서 새로운 Layer를 생성되는 과정을 'instructions'이라 함.
▪ instructions이 발생하는 경우
- Command 실행
- File이나 directory 생성
- 환경변수 생성
- Image로 Container를 생성하여, 어떤 Process를 실행할 경우
▪ Dockerfile : Instructions 들을 모아 놓은 파일
▪ Docker가 이 Dockerfile을 읽어서, instructions을 수행하고 최종 image를 생성
▪ Docker에서 지원하는 파일 System
- AUFS / Device Mapper / Btrfs
▪ Docker에서는 Default로 AUFS (Advanced multi layered Unification File System)를 사용
root@ubuntu:~/Docker# docker info | grep Storage Storage Driver: aufs
Docker 이미지 이해하기
▷ 현재 조건
• 현재 Docker의 이미지는 아래의 그림과 같이 Base Image로 부터 zigiweb:latest 가 만들어 지고,
다시 zigiweb2:0.1 이미지가 만들어진 상태.
※ 물론 이미지 생성 과정에서 다수의 이미지가 생성되기 때문에 그림에는 다수의 이미지가 생략된 상태.
• zigiweb 이미지를 통해서 modizigi 라는 Container가 생성된 상태
▷ 테스트
Step 1
- modizigi Container를 삭제 [ Container는 현재 Stop된 상태라고 가정
Step 2
- zigiweb:latest 이미지를 삭제
Step 3
- zigiweb2:0.1 이미지를 삭제
•Step 1에서 Container를 삭제 시에는 해당 Container만 삭제된다.
•Step 2에서 Image를 삭제 시에는 해당 이미지에 대해서 Untagged만 되었다고 표기된다
•Step 3에서 zigiweb2:0.1 Image를 삭제 시에는 해당 이미지에 대해서 Untagged되고, 다수의 이미지가 삭제된다
•위의 현재 Layer된 이미지에서 보듯이 zigiweb2:0.1은 기존 base image부터 시작하여 zigiweb:latest 이미지까지의 계층화된
이미지에 추가로 덧붙여져 만들어진 이미지이다. 따라서, 해당 이미지보다 상위(그림에서는 아래)의 이미지를 삭제를 하더라도
실제 이미지는 삭제되지 않으며, 해당 이미지에 대해서 Untagged라고 표기가 된다.
즉, 기존 이미지를 Parent Image로 사용하는 경우에는 Parent Image를 삭제하더라도 해당 이미지에 변경된 사항에 대해서
계층화 된 이미지를 사용하기 때문에 실제 이미지가 삭제되지 않는 것이다.
•즉, 모든 이미지는 상위 이미지에 대해서 의존성을 가지고 있다는 것을 알 수 있다.
•실제 Step 2를 수행하기 전과 후의 Disk 상태를 보면 용량이 변화가 없다. (바로 위의 그림)
•하지만, Step 3을 수행하게 될 경우에는 수행 전과 후의 Disk 사용량이 해당 이미지 크기 만큼 변경됨을 알 수 있다.