도커 이미지는 이미지를 효율적으로 저장하기 위해 레이어드 파일 시스템을 구성한다.
nginx를 다운로드 받는 과정에서 pull이 여러단계에 걸쳐 실행되는 것을 보면 이미지가 레이어 구조임을 확인할 수 있다.
레이어 구조에 대해 알아보고 도커 이미지가 레이어 구조로 구성된 이유를 특징과 함께 알아볼 것이다.
구조, 토목, 전기 ,조경 각각의 레이어를 합치면 설계도 A가 완성된다.
건축도면을 레이어 구조로 설계하면 무엇이 좋을까?
각 레이어 간의 간섭을 줄이고 재사용성이 증가한다.
도커 이미지의 레이어 구조에서도 이와 같은 장점을 가진다.
nginx이미지 설계에는 OS, NginX 설치 파일, NginX 설정 파일, index.html이 필요하며 모두 레이어 구조로 구성할 수 있다.
Nginx 설치 파일 레이어를 추가하려고 할 때는 OS레이어에서 수정되는 것이 아니라 OS레이어 위에 새로운 레이어를 추가하는 방식으로 실행된다.
또한 이미지에서 한번 저장된 레이어는 변경할 수 없으며 기존 레이어의 복사본을 추가하여 수정해야한다.
만약 imageB의 index.html을 imageA에서 커스텀하여 사용하고자 한다면 index.html레이어만 별도로 사용하고 나머지 레이어들은 공동으로 사용할 수 있다.
또한 컨테이너는 읽기 전용 레이어인 이미지 레이어와 읽기/쓰기 전용 레이어인 컨테이너 레이어로 구성된다. 이 둘의 역할은 완전히 다르다.
위 도면에 있는 컨테이너1과 2는 같은 이미지 레이어를 공유하며 컨테이너 실행 시 각자 컨테이너 레이어를 생성하여 동작한다. 그리고 컨테이너3은 이미지 레이어의 index.html을 제외한 다른 레이어를 공유하며 index.html 레이어와 컨테이너 레이어는 따로 가진다.
이런 구조를 통해 실행 시 전체 공간의 복사가 이뤄지지 않아도 되기 때문에 컨테이너를 더욱 빠르게 사용할 수 있다.
다음과 같이 이미지를 다운 받아서 실습을 진행하였다.
hello-nginx의 이미지 히스토리 조회 명령어 실행한 결과이다.
COPY는 현재 사용자가 가지고 있는 파일을 기존 레이어로 덮어쓰기하는 명령어이다
hello-nginx는 Nginx의 오피셜 이미지를 다운로드 후 index.html파일을 hello-nginx가 있는 파일로 덮어쓰기 한 것을 확인할 수 있다.
COPY 명령어를 통해 사용자가 가지고 있는 index.html 파일을 Nginx 이미지 경로의 index.html로 덮어쓰기 했다는 것을 보여준다
config-nginx의 이미지 히스토리 조회 명령어를 실행한 결과이다.
hello-nginx에서 한 줄이 더 추가되었다.
빨간 밑줄친 부분을 보면 nginx.conf 파일이 수정된 기록을 확인 할 수 있다.
pre-config-nginx의 히스토리 조회 명령어를 실행한 결과이다.
이전의 커스텀 이미지와 다르게 수정 순서가 바뀐 것을 확인할 수 있다.
실습에 사용된 이미지의 레이어 구조를 보여주는 이미지이다.