Docker - 이미지

문한성·2023년 4월 11일
0

공부

목록 보기
17/28
post-thumbnail

Docker image란?

Application을 포장 및 전송하기 위해 도커는 "docker image"를 사용한다.

Docker image는 파일로 어플리케이션 실행에 필요한 독립적인 환경을 포함하며, 런타임 환경을 위한 일종의 템플릿이다.

도커 이미지는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변(변경 불가) 파일이다.

이미지는 읽기 전용이므로 스냅샷이라고도 하며, 특정 시점의 애플리케이션과 가상 환경을 나타낸다.

이러한 일관성은 도커의 큰 특징 중 하나로 개발자가 안정적이고 균일한 조건에서 소프트웨어를 테스트하고 실험할 수 있도록 한다.

이미지는 템플릿일 뿐이므로 시작하거나 실행할 수 없다. 컨테이너는 실행 중인 이미지일 뿐이기 때문이다.

컨테이너를 생성하면 쓰기 가능한 레이어가 immutable image(불변 이미지) 위에 추가된다. 즉, 컨테이너는 수정이 가능하다.

컨테이너를 생성하는 이미지 베이스는 별도로 존재하며 변경할 수 없다.

컨테이너 환경을 실행할 때는 기본적으로 컨테이너 내부에 해당 파일 시스템(도커 이미지)의 읽기-쓰기 복사본을 만든다.

이렇게 하면 이미지 전체 복사본을 수정할 수 있는 컨테이너 레이어가 추가된다.

Docker image layer

도커 이미지 레이어가 중요한 이유는 이미지를 빌드할 때마다 이미 생성된 레이어가 캐시 되어 재사용 되기 때문에 빌드 시간을 단축할 수 있다.

하지만 Dockerfile에 정의된 모든 명령문(Instructions)이 레이어가 되는 것은 아니다.
RUN, ADD, COPY 이 3가지 단계만이 레이어로 저장되고, CMD, LABEL, ENV, EXPOSE 등과 같이 메타 정보를 다루는 부분은 임시 레이어로 생성되지 않아 도커 이미지 사이즈에 영향을 주지 않는다.

이미지 레이어는 캐시 되어 재사용 되기 때문에 추가된 레이어만 다운 받게 된다.

docker build .
[+] Building 6.9s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                       0.0s 
 => => transferring dockerfile: 164B                                                                                                                                                                       0.0s 
 => [internal] load .dockerignore                                                                                                                                                                          0.0s 
 => => transferring context: 2B                                                                                                                                                                            0.0s 
 => [1/5] FROM docker.io/library/node                                                                                                                                                                      0.0s 
 => [internal] load build context                                                                                                                                                                          0.0s 
 => => transferring context: 321B                                                                                                                                                                          0.0s 
 => CACHED [2/5] WORKDIR /app                                                                                                                                                                              0.0s 
 => [3/5] COPY package.json /app                                                                                                                                                                           0.0s 
 => [4/5] RUN npm install                                                                                                                                                                                  6.5s 
 => [5/5] COPY . /app                                                                                                                                                                                      0.0s 
 => exporting to image                                                                                                                                                                                     0.2s 
 => => exporting layers                                                                                                                                                                                    0.2s 
 => => writing image sha256:1716cdd2dcce60d025150f85a329e4001e1b14f0b37d9b45ec0bf729fee3bef5                                                                                                               0.0s 

처음 빌드를 한 부분과 다시 똑같이 이미지를 빌드했을 경우의 속도차이가 발생한다.
밑의 로그들을 보면 레이어 앞에 CACHED라고 적혀있는 레이어는 캐시되어 속도가 빨라진다.

docker build .
[+] Building 0.2s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                       0.0s 
 => => transferring dockerfile: 31B                                                                                                                                                                        0.0s 
 => [internal] load .dockerignore                                                                                                                                                                          0.0s 
 => => transferring context: 2B                                                                                                                                                                            0.0s 
 => [internal] load metadata for docker.io/library/node:latest                                                                                                                                             0.0s 
 => [1/5] FROM docker.io/library/node                                                                                                                                                                      0.0s 
 => [internal] load build context                                                                                                                                                                          0.0s 
 => => transferring context: 1.13kB                                                                                                                                                                        0.0s 
 => CACHED [2/5] WORKDIR /app                                                                                                                                                                              0.0s 
 => CACHED [3/5] COPY package.json /app                                                                                                                                                                    0.0s 
 => CACHED [4/5] RUN npm install                                                                                                                                                                           0.0s 
 => [5/5] COPY . /app                                                                                                                                                                                      0.0s 
 => exporting to image                                                                                                                                                                                     0.0s 
 => => exporting layers                                                                                                                                                                                    0.0s 
 => => writing image sha256:b7476827643e1f9dcf77c978aa256fc654ab0817b1861798f8153822eb949198                                                                                                               0.0s 
profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글