본문 바로가기

방법론과 DevOps/Docker

이미지와 레이어

레이어드 구조

레이어드 구조는 층을 가진 구조를 의미 합니다. 레이어란 여러개의 층으로 이루어진 구조 중 하나의 층을 의미하는 단어이며 도커의 이미지는 이러한 레이어 들의 집합으로 구성 되어 있습니다. (즉 도커 이미지는 레어어드 구조)  일반적으로 docker hub 와 같은 이미지 레지스트리에서 docker 이미지를 다운로드 받을 경우 하나의 파일을 다운 받은 것처럼 보이지만 실제로는  여러 레이어들을 다운받아 모여 하나의 이미지로 구성 되어 있는 것으로 볼 수 있습니다.

 

레이어드 구조를 사용하는 이유 

 레이어드 구조는 여러 층을 가진 구조 입니다. 왜 도커에서는 이러한 구조를 사용하여 이미지를 구성하는지 이해하기 위해선 이미지의 불변성에 대한 이해가 있어야 합니다.  

 도커의 이미지는 일종의 압축파일의 개념입니다. 우리가 일반적으로 압축파일인 zip 형식의 파일을 압축을 풀고, 내용을 수정한 후 다시 재 압축을 하지 않는한  내용의 변경이 생기지가 않듯,  한번 생성된 이미지 파일의 내용은 수정 되지 않습니다.  결국 이러한 특성은  이미지의 내용이 수정이 필요할 경우 문제가 발생합니다. 

 일반적으로 도커의 이미지는 컨테이너를  구성하기 위해 수많은 정보를 내포하는 경우가 많기 때문에 용량이 거대해 질 수 있습니다. 예를들어 하나의 이미지의 많은 정보가 포함되 10GB의 용량이 되었는데, 이 이미지로 띄운 컨테이너에서 에러가 발생했다고 가정해 봅시다. 디버깅을 통해 확인한 결과 코드 한줄이 잘못되어 해당 코드 한줄만 수정하면 조치가 가능하지만  앞서 설명드렸 듯 이미지는 불변성의 특징을 가지고 있기 때문에 이를 조치하기 위해선 소스 수정후 10GB의 이미지를 다시 빌드해 컨테이너를 올리는 과저을 수반해야 합니다.

 도커의 레이이어드 구조는 이러한 비효율적인 과정을 생략하기 위해 채택된 구조라고 볼 수 있습니다. 이미지를 레이더드 구조로 구상하면 수정/삭제 와 같은 작업 필요가 생겼을 때 이를 더 유연하고 효울적으로  사용할 수 있습니다. 또한 특정 이미지가 포함한 하나의 레이어와 같은 기능을 다른 이미지를 빌드할 때 필요한 경우 별도의 개발 없이 재사용이 가능합니다

 

이미지 레이어와 컨테이너 레이어

빌드 된 이미지를 가져와 컨테이너를 띄운다는 행위는 결국 앞서 설명한 내용과 같이 여러개의 층을 순차적으로 구성한다고 바꿔 말 할 수 있습니다.  이것을 건축물로 비유하자면 하나의 건축 설계서로 여러개의 건물을 지을 수 있듯  이미지 레이러 라는 건축 설계서를 가지고 여러개의 컨테이너 건물을 층층히 쌓아 올리는 것이 가능 합니다

위 그림과 같이 동일한 이미지 레이어를 공유하여 같은 구조의 컨테이터 레이어를 구상하는 것이 가능합니다.

 

이미지 레이어 실습

이미지 레이어 구조 확인을 위해 이전 nginx 이미지를  도커 허브에서 가져와 컨테이너를 띄웠던 것 처럼 

https://dkkim2318.tistory.com/141

 

Docker를 통한 nginx web server 구축

이번 포스트 에서는 Docker를 통해 간단한 웹서버를 구축하는 과정을 통해 컨테이너 실행 방법에 대해 알아보겠습니다. Docker 컨테이터 실행 과정 도커를 통해 도커 이미지로 빌드된 파일을 가져

dkkim2318.tistory.com

도커허브에서 여러  nginx 이미지 파일을 pull 해와 보겠습니다.

# nginx sample 이미지 3개 pull
docker pull devwikirepo/hello-nginx
docker pull devwikirepo/config-nginx
docker pull devwikirepo/pre-config-nginx

 해당 명령어 3줄을 실행하여 도커 허브에서 같은 이미지 레이러르 공유하는 3개지 image를 가져와 줍니다

위와 같이 3개의  이미지가 모두 가져와 졌다면 docker imgae history 명령어를 통해 해당 이미지의 이력을 확인해 보겠습니다.

docker image history devwikirepo/hello-nginx
docker image history devwikirepo/config-nginx
docker image history devwikirepo/pre-config-nginx

해당 이력을 확인해 보면 

위와 같은 이력을 확인 할 수 있습니다. 각 3개의 이미지 모두 웹서버에 간단한 index.html을 띄우는 비슷한 기능에 이미지 지만 이력을 비교했을 때 유사하지만 조금씩 순서가 다르거나 덮어쓰는 파일이 다른 것을 확인 할 수 있습니다.  이처럼 도커 이미지 빌드 과정에서 레이러르 통해 같은 기능을 공유하고, 재사용 하는 것이 가능합니다

 

 

 

'방법론과 DevOps > Docker' 카테고리의 다른 글

도커파일 지시어  (0) 2025.05.14
이미지 빌드  (0) 2025.05.14
이미지 레지스트리  (0) 2025.04.24
이미지  (0) 2025.04.17
Docker를 통한 nginx web server 구축  (0) 2025.04.17