도커의 이미지는 컨테이너를 만드는 '압축파일'이라고 생각하면 이해가 편하다.
도커 이미지는 도커 컨테이너를 만들기 위한 모든 정보를 가지고 있다.
한 번 만들어지면 이미지 내의 정보는 절대 변하지 않으며, 이미지를 통해서 컨테이너가 만들어진다.
이미지는 컨테이너를 만들어도 사라지지 않으며 여러 개의 컨테이너를 만들 수 있다.
도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백MB이다.
처음 컨테이너를 만들기 위해서 이미지를 다운로드하는 건 당연히 그럴 수 있다.
그런데 이미지의 불변성 때문에 현재 이미지에 수정사항이 생겨 파일을 단 하나 추가된 이미지를 새로 다운로드한다고 가정하자.
기존 이미지에 파일 하나 추가했다고 수백MB를 다시 다운받는다면 매우 비효율적일 수 밖에 없다.
도커는 이런 문제를 해결하기 위해 레이어(layer)라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해준다.
이미지는 압축파일과 비슷하다고 언급했다.
하지만 하나 다른점이 이미지는 레이어를 공유한다는 점이다. 이를 그림으로 표현하면 다음과 같다.
이렇게 여러 이미지가 레이어를 공유할 수 있기 때문에 실제로 파일 시스템에서 차지하는 전체 용량이 감소한다.
실제로 레이어를 공유하는지를 알아보고, 용량도 효율적으로 사용하는지도 알아보자
docker pull nginx:1.15.1 명령어를 사용해서 nginx 이미지를 하나 다운도르 한다.
docker pull nginx:1.15.2 명령어를 사용해서 바로 다음 버전의 nginx를 다운로드 한다.
처음과는 다르게 be8881be8156 레이어가 이미 존재한다고 판단하여 다운로드 하지않고 넘어감을 볼 수 있다.
따라서 nginx:1.15.1 과 nginx:1.15.2는 서로 같은 레이어(be8881be8156)를 공유한다는 것을 알 수 있다.
docker images 명령어를 통해 다운받은 이미지의 정보를 간단히 출력해보면
둘 다 109MB를 사용한다고 나와있다. 이건 중복된 레이어의 용량을 뺀 값이 아니다. 따라서 실제로 사용되는 용량은 109MB보다 훨씬 작다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] m1 mac에서 image build 후 Linux에서 실행하는 방법 (0) | 2022.11.07 |
---|---|
[Docker] 컨테이너 기능별, 포트별 분리 (feat. nginx) (0) | 2021.11.22 |
[Docker] certbot 컨테이너를 사용해 SSL 인증서 발급받기 (0) | 2021.11.14 |
[Docker] Docker Swarm 서비스하기 (0) | 2021.08.24 |
[Docker] Docker Swarm에 대해서 (0) | 2021.08.18 |