尝试快速测试[Docker]多阶段构建

首先

在本文中,我打算简单尝试一下Docker的”多阶段构建”功能,并确认它的好处。

另外,我是Docker的初学者。我只是大致理解了一般技术书中所写的内容。

触发

被封面的副标题所吸引,我阅读了以下内容。

创建理想的容器形象 Dockerfile 的最佳实践。

以下是2023年11月号的软件设计杂志。如果您有兴趣,请务必点击此Amazon链接。

在其中,我有很多想要尝试的事情,但首先我要试试”多阶段构建”。

前提。

    • golangを用いて、簡単なAPIをコンテナ化します。

 

    • Dockerの基本的なお話は省略します。

 

    ベースイメージはalpine linuxを使用します。

先试试看

Dockerfile可以用中文翻译为容器文件。

    • 筆者がこれまで書きがちだったdockerfile

一般的なDocker解説記事も、こんな書き方が多い気がします。

FROM golang:1.19.1-alpine

WORKDIR /app

COPY go.mod .

RUN go mod download

COPY . .

RUN go build -o main ./src/main.go

CMD ["./main"]
    マルチステージビルドの場合のdockerfile
# ビルド環境
FROM golang:1.19.1-alpine AS builder

WORKDIR /app

COPY go.mod .

RUN go mod download

COPY . .

# バイナリをビルド
RUN go build -o main ./src/main.go

# 実行環境
# ビルド環境と違い、golangは入っていない
FROM alpine:latest AS production

WORKDIR /app

# ビルド環境から「main」をコピー
COPY --from=builder /app/main .

# 実行
CMD ["./main"]

构建与结果

    そのままビルドした結果です。
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
go-api-multi latest    36c47c54cd23   3 minutes ago    14MB ⭐️マルチステージビルド
go-api       latest    06b667ab680e   11 minutes ago   359MB
    • マルチステージビルドのサイズ:14MB

 

    • マルチステージビルドをしなかった場合のサイズ:359MB

結論:約25分の1になりました。(アプリとか、ベースイメージにより変わります)

结论

    マルチステージビルドを使用すると、コンテナのサイズが節約できますね。(約25分の1は無視できないですね。)

最後

这次我用golang试了一下,但是对于node应用来说,devDependencies的模块大小可能可以节省一些空间。

请务必查看以下详细解释。一旦您对Docker有一定了解,您将找到进一步提升技巧的各种方法。

如果你对2023年11月号的《软件设计》杂志感兴趣的话,这是Amazon的链接。请务必点击查看。
广告
将在 10 秒后关闭
bannerAds