亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
1.小さくて安全な畫像には、マルチステージビルドを使用します
2。ビルドコンテキストとレイヤーキャッシングを最適化します
3.適切なフラグを使用して生産用に構築します
4.セキュリティのために非ルートユーザーとして実行します
5。Docker ComposeまたはOrchestration Toolsを使用して展開します
ボーナス:レバレッジ.dockerignore
ホームページ バックエンド開発 Golang Dockerを使用してGOアプリケーションの構築と展開

Dockerを使用してGOアプリケーションの構築と展開

Jul 25, 2025 am 04:33 AM
go docker

マルチステージDockerビルドを使用して、ビルダー段階でGOバイナリをコンパイルし、アルパインLinuxなどの最小限のランタイム畫像にコピーして、サイズを削減し、攻撃面などにコピーして、小さな安全な畫像を作成します。 2。go.modとgo.sumをコピーしてビルドパフォーマンスを最適化して、最初にdockerレイヤーキャッシュを活用し、依存関係が必要に応じて再ダウンロードされるようにします。 3.靜的コンパイルの場合はCGO_ENABLED = 0、Linux互換性のGoos = Linux、-ldflags = "-S -W"を含むCGO_ENABLED = 0を含むGOバイナリを構築して、デバッグシンボルを削除し、バイナリサイズを縮小します。 4. Docker畫像に専用ユーザーを作成してセキュリティリスクを最小限に抑えることにより、コンテナを非ルートユーザーとして実行します。 5.開発またはテストのためにDocker Composeを使用して展開し、KubernetesやECSなどのオーケストレーションプラットフォームを備えたコンテナレジストリを使用して、環(huán)境全體で一貫した展開を確保します。さらに、.dockerignoreファイルを使用して、テスト資産やドキュメントなどの不要なファイルを除外し、ビルドコンテキストを最小限に抑え、ビルド効率を改善します。

Dockerを使用してGOアプリケーションの構築と展開

Dockerを使用してGOアプリケーションの構築と展開は、環(huán)境全體で一貫性を確保し、展開摩擦を減らし、依存関係管理を簡素化する強力な方法です。 Goの靜的にコンパイルされたバイナリは、Dockerの軽量コンテナモデルと非常によく組み合わされています。効果的に行う方法は次のとおりです。

Dockerを使用してGOアプリケーションの構築と展開

1.小さくて安全な畫像には、マルチステージビルドを使用します

GOアプリをDockerizingするときのベストプラクティスの1つは、マルチステージビルドを使用しています。これにより、1つの段階(完全なGo SDKを使用)でGo Binaryをコンパイルし、最終的なバイナリのみを最小限のランタイム畫像にコピーできます。

 #ステージ1:GOバイナリを作成します
Golangから:1.22としてビルダーとして

workdir /app

#go modファイルをコピーして、依存関係をダウンロードします
go.mod go.sum ./をコピーする
go modダウンロードを実行します

#ソースコードをコピーします
コピー 。 。

#バイナリを構築します(完全な靜的コンパイルのためにCGOを無効にします)
cgo_enabled = 0 goos = linux go build -a -installsuffix cgo -o main ./cmd/api

#ステージ2:最小限のランタイム畫像
Alpineから:最新
apkを実行します-no-cache ca certificatesを追加します
workdir /root /

#ビルダーステージからバイナリをコピーします
コピー -  From = Builder /App /Main。

#ポートを公開し、コマンドを定義します
8080を公開します
cmd ["./main"]

なぜこれが重要なのか:

Dockerを使用してGOアプリケーションの構築と展開
  • 最終的な畫像は小さい(多くの場合30MB未満)。
  • GO TOOLCHAINまたはソースコードは生産に含まれていません。
  • 攻撃面を縮小し、起動時間を改善します。

2。ビルドコンテキストとレイヤーキャッシングを最適化します

レイヤーキャッシングを活用するためにCOPY指示を構築すると、Dockerビルドはより速くなります。

  • go.modgo.sumをコピーして、次にgo mod downloadを実行します。これは、これらのファイルが変更されない限り、Dockerがダウンロードされたモジュールを再利用することを意味します。
  • コードの変更が依存レイヤーを無効にしないように、その後ソースコードをコピーします
 go.mod go.sum ./をコピーする
