DevOps/Docker

[Docker] 기초 시리즈 (4) 도커 이미지의 구조

유자맛바나나 2022. 4. 29. 02:46

 

[도커 기초 시리즈 포스팅]

[Docker] 기초 시리즈 (1) 도커의 개념과 사용이유

[Docker] 기초 시리즈 (2) Ubuntu에 도커 엔진 설치

[Docker] 기초 시리즈 (3) 이미지와 컨테이너 관계, 도커 아키텍처

[Docker] 기초 시리즈 (4) 도커 이미지의 구조 (Now)

[Docker] 기초 시리즈 (5) 도커 이미지 다루기 - Docker Hub(Registry)

[Docker] 기초 시리즈 (6) 도커 이미지 다루기 - 이미지 직접 생성

[Docker] 기초 시리즈 (7) 자주 사용하는 Dockerfile 명령어

[Docker] 기초 시리즈 (8) 자주 사용하는 도커 명령어 모음

[Docker] 기초 시리즈 (9) 도커 컨테이너 - 개념, 기본 사용법

[Docker] 기초 시리즈 (10) 도커 컨테이너 - Volume 관리

 

 

❑ 도커 이미지의 구조

1) 도커 이미지는 'Layer 적층식 아키텍처'를 갖는다

출처: 패스트캠퍼스 강의 DevOps 초격차 패키지 Part1. Docker 기초

  • 도커 이미지는 Layer 적층식 아키텍처 기반으로 만들어진다. 
  • 레이어의 계층(hierarchy)은 도커 이미지 라이프사이클 관리를 위한 핵심이며, 가장 자주 변경되는 레이어를 가능한 최상위 레이어로 구성해야 한다. 특정 레이어를 수정하면 도커는 해당 레이어로부터 빌드된 모든 레이어를 재구성하기 때문이다.
  • 이미지는 read-only file로 실제 하드웨어에 저장되어 있다. 레이어 역시 하나의 파일로서 존재하므로 도커 이미지 하나에 여러 개의 레이어 파일이 존재할 수 있다
  • 예시 해석
    • 위의 예시 그림에서 ubuntu, nginx, web app 세 개의 도커 이미지가 있다. nginx는 ubuntu 이미지를 기반으로, web app은 nginx 이미지를 기반으로 만들어졌다.
    • ubuntu 이미지 기준으로 Layer A가 가장 오래된 변경사항이고, 그 다음 변경사항이 기록된 Layer B, C가 차례대로 기록된다.

 

Nginx 이미지는 5개의 Layer로 이뤄져있음을 알 수 있다

 

2) Layer 정보 확인

도커 이미지 Layer 정보 확인
$ docker image inspect {Image 이름}:{tag}
  • "RootFS" > "Layers"를 확인한다

 

도커 이미지 Layer 저장 위치
/var/lib/docker/overlay2

 

[참고] Container Layer

출처: 패스트캠퍼스 강의 DevOps 초격차 패키지 Part1. Docker 기초

 

  • 도커는 이미지로부터 컨테이너를 실행시키면 Contatiner Layer라고도 부르는 R/W layer를 추가해 컨테이너 runtime동안 발생하는 변경사항을 기록한다. (Read/Writer가 가능하므로 R/W layer)
  • 컨테이너가 삭제될 때 기록된 변경사항이 삭제되므로 보존하고 싶다면 docker commit 명령어를 통해 변경사항이 반영된 이미지로 생성해야 한다.
  • 예시 해석
    • web app 이미지로 생성했기 때문에 'web app image layers'가 가장 아래에 쌓이며, 이미지의 레이어이므로 Read-Only 속성을 갖는다. 
    • 컨테이너에 변경사항이 생길 때 마다 컨테이너 레이어(R/W layer)가 web app image layers 위에 쌓인다.