より小さなサイズとより速いスタートアップのためにJava Docker画像を最適化する
Eclipse-Temurin:17-Jre-alpineまたは-slimなどの小さな基本画像を使用して、体積を減らします。 2。マルチステージ構造を使用してコンピレーションを分離し、環境を実行して、ビルドツールとソースコードを最終画像に投げないようにします。 3. JARパッケージ自体を最適化し、役に立たない依存関係を削除し、圧縮を有効にし、Spring Boot Hierarchical JARを検討します。 4.クラスデータ共有(CD)を有効にして、起動時間とメモリの使用量を削減します。 5. -XX:USECONTAINERSUPPORTおよび-XX:MAXRAMPERCENTAGEなどのJVMコンテナ化パラメーターを調整して、コンテナリソースの制限に適応します。 6. GRAALVMネイティブミラーリングは、非常に高いスタートアップ速度要件を備えたシナリオで使用できます。これにより、パフォーマンスが大幅に向上しますが、建設の複雑さが向上します。最初の5つのアイテムを組み合わせた使用は、低い複雑さで優れた最適化結果を達成でき、ネイティブミラーリングは、コールドスタートに敏感なクラウドネイティブアプリケーションに適しています。
Java Docker画像の最適化は、ファイルサイズを縮小するだけではありません。特にクラウドやサーバーレス環境での展開の速度、攻撃面の削減、起動時刻の速さです。 Java Docker Imagesの貸し手をより効率的にする方法は次のとおりです。

1.小さなベース画像を使用します
選択したベース画像は、サイズに大きな影響を与えます。従来のopenjdk:17-jdk
またはopenjdk:17
画像は、Debianなどの完全なLinux分布に基づいており、500MBを超える可能性があります。
より良いオプション:

-
eclipse-temurin:17-jre-alpine
- Alpine Linuxは小さく(〜5MBベース)、JREのみがフットプリントを削減します。 -
eclipse-temurin:17-jre-slim
- Debianベースですが、剥がれました。 Alpineよりも互換性があり、完全なJDKよりもはるかに小さい。
# の代わりに: #openjdkから:17 # 使用: Eclipse-Temurinから:17-jre-alpine
⚠️注:Alpineは
glibc
の代わりにmusl
を使用しています。これにより、一部のネイティブライブラリと互換性の問題が発生する可能性があります。問題が発生した場合は、代わりに-slim
を使用してください。
2。別々の段階でビルドして実行します(マルチステージビルド)
ビルドツール、ソースコード、依存関係を最終画像にバンドリングしないでください。

#マルチステージ:フルJDKでビルドし、JREで実行します Eclipse-Temurinから:ビルダーとしての17-jdk-alpine workdir /app コピー 。 。 ./gradlew build -xテストを実行します Eclipse-Temurinから:17-jre-alpine workdir /app コピー - f -fuilder /app/build/libs/app.jar app.jar cmd ["java"、 "-jar"、 "app.jar"]]
これにより、ランタイムイメージが最小限に抑えられます。グレーダー、ソースファイル、開発ツールはありません。
3。瓶自体を最適化します
含まれるすべての依存関係を備えた脂肪瓶(Uber-jar)は便利ですが、肥大化することができます。
ヒント:
- 未使用の依存関係を削除します-依存関係チェックや手動のレビューなどのツールを使用します。
- Spring Boot's Shin Jar(該当する場合)を使用します- 共有レイヤーへのオフロード依存関係。
- JAR圧縮を有効にする- ほとんどのビルドツールはデフォルトでこれを行いますが、検証します。
プロのヒント:スプリングブートを使用する場合は、より良いDockerレイヤーキャッシングのためにJARコンテンツをレイヤー化するコンテナ画像サポートを備えたスプリングブート3.2を検討してください。
4.クラスデータ共有を有効にする(CD)
クラスのデータ共有により、JVMはプリロードおよびメモリマップコアクラスを使用して、スタートアップの時間とメモリの使用量を削減できます。
画像ビルド中にCDSアーカイブを生成します。
Eclipse-Temurinから:17-jre-alpine app.jar /app.jarをコピーします #CDSアーカイブを生成します Java -xshareを実行する:dump -xx:archiveclassesatexit = /app.jsa -jar /app.jar #またはメインクラスを知っている場合: #Java -CP app.jar -xshare:dump -xx:archiveclassesatexit =/app.jsa com.example.mainを実行します #実行時にCDを使用します EntryPoint ["Java"、 "-xshare:auto"、 "-xx:sharedarchivefile =/app.jsa"、 "-jar"、 "app.jar"]]
これにより、特に多くの依存関係を持つアプリでは、起動時間を10〜30%削減できます。
5.コンテナのJVM設定をチューニングします
デフォルトでは、JVMはコンテナメモリの制限を尊重しない場合があります。
これらのフラグを追加します:
EntryPoint ["Java"、\ "-xx:usecontainersupport"、\ "-xx:maxrampercentage = 75.0"、\ "-xshowsettings:vm"、\ "-jar"、 "app.jar"]]
-
UseContainerSupport
JVMがコンテナの制限を検出できます。 -
MaxRAMPercentage
、ヒープのオーバーアロークを回避します。
これにより、OOMが殺害を防ぎ、スタートアップの予測を改善します。
6.極端な最適化のために、ネイティブ画像(graalvm)を検討してください
最速のスタートアップと最小のフットプリントについては、 GraalVMネイティブ画像を使用してJavaアプリをネイティブバイナリにコンパイルします。
長所:
- 100万秒のスタートアップ。
- より小さなメモリフットプリント。
- より小さな画像(JVMは必要ありません)。
短所:
- より長いビルド時間。
- 限られた反射/動的クラスロード(設定が必要)。
- より大きなビルド画像。
例:
#graalvmでステージを構築します ghcr.io/graalvm/graalvm-jdk:17からビルダーとして GUインストールネイティブイメージを実行します コピー 。 。 ネイティブイメージ-jar app.jarを実行します #最終段階 Alpineから:最新 コピー - From = Builder App /App EntryPoint ["./App"]
高速スタートアップが重要なマイクロサービス、サーバーレス、またはCLIツールに最適です。
利益の概要
最適化 | サイズの削減 | スタートアップの改善 |
---|---|---|
アルパイン/JREベース | 30〜50% | マイナー |
マルチステージビルド | 20–40% | なし |
CD | 最小限 | 10–30% |
ネイティブ画像 | 50–80% | 80〜95%速い |
ニーズに基づいて適切なコンボを選択してください。ほとんどのアプリでは、スリムベースのマルチステージCDSは、複雑さなしに優れた結果をもたらします。クラウドネイティブサービスの場合、 Graalvmネイティブは投資する価値があります。
基本的に、1つの瓶を実行するためだけにデータセンターのJDK相当のJDKを出荷しないでください。
以上がより小さなサイズとより速いスタートアップのためにJava Docker画像を最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

@ServerEndPointを使用してパスを定義するWebSocketサーバーエンドポイントを作成し、 @Onopen、 @Onmessage、 @Onclose、 @Onerrorを介して接続、メッセージ受信、閉鎖、エラーを処理します。 2. Javax.Websocket-API依存関係が展開中に導入され、コンテナによって自動的に登録されることを確認してください。 3. Javaクライアントは、ContainerProviderを介してWebSocketContainerを取得し、ConnectToServerを呼び出してサーバーに接続し、@ClientEndPoint Annotationクラスを使用してメッセージを受信します。 4。セッションGetBasicreを使用します

dockerisaplatformpackaging、出荷、andrunningapplicationsinightionsingweight、隔離されたnostoskernel、virtualmachines.2.installdockerdesktoponwindowsormacos、oruseetecurlcommandinux、thentestestestwithdockerurunhello

PrepareyourapplicationbyusingMavenorGradletobuildaJARorWARfile,externalizingconfiguration.2.Chooseadeploymentenvironment:runonbaremetal/VMwithjava-jarandsystemd,deployWARonTomcat,containerizewithDocker,orusecloudplatformslikeHeroku.3.Optionally,setup

phpMyAdminを効果的に保護するには、複数のセキュリティ対策を採用する必要があります。 1. IPを介してアクセスを制限すると、信頼できるIP接続のみが許可されます。 2.デフォルトのURLパスを推測が容易ではない名前に変更します。 3.強力なパスワードを使用して、最小限の権限を備えた専用のMySQLユーザーを作成すると、2要素認証を有効にすることをお勧めします。 4.既知の脆弱性を修正するには、phpmyAdminバージョンを維持します。 5. WebサーバーとPHP構成を強化し、危険な機能を無効にし、ファイルの実行を制限します。 6。信任状の漏れを防ぐために、HTTPSに通信を暗号化するように強制します。 7. HTTP基本認証を使用していない場合、または使用していない場合はPHPMyAdminを無効にします。 8.ログを定期的に監視し、fail2banを構成して、ブルートフォースの亀裂から防御します。 9。セットアップを削除します
![現在、NVIDIA GPUに接続されたディスプレイを使用していません[修正]](https://img.php.cn/upload/article/001/431/639/175553352135306.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
ifyousee "youarenotusing adisplayatchedtoannvidiagpu、" surseyourmonitoristuntedtothenvidiagpuport、configuredisissettingsintingsintingsintinginstingsintingduandcleaninstall、およびsettheprimarysodiscutodiscreteinbios/ueftereed

theasertkeywordinjavaisusedtoeas sumptionsduringDevelopment、throwinganassertionerroriftheconditionispalse.2

XSLTパラメーターは、外部の通過値を介した動的変換の重要なメカニズムです。 1.宣言されたパラメーターを使用し、デフォルト値を設定します。 2。XSLTarGumentListなどのインターフェイスにアプリケーションコード(C#など)から実際の値を渡します。 3.テンプレート内の$ paramName参照パラメーターを介して、条件付き処理、ローカリゼーション、データフィルタリング、または出力形式を制御します。 4.ベストプラクティスには、意味のある名前の使用、デフォルト値の提供、関連するパラメーターのグループ化、および値の検証が含まれます。パラメーターを合理的に使用すると、XSLTスタイルのシートが非常に再利用可能で保守可能になり、同じスタイルシートが異なる入力に基づいて多様な出力結果を生成できます。

The oilpaintfilterinphotoshopisgreedouturedutivesuredivedocumentmodeorlayertype
