docker image는 Layer로 구성 (Meta + Data)

메타 정보 확인
- docker inspect (이미지이름)

 

Docker Layer = image layer(read-only) + container layer(read/write)

 

container layer = 컨테이너가 작업하는 데이터 저장. 따라서 컨테이너 종료 시 conatiner layer 삭제됨

컨테이너실행되면 Image Layer참조하여 Container Layer생성
결과적으로 2종류의 Layer생성되고, Layer합친 것이 바로 컨테이너File System
그래서 ContainerFile SystemUnion File System이라고 한다
 

Docker Image Layer

: Docker Image LayerDockerfile 명령어 갯수와 동일

 

Dockerfile 내용
Image Layer가 두개 있고, 이를 합쳐 최종적으로 Image 생성(9e74~)
생성된 이미지 확인((9e74~)
docker image history img:v1
docker inspect img:v1

image layer보여주는 docker inspectdocker history보여지는 image layer 갯수가 다를 있다

(docker inspect에서는 image layer 크기가 0인 것은 보여주지 않음)

 

※ 먼저 생성된 Layer다음에 생성된 Layer부모(Parent)된다

 

 

Build Cache

docker build를 실행할 때 사용되는 개념.

Build 중에 동일한 Image Layer가 있으면 기존 것을 재사용한다는 개념

 

 

img:v2 빌드
Dockerfile 내용 수정 없이 다시 build. Cache 사용함을 알 수 있다.
Dockerfile 수정
img:v3 빌드. Cache를 사용함과 새롭게 Image가 생성됨을 알 수 있다.

여기서, 수정이 없는 Layer2 까지는 Cache를 사용하지만, 새롭게 입력된 명령어( echo SLEEPING ,,,)에 대해서는 새롭게 작업함을 알 수 있다.

img: v1, v2는 같은 Image ID를 가지지만, v3는 다르다.

 

따라서, Image Layer 수정이 빈번한 dockerfile명령어는 최대한 마지막에 쓰는 것이 중요
만약 제일 위에 빈번한 수정이 있는 Image Layer있다면, 수정할 때마다 대부분의 Image Layer새롭게 생성하기 때문에, 그만큼 Build 속도가느리고 Image Layer 저장공간을 많이 차지하게 된다

 

Docker Build 과정
docker images -a 명령어를 통해 중간 과정의 이미지 확인

 dangling 이미지 = 이름과 태그가 없는 image

 

dangling 이미지 종류 

1. docker build 과정에서 중간에 생성되어 삭제된 docker image layer = "dangling build cache"

2. 기존 도커 이미지와 동일한 이름과 태그를 사용하여 docker build했을 때 = "dangling image"

 

dangling 이미지는 불필요하게 디스크 공간을 차지할 수 있으므로 관리자가 수동으로 삭제해야 한다!


dangling build cache 삭제 명령어

- docker system prune -a (##모든 이미지 다 삭제됨. 조심조심)

 

dangling image 몽땅 삭제 명령어

- docker images -f "dangling=true"

- docker rmi $(docker images -f "dangling=true" -q) 또는 docker image prune

 

'Study > Cloud' 카테고리의 다른 글

Kubernetes - Deployment & Service  (0) 2022.07.20
Kubernetes 소개 및 설치  (0) 2022.07.19
라우터 이해하기3  (0) 2022.07.06
라우터 이해하기2  (0) 2022.07.05
라우터 이해하기  (0) 2022.07.04

+ Recent posts