
Docker & Containerization
Dockerfile、マルチステージビルド、イメージの最適化、docker-compose、コンテナオーケストレーション
20 面接問題·
Senior
1Goアプリケーションでマルチステージビルドを使用する主な理由は何ですか?
1
Goアプリケーションでマルチステージビルドを使用する主な理由は何ですか?
回答
マルチステージビルドはコンパイル環境を最終イメージから分離します。ビルドステージには完全なGo SDK(数百MB)が含まれますが、最終イメージにはコンパイル済みのバイナリのみが含まれます。これによりイメージサイズが大幅に削減され(約800MBから数MBへ)、本番環境で不要なビルドツールを排除することで攻撃対象領域を最小化します。
2サイズと攻撃対象領域を最小化するために、本番環境のGoアプリケーションに推奨されるベースイメージはどれですか?
2
サイズと攻撃対象領域を最小化するために、本番環境のGoアプリケーションに推奨されるベースイメージはどれですか?
回答
scratchイメージはオペレーティングシステムを持たない空のイメージです。Goはlibcやその他のシステム依存関係を必要としない静的バイナリにコンパイルされるため、scratchを使用できます。これにより可能な限り最小のイメージ(数MB)が生成され、悪用可能なツールやシェルが存在しないため最高のセキュリティを提供します。distrolessやalpineは有効ですが、最適ではない代替手段です。
3scratchイメージと互換性のあるバイナリを作成するために必要なGoのコンパイルフラグはどれですか?
3
scratchイメージと互換性のあるバイナリを作成するために必要なGoのコンパイルフラグはどれですか?
回答
CGO_ENABLED=0はcgoを無効化し、netやos/userのようなパッケージにpure Goの実装を強制的に使用させます。これがないと、バイナリはlibcへの動的依存関係を持つことになります。GOOSとGOARCHはターゲットプラットフォームを指定します。これらのフラグを組み合わせると、外部依存関係のない完全な静的バイナリが生成され、scratchに最適です。
4
Goアプリケーションのビルド時にDockerのレイヤーキャッシュを最適化するにはどうすればよいですか?
5
scratchと比較して、GoにGoogle Distrolessイメージを使用する利点は何ですか?
+17 面接問題
その他のGo面接トピック
Goの基礎
Junior
25問Goのデータ構造
Junior
20問Go のインターフェース
Junior
18問エラー処理
Junior
20問Goroutine の基礎
Junior
20問Channels
Junior
22問Go Modules
Mid-Level
18問HTTP サーバー
Mid-Level
24問HTTPクライアント
Mid-Level
18問JSON エンコーディング
Mid-Level
20問Database/SQL
Mid-Level
22問context パッケージ
Mid-Level
20問Testing
Mid-Level
22問並行処理パターン
Mid-Level
24問同期プリミティブ
Mid-Level
22問Go Web フレームワーク
Mid-Level
20問REST API 設計
Mid-Level
20問gRPC
Mid-Level
22問Reflection
Senior
20問メモリ管理
Senior
24問パフォーマンス最適化
Senior
22問Generics
Senior
20問Go Design Patterns
Senior
24問Microservices
Senior
24問セキュリティと認証
Senior
24問Kubernetes Basics
Senior
22問高度な Go
Senior
20問CLI開発
Senior
20問