ホームページ  >  記事  >  バックエンド開発  >  Golang プロジェクトの Docker イメージの依存関係を効果的にキャッシュするにはどうすればよいですか?

Golang プロジェクトの Docker イメージの依存関係を効果的にキャッシュするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 00:51:02399ブラウズ

How to Effectively Cache Dependencies in Docker Images for Golang Projects?

Docker イメージの依存関係の事前構築とキャッシュ

Docker イメージを作成する場合、ビルド プロセスを促進するために依存関係をキャッシュする必要が生じます。この記事では、必要なすべてのモジュールを事前にビルドしてキャッシュするという問題に取り組みます。

1 つのアプローチには、イメージのビルド中に依存関係をキャッシュするレイヤーを追加することが含まれます。ただし、この手順では依存関係を構築する必要があるため、時間がかかる可能性があります。別の方法は、 go build コマンドを使用することです。

もう 1 つのオプションは、go.mod ファイルにリストされているすべての依存関係を事前にビルドすることです。幸いなことに、Docker はまさにこの問題に対処するドキュメントを提供しています。推奨されるアプローチは、次の方法で Dockerfile を構造化することです:

FROM --platform=${BUILDPLATFORM} docker.io/golang:1.16.7-alpine AS build
ARG TARGETOS
ARG TARGETARCH
WORKDIR /src
ENV CGO_ENABLED=0
COPY go.* .
RUN go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .

FROM scratch
COPY --from=build /out/example /

単一アーキテクチャ用に簡略化すると、関連するキャッシュの側面は次のようになります:

FROM docker.io/golang:1.16.7-alpine AS build
WORKDIR /src
COPY go.* .
RUN go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build go build -o /out/example .

FROM scratch
COPY --from=build /out/example /

このメカニズムはキャッシュをマウントします。 /root/.cache/go-build 上のディレクトリ。ここには go build キャッシュが格納されます。初期ビルド中に、キャッシュにデータが設定されます。後続のビルドでは、キャッシュされたファイルが利用されます。

この機能を有効にするには、docker build コマンドを使用してイメージをビルドするときに DOCKER_BUILDKIT=1 を含めるか、docker buildx を使用します。テストにより、このアプローチの有効性が確認されました。

以上がGolang プロジェクトの Docker イメージの依存関係を効果的にキャッシュするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。