- Go로 구현된 간단한 웹 서버 애플리케이션과 이를 위한 Dockerfile 스크립트가 있다.
- 이 빌드 스크립트를 최적화 하라
- 지금 있는 Dockerfile 스크립트로 이미지를 빌드한다. 이어서 Dockerfile 스크립트를 최적화한 다음 새로운 이미지를 빌드하라
- 현재 이미지는 리눅스 환경에서 약 800MB, 윈도 환경에서 약 5.2GB 크기다. 최적화된 이미지의 크기가 리눅스 환경에서 약 15MB, 윈도 환경에서 약 260MB가 되도록 하라
- 현재 Dockerfile 스크립트에 포함된 HTML 파일의 내용을 수정하면 일곱 단계의 빌드 단계를 재수행한다.
- Dockerfile 스크립트를 최적화해서 HTML 파일을 수정하더라도 재수행하는 빌드 단계가 한 단계가 되도록 하라.
기존 Dockerfile
FROM diamol/golang
WORKDIR web
COPY index.html .
COPY main.go .
RUN go build -o /web/server
RUN chmod +x /web/server
CMD ["/web/server"]
ENV USER=sixeyed
EXPOSE 80
내가 수정한 Dockerfile
# builder
FROM diamol/golang AS builder
COPY main.go .
RUN go build -o /server
# app
FROM diamol/base
CMD ["/web/server"]
ENV USER=sixeyed
EXPOSE 80
WORKDIR /web
COPY index.html .
COPY --from=builder /server .
RUN chmod +x /web/server
정답
FROM diamol/golang AS builder
COPY main.go .
RUN go build -o /server
RUN chmod +x /server
# app
FROM diamol/base
EXPOSE 80
CMD ["/web/server"]
ENV USER="sixeyed"
WORKDIR /web
COPY --from=builder /server .
COPY index.html .
html 파일 수정한 후 빌드한 결과
001) ➜ docker build -t ch04-lab:v4 .
002) [+] Building 1.0s (14/14) 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: 280B 0.0s
007) => [internal] load metadata for docker.io/diamol/base:latest 0.8s
008) => [internal] load metadata for docker.io/diamol/golang:latest 1.0s
009) => [builder 1/4] FROM docker.io/diamol/golang@sha256:ffc019466b60046d67b71628afafc9f80cc4d6a6bce824dc89d51300ecec0902 0.0s
010) => [internal] load build context 0.0s
011) => => transferring context: 481B 0.0s
012) => [stage-1 1/4] FROM docker.io/diamol/base@sha256:787fe221a14f46b55e224ea0436aca77d345c3ded400aaf6cd40125e247f35c7 0.0s
013) => CACHED [stage-1 2/4] WORKDIR /web 0.0s
014) => CACHED [builder 2/4] COPY main.go . 0.0s
015) => CACHED [builder 3/4] RUN go build -o /server 0.0s
016) => CACHED [builder 4/4] RUN chmod +x /server 0.0s
017) => CACHED [stage-1 3/4] COPY --from=builder /server . 0.0s
018) => [stage-1 4/4] COPY index.html . 0.0s
019) => exporting to image 0.0s
020) => => exporting layers 0.0s
021) => => writing image sha256:459a14027bbc6854122061b831d9ce4ee041d166e2035fb3d8697e7300d29898 0.0s
022) => => naming to docker.io/library/ch04-lab:v4
이미지 크기
REPOSITORY TAG IMAGE ID CREATED SIZE
ch04-lab v4 459a14027bbc 3 minutes ago 16.4MB # index.html 수정한 후
ch04-lab v3 d8faf8813e79 3 minutes ago 16.4MB # 정답
ch04-lab v2 d7a2b0da78d3 6 minutes ago 25.9MB # 내가 만든 것
ch04-lab v1 bc3936ac5143 19 minutes ago 736MB # 기존