ホームページ >バックエンド開発 >Golang >Go で Docker イメージの静的バイナリを最初から構築する方法

Go で Docker イメージの静的バイナリを最初から構築する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 17:17:30844ブラウズ

How to Build Static Binaries in Go for Docker Images from Scratch?

Go で静的バイナリを作成するためのフラグ

Docker イメージを最初から構築する場合、実行中のエラーを防ぐために静的バイナリが必要です。ただし、コマンド RUN go build -o /go/bin/myapp は、「そのようなファイルまたはディレクトリはありません」エラーで失敗するバイナリを生成する可能性があります。

これを解決するには、次のフラグが必要です:

RUN CGO_ENABLED=0 go build -o /go/bin/myapp -a -ldflags '-extldflags "-static"' .

説明:

  • CGO_ENABLED=0: CGO (C から Go を呼び出す) を無効にします。これは、Go プログラムで次のことを可能にする機能です。 Cコードを呼び出します。 Linux は C ライブラリを動的にリンクし、静的バイナリをビルドするときに問題が発生する可能性があるため、これが必要です。
  • -a: 最新の状態であるかどうかに関係なく、すべてのパッケージと依存関係を強制的に再構築します。 -date.
  • -ldflags '-extldflags "-static"': 外部リンカーに渡すフラグを指定します。この場合、 -static は静的リンクを使用し、必要なライブラリがすべてバイナリに埋め込まれるようにすることを示します。

CGO_ENABLED=0 と -ldflags '-extldflags " の両方を使用することが重要です。 -static"' 理由:

  • CGO_ENABLED=0 は CGO を無効にしますが、静的リンクは保証されません。
  • -ldflags '-extldflags "-static"' は静的リンクを強制しますが、無効にしませんCGO.

両方のフラグを使用すると、結果のバイナリが静的であり、外部ライブラリに依存しないことを保証できます。

以上がGo で Docker イメージの静的バイナリを最初から構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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