在我們設計一個 Image 時,希望把該用到的資料保留,把不必要的刪除,可能有些資料只用一次,這樣只用一次後面用不到反而留在那會造成 Image 容量變大,今天更近一步來坦探討 Multi Stage
這邊一個範例
我透過gcc去編譯C語言並且產生執行檔,然後執行
沒用 Multi Stage 的 Dockerfile
FROM gcc:9.4
COPY hello.c /src/hello.c
WORKDIR /src
RUN gcc --static -o hello hello.c
ENTRYPOINT [ "/src/hello" ]
CMD []
有用Multi Stage 的 Dockerfile
FROM gcc:9.4 AS builder
COPY hello.c /src/hello.c
WORKDIR /src
RUN gcc --static -o hello hello.c
FROM alpine:3.13.5
COPY --from=builder /src/hello /src/hello
ENTRYPOINT [ "/src/hello" ]
Multi Stage 用法講解
COPY --from==builder /src/hello /src/hello
Multi Stage 額外好處:
如果一直探討細節下去,就會發現有更多更好的方法,能讓Docker負擔小一點,就有種發現新大陸的感覺