Container가 독립적인 프로세스이면 해당 프로세스가 실행할 코드, 파일, 라이브러리, Dependencies 등은 어디서 가져와서 실행할까.
이를 해결하기위해 이미지라는 개념이 나왔다.
도커 이미지란 컨테이너를 실행시키기위해 파일, configuration, libraries, binaries 등을 포함한 규격화된 패키지다.
이미지의 두 가지 원칙
- 이미지는 불변하다. 한번 생성되었으면 수정될 수 없다. 새로운 이미지를 생성하거나, 변경된 부분을 이미지의 위에 추가한다. → 변경된 부분을 위에 추가하는 것이 layer.
- 컨테이너 이미지는 Layers의 조합이다. 각 Layer는 파일들의 수정, 제거, 추가 등의 파일 시스템의 변경사항에 대한 집합이다.
layer은 읽기전용이고 독립적으로 저장되고 컨테이너를 실행할 때 이 레이어들을 차례대로 쌓아올려 특정 위치에 마운트 시킨다.
Image Layers Example
파이썬 프로젝트를 이미지로 만들어본다 생각해보자 아까 말했듯이 이미지는 composed layers 이므로 레이어들로 구현되어있다.
- 첫 번째 레이어
- 기본적인 커맨드나, apt와 같은 패키지 매니저들이 쌓인다.
- Debian 계열 Linux OS
- 두 번째 레이어
- 파이썬 런타임 , pip 패키지 매니저
- 세 번째 레이어
- requirements.txt 와 같은 파일
- 네 번째 레이어
- dependency 에 의해 설치된 라이브러리들
- 다섯 번째 레이어
- 실제 작성된 코드들을 복사하여 구성
아래와 같은 Layer 예시 그림처럼

Stacking Layers
레이러를 쌓는 것은 content-addressable storage 와 union filesystems 을 통해 가능하다.
- 각 레이어들이 다운로드되면 호스트 머신의 파일시스템의 디렉토리에 압축이 해제된다.
- 이미지를 통해 container를 실행시키면, 각 레이어들의 파일시스템을 관리하는 union file system 이 생성된다.
- 컨테이너가 실행되면, chroot 라는 unified directory를 root directory 로써 사용한다.
Docker Docs 영어 원본
Layering is made possible by content-addressable storage and union filesystems. While this will get technical, here’s how it works:
- After each layer is downloaded, it is extracted into its own directory on the host filesystem.
- When you run a container from an image, a union filesystem is created where layers are stacked on top of each other, creating a new and unified view.
- When the container starts, its root directory is set to the location of this unified directory, using chroot.
참고하기 좋은 블로그 주소
'CICD > Docker' 카테고리의 다른 글
| DockerFile은 무엇일까? (0) | 2024.09.02 |
|---|---|
| Docker Container가 무엇일까? (1) | 2024.09.02 |