3.5.이미지 레이어 캐시를 이용한 Dockerfile 스크립트 최적화

코드 수정 후 새로운 버전의 도커 이미지 빌드

  • 빌드한 web-ping 이미지에는 애플리케이션이 구현된 자바스크립트 파일이 들어 있다.
  • 이 파일을 수정하고 이미지를 다시 빌드하면 새로운 이미지 레이어가 생긴다.
  • Dockerfile 스크립트의 인스트럭션은 잘 수정하지 않는 인스트럭션이 앞으로 오고, 자주 수정되는 인스트럭션이 뒤에 오도록 배치해야 한다.
  • 이렇게 해야 캐시에 저장된 이미지 레이어를 되도록 많이 사용할 수 있다.
001)  docker image build -t web-ping:v2 .
002) [+] Building 0.9s (8/8) FINISHED
003)  => [internal] load .dockerignore                                                                                                                          0.0s
004)  => => transferring context: 2B                                                                                                                            0.0s
005)  => [internal] load build definition from Dockerfile                                                                                                       0.0s
006)  => => transferring dockerfile: 191B                                                                                                                       0.0s
007)  => [internal] load metadata for docker.io/diamol/node:latest                                                                                              0.8s
008)  => [internal] load build context                                                                                                                          0.0s
009)  => => transferring context: 886B                                                                                                                          0.0s
010)  => [1/3] FROM docker.io/diamol/node@sha256:dfee522acebdfdd9964aa9c88ebebd03a20b6dd573908347be3ebf52ac4879c8                                               0.0s
011)  => CACHED [2/3] WORKDIR /web-ping                                                                                                                         0.0s
012)  => [3/3] COPY app.js .                                                                                                                                    0.0s
013)  => exporting to image                                                                                                                                     0.0s
014)  => => exporting layers                                                                                                                                    0.0s
015)  => => writing image sha256:6de9253243967be9a94700ae4de4e5811e55bcb5f49682db3c79962a375c6e7c                                                               0.0s
016)  => => naming to docker.io/library/web-ping:v3
  1. 012: app.js 를 수정 하였기 때문에 캐시에 저장된 이미지 레이어를 사용하지 못함

Dockerfile 최적화

001) FROM diamol/node
002) 
003) CMD ["node", "/web-ping/app.js"]
004) 
005) ENV TARGET="blog.sixeyed.com" \
006)  METHOD="HEAD" \
007)  INTERVAL="3000"
008) 
009) WORKDIR /web-ping
010) COPY app.js .
  1. 003: CMD 인스트럭션이 스크립트 마지막에 위치할 필요는 없다. FROM 인스트럭션 뒤라면 어디에 배치해도 무방, 또한 수정할 일이 적으므로 초반부에 배치하면 된다.
  2. 005: ENV 인스트럽션 하나로 여러 개의 환경변수를 정의할 수 있다.

links

social