4.6.연습문제

  • 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   # 기존

links

social