go modダウンロードを実行します

コピー 。 。

この小さな最適化により、CI/CDおよびローカル再構築中の大幅な時間を節(jié)約できます。

Dockerを使用してGOアプリケーションの構築と展開

3.適切なフラグを使用して生産用に構築します

DockerのGoバイナリを構築するときは、生産に最適化するフラグを使用します。

 GO BUILD -LDFLAGS = "-S -W" -O MAIN ./CMD/API
  • -ldflags="-s -w"ストリップデバッグシンボル、バイナリサイズを縮小します。
  • CGO_ENABLED=0完全な靜的バイナリを保証します( libcなどに外部依存関係はありません)。
  • GOOS=linux Linux用にバイナリが構築されていることを保証します(Docker內で必須)。

それに応じてdockerfileを更新します:

 cgo_enabled = 0 goos = linux go build -a -installsuffix cgo -ldflags = "-s -w" -o main ./cmd/api

4.セキュリティのために非ルートユーザーとして実行します

ルートとしてコンテナを実行することはセキュリティリスクです。最終畫像で非ルートユーザーを作成します。

 Alpineから:最新

apkを実行します-no-cache ca certificatesを追加します
adduser -d -s /bin /sh appuserを実行します

WorkDir /Home /Appuser

コピー -  From = Builder /App /Main。
Chown -R Appuserを実行:Appuser ./
ユーザーAppuser

8080を公開します
cmd ["./main"]

これにより、アプリが最小限の特権で実行されます。


5。Docker ComposeまたはOrchestration Toolsを使用して展開します

ローカル開発または単純な展開については、 docker-compose.ymlを使用してください。

バージョン: '3.8'
サービス:
  API:
    建てる: 。
    ポート:
       - 「8080:8080」
    環(huán)境:
      -env =生産
    再起動:止まらない限り

生産用:

  • 畫像をレジストリに押します( docker push myregistry/myapp:latest
  • Kubernetes、EC、または任意のコンテナオーケストレーションプラットフォームを使用して展開します。

プッシュアンド実行の例:

 docker build -t myapp:最新。
DockerタグMyApp:最新のMyRegistry/MyApp:最新
Docker Push MyRegistry/MyApp:最新

#ローカルで実行します
Docker run -P 8080:8080 myregistry/myApp:最新

ボーナス:レバレッジ.dockerignore

.gitignoreのように、 .dockerignoreを使用して、ビルドコンテキストから不要なファイルを除外します。

 .git
.gitignore
readme.md
dockerfile
.Dockerignore
*.md
go.mod
go.sum

待ってください - go.modgo.sum無視しないでください。代わりに、開発のみの資産を除外します。

 .git
.gitignore
readme.md
*。テスト
*.sh
CMD/**/testData

これにより、ビルドコンテキストが小さくなり、ビルドが高速化されます。


基本的に、GoのシンプルさとDockerの移植性を組み合わせることで、迅速で安全な、一貫した展開が得られます。マルチステージビルド、適切なユーザー許可、スマートレイヤーにより、GOサービスはすぐに制作可能になります。

以上がDockerを使用してGOアプリケーションの構築と展開の詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP用の生産対応Docker環(huán)境の作成 PHP用の生産対応Docker環(huán)境の作成 Jul 27, 2025 am 04:32 AM

正しいPHP Basicイメージを使用し、安全で最適化されたDocker環(huán)境を構成することが、生産を実現(xiàn)するための鍵です。 1.攻撃面を減らしてパフォーマンスを向上させるための基本畫像としてPHP:8.3-fpm-alpineを選択します。 2.カスタムPHP.iniを介して危険な機能を無効にし、エラーディスプレイをオフにし、OpCacheとJITを有効にしてセキュリティとパフォーマンスを強化します。 3. NGINXを逆プロキシとして使用して、機密ファイルへのアクセスを制限し、PHPリクエストをPHP-FPMに正しく転送します。 4.マルチステージ最適化畫像を使用して開発依存関係を削除し、非ルートユーザーを設定してコンテナを実行します。 5. CRONなどの複數(shù)のプロセスを管理するためのオプションの監(jiān)督。 6.展開前に機密情報漏れがないことを確認します

Goで反射を使用する方法は? Goで反射を使用する方法は? Jul 28, 2025 am 12:26 AM

usereflect.valueofandReft.typeoftogetruntimevaluesAndtypes; 3.MODIFYVALUESVIAREFLECT.VALUE.ELEM()ANDCANSET()abspassingapointer;

SwitchステートメントはGOでどのように機能しますか? SwitchステートメントはGOでどのように機能しますか? Jul 30, 2025 am 05:11 AM

Goのスイッチステートメントは、デフォルトでプロセス全體で実行されず、最初の條件に合わせた後に自動的に終了します。 1.スイッチはキーワードで始まり、1つまたはnoの値を持ち運ぶことができます。 2。上から下へのケースマッチは、最初の一致のみが実行されます。 3.複數(shù)の條件をコンマでリストして、同じケースに一致させることができます。 4.手動で休憩を追加する必要はありませんが、強制することができます。 5.デフォルトは、通常最後に配置されている比類のないケースに使用されます。

GOでタイムアウトを処理する方法は? GOでタイムアウトを処理する方法は? Jul 27, 2025 am 03:44 AM

USECONTEXT.WITHTIMEOUTCOCREATEACANCELLECTEXTEXTWITHEDEDLINEANDALWAYSCALLCANCEL()toreLeaSeresources.2.forhttprequests、setimeoutsUsinghttp.client.timeoutorusecontextviahttp.newrequestwestwestwestextextextextfore-requestfore-requestfor-requestfore-requestfore-requestfore-requestfore-requestfore-context

GOでの効率的なJSONの解析と操作 GOでの効率的なJSONの解析と操作 Jul 27, 2025 am 03:55 AM

UsestructswithPERJSontagsFeRpredictabledatoensurefast, safeparsingwithcompile-timetypesafety.2.avoidmap [string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {string] interface {strack] interface {string] interface {string {string] {string] {string] {string] } duetoreflectionOveradruntruntimetypeasSertionsunlessingwithrulydynamicjson.3.usejson.rawmessagefordeferredorrederedectivepp

キャンセルとタイムアウトのためにGOでコンテキストパッケージを使用する キャンセルとタイムアウトのためにGOでコンテキストパッケージを使用する Jul 29, 2025 am 04:08 AM

UseContextTopropagateCancellationandDeadlinesAcrossgoroutines、Cooperativecancellationinhttpservers、Backgroundtasks、andChainedCall.2.WithContext.WithCancel()、CreateAcancellableContextandCallcancel()

GOにGraphQLサーバーを構築します GOにGraphQLサーバーを構築します Jul 28, 2025 am 02:10 AM

Intializeagomodulewithgomodinit、2.installgqlgencli、3.defineaschemainschema.graphqls、4.rungqlgeninittogeneratemodelsandresolv ers、5。ImplementResolverfunctionsfor QueriesandMutations、6。setupanhttpstpserverusingthegeneratedschema、および7.runtheservertoaccesgr

GOのネストされたループから脫卻する方法 GOのネストされたループから脫卻する方法 Jul 29, 2025 am 01:58 AM

Goでは、ネストされたループから抜け出すには、ラベル付きのブレークステートメントを使用するか、機能を介して戻ります。 1。ラベル付きブレークを使用します:アウターループなどの外側ループの前にタグを配置します。 2。ネストされたループを関數(shù)に入れ、條件が満たされたら事前に戻り、それによってすべてのループを終了します。 3.フラグ変數(shù)やgotoを使用しないでください。前者は長く間違いを犯すのが簡単で、後者は推奨されません。正しい方法は、タグがそれ以降ではなくループの前でなければならないということです。これは、GOの多層ループから抜け出すための慣用的な方法です。

See all articles