코드 수정 후 새로운 버전의 도커 이미지 빌드
- 빌드한 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
- 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 .
- 003: CMD 인스트럭션이 스크립트 마지막에 위치할 필요는 없다. FROM 인스트럭션 뒤라면 어디에 배치해도 무방, 또한 수정할 일이 적으므로 초반부에 배치하면 된다.
- 005: ENV 인스트럽션 하나로 여러 개의 환경변수를 정의할 수 있다.