ホームページ > バックエンド開発 > Golang > Docker ビルドを高速化するために、Go モジュールの依存関係のインストールをビルド プロセスから分離するにはどうすればよいですか?

Docker ビルドを高速化するために、Go モジュールの依存関係のインストールをビルド プロセスから分離するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-20 18:26:11
オリジナル
867 人が閲覧しました

How Can I Separate Go Module Dependency Installation from the Build Process for Faster Docker Builds?

Go モジュールのビルドから依存関係のインストールを分離する

Go 1.11 では、ビルド中に依存関係のインストールを自動化し、リビルドを最小限に抑えるモジュール サポートが導入されました。ただし、一部の開発者は、コンテナ キャッシュを利用して再構築速度を最適化するために、別のステージで依存関係を手動でフェッチすることを好みます。

vgo ソリューション

Go の以前のバージョンでは、依存関係を手動で取得するネイティブな方法はありません。ただし、Go リポジトリの問題 #26610 はこの機能に対処しています:

go mod download

このコマンドを使用すると、ビルド プロセスを実行せずに依存関係を手動で取得できます。このコマンドを使用するには、プロジェクト ディレクトリに go.mod および go.sum ファイルのみが必要です。

Docker の実装

Docker ビルド スクリプトの例を次に示します。キャッシュされたマルチステージ ビルドを実装し、go mod ダウンロードを利用します:

FROM golang:1.17-alpine as builder
RUN apk --no-cache add ca-certificates git
WORKDIR /build

# Fetch dependencies
COPY go.mod go.sum ./
RUN go mod download

# Build
COPY . ./
RUN CGO_ENABLED=0 go build

# Create final image
FROM alpine
WORKDIR /
COPY --from=builder /build/myapp .
EXPOSE 8080
CMD ["/myapp"]
ログイン後にコピー

この依存関係の分離を実装することでおよびビルド ステージでは、依存関係のインストールにコンテナ キャッシュを利用し、その後のビルド時間を最小限に抑えることができます。

代替考慮事項

go mod ダウンロード アプローチに加えて、記事「Go 開発者環境のコンテナ化 – パート 2」では、ビルド速度を最適化する別の手法、つまり Go コンパイラー キャッシュの活用について説明しています。両方のオプションを検討すると、特定のプロジェクトと環境に最適な戦略を選択するのに役立ちます。

以上がDocker ビルドを高速化するために、Go モジュールの依存関係のインストールをビルド プロセスから分離するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート