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 サイトの他の関連記事を参照してください。