Docker 階層化パッケージを使用して Spring Boot を設定する方法

Docker 階層化パッケージを使用して Spring Boot を設定する方法

Spring Boot プロジェクトでは、Docker コンテナ、jar、war の階層化パッケージを使用します。

Spring Boot は、階層化パッケージング技術をサポートするようになりました。これを使用して、Docker パッケージングを高速化し、非常に迅速にビルドしてみましょう。

レイヤー設定

まず、pom で同様の設定を行う必要があります。

<プラグイン>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <バージョン>${spring-boot.version}</バージョン>
                    <構成>
                        <!-- 階層化パッケージのサポートを有効にする -->
                        <レイヤー>
                            <enabled>有効</enabled>
                        </レイヤー>
                    </構成>
                    <処刑>
                        <実行>
                            <目標>
                                <goal>再パッケージ化</goal>
                            </目標>
                        </実行>
                    </処刑>
                </プラグイン>

spring-boot-maven-pluginプラグインを宣言し、レイヤー構成を設定して、レイヤー サポートを有効にします。

パッケージ化後、jar パッケージまたは war パッケージをチェックして、階層化されたファイルのリストを含む追加のlayers.idx ファイルを見つけます。

- 「依存関係」:
  - "WEB-INF/lib-provided/"
  - "WEB-INF/lib/HikariCP-4.0.3.jar"
  - "WEB-INF/lib/aspectjweaver-1.9.5.jar"
  ...
  ...
- 「スプリングブートローダー」:
  - 「org/」
- 「スナップショットの依存関係」:
  - "WEB-INF/lib/ms-fundmain-base-1.0-SNAPSHOT.jar"
  - "WEB-INF/lib/xpower-main-1.0.3-SNAPSHOT.jar"
  - "WEB-INF/lib/xpower-utils-1.0.3-SNAPSHOT.jar"
- "応用":
  - 「META-INF/」
  - "WEB-INF/classes/"
  - 「WEB-INF/jetty-web.xml」
  - 「WEB-INF/layers.idx」
  - 「ページ/」
  - 「静的/」

このファイルは、次の階層化設定の基礎となります。

jar の場合は、依存するすべての jar パッケージをリストするclasspath.idxファイルもあります。

パッケージ化する場合は、docker build またはdocker-maven-pluginを使用して実現できます。

注: spring-boot-maven-plugin

Docker パッケージング機能がありますが、ダウンロードとパッケージングの速度が遅すぎて、非常に感動的なので、ここではお勧めしません。 --- 利点は、Dockerfile を書く必要がないため、シンプルで便利です。欠点は、Docker ファイルをカスタマイズできないことです。
構成は次のようになります。

<プラグイン>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <構成>
        <画像>
            <!--イメージ名の設定-->
            <名前>127.0.0.1:5000/springcnscud/${プロジェクト名}:${プロジェクトバージョン}}</名前>
            <!-- イメージがパッケージ化された後、自動的にイメージ ウェアハウスにプッシュされます -->
            <publish> 真</publish>
        </画像>
        <ドッカー>
            <!--Docker リモート管理アドレス-->
            <ホスト>http://127.0.0.1:2375</ホスト>
            <!-- TLS なしでアクセス -->
            <tlsVerify> 偽</tlsVerify>
            <!-- Docker プッシュ イメージ リポジトリ構成 -->
            <レジストリを公開>
                <!--ミラーリポジトリのユーザー名をプッシュ-->
                <ユーザー名>cnscud</ユーザー名>
                <!--イメージリポジトリのパスワードをプッシュ-->
                <パスワード>123456</パスワード>
                <!--ミラーリポジトリのアドレスをプッシュ-->
                <url>http://127.0.0.1:5000</url>
            </レジストリを公開>
        </ドッカー>
    </構成>
</プラグイン>

docker-maven-plugin + カスタム Dockerfile を使用する場合:

pom 構成:

    <プラグイン>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <バージョン>${docker.plugin.version}</バージョン>
                    <構成>
                        <!-- Docker リモート API -->
                        <!-- このマシンは、ポート 2375 をリッスンしていない場合はコメント アウトできます -->
                        <dockerホスト>${docker.host}</dockerホスト>
                        <!-- Docker イメージ プライベート サーバー -->
                        <レジストリ>${docker.registry}</レジストリ>

                        <画像>
                            <画像>
                                <名前>${docker.registry}/${docker.namespace}/${プロジェクト名}:${プロジェクトバージョン}}</名前>
                                <ビルド>
                                    <dockerFileDir>${project.basedir}</dockerFileDir>
                                </ビルド>
                            </画像>
                        </画像>
                    </構成>
                </プラグイン>

Spring Boot の jar モードでの Dockerfile 形式を見てみましょう。

# 階層化構築、加速された増分構築 FROM adoptopenjdk/openjdk8:centos-slim as builder

WORKDIR アプリケーション
ARG JAR_FILE=ターゲット/*.jar
${JAR_FILE} app.jar をコピーする
実行 java -Djarmode=layertools -jar app.jar extract && rm app.jar

adoptopenjdk/openjdk8:centos-slim より

ラベル メンテナー="[email protected]"

ENV TZ=アジア/上海
実行 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
環境変数 JAVA_OPTS="-Xms128m -Xmx256m"

WORKDIR アプリケーション

コピー --from=builder /application/dependencies/ ./
コピー --from=builder /application/snapshot-dependencies/ ./
コピー --from=builder /application/spring-boot-loader/ ./
コピー --from=builder /application/application/ ./

エクスポーズ9001

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.JarLauncher"]

ご自身の状況に合わせてjdkを修正し、jarにはJarLauncherをご利用ください。

戦争だとしたら、どうやって設定するのでしょうか?

まず、独立して実行したい場合は、組み込みのTomcatまたはJettyを使用し、pomにプロバイダーを設定しないでください。

 <依存関係>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </依存関係>

この方法では、パッケージ化時に埋め込まれた Tomcat が含まれます。

Dockerfile は次のように設定されています。

# 階層化構築、加速された増分構築 FROM adoptopenjdk/openjdk8:centos-slim as builder

WORKDIR アプリケーション
ARG JAR_FILE=ターゲット/*.war
${JAR_FILE} app.war をコピーする
実行 java -Djarmode=layertools -jar app.war extract && rm app.war

adoptopenjdk/openjdk8:centos-slim より
ラベル メンテナー="[email protected]"

ENV TZ=アジア/上海
実行 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
環境変数 JAVA_OPTS="-Xms128m -Xmx256m"

WORKDIR アプリケーション

コピー --from=builder /application/dependencies/ ./
コピー --from=builder /application/snapshot-dependencies/ ./
コピー --from=builder /application/spring-boot-loader/ ./
コピー --from=builder /application/application/ ./

エクスポーズ8000

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.WarLauncher"]

ファイル名をメモし、WarLauncher を使用して実行します。

外部Tomcatの使用

実験なしでは、レイヤーの構築は面倒な場合があります...しかし、理論的には、Tomcat自体に解凍させるのではなく、解凍されたwarパッケージを使用することもできます。

ここでは試しません。要点は、ベースパッケージを tomcat に変更し、実行中の ENTRYPOINT を tomcat に変更し、中間のコンテナにファイルをコピーすることです。

tomcat:9.0から

#target の下の xx.war ファイルを /usr/local/tomcat/webapps/ にコピーします。ADD ./target/xx.war /usr/local/tomcat/webapps/

#EXPOSE ポート 8080

#起動コマンドENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"] を設定します

Docker レイヤード パッケージングを使用した Spring Boot に関するこの記事はこれで終わりです。Docker レイヤード パッケージングに関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springboot パッケージングを Docker イメージとして実装し、デプロイする
  • Spring Boot パッケージング Docker イメージの最もシンプルな実装
  • Springboot マイクロサービス パッケージング Docker イメージ プロセスの分析
  • Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

<<:  MySQLのint主キーの自己増分の問題を解決する

>>:  CSS3 で less のテキストの長い影を実装する

推薦する

良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...

Layui は複数条件クエリのサンプルコードを実装します

最近ファイルシステムを作ったのですが、フィールドが多すぎることに気づきましたページングを使用した複数...

Docker を使用した RabbitMQ 環境のデプロイの詳細な紹介

前提条件: Dockerはすでにインストールされています1. 画像を見つける(方法は2つあります) ...

mysql5.7.20 のインストールと設定方法のグラフィック チュートリアル (mac)

MySQL 5.7.20のインストールと設定方法のグラフィックチュートリアルをあなたと共有します1...

react+antdプロジェクトをゼロから構築する方法を教えます

これまでの記事はすべて私自身の学習記録であり、主に以前に遭遇した落とし穴を忘れないようにするためのも...

Chrome Dev Tools を使用してページのパフォーマンスを分析する方法 (フロントエンドのパフォーマンス最適化)

背景開発やデバッグには Chrome Dev Tools がよく使用されますが、ページのパフォーマン...

モバイルデバイスにおける適応レイアウトの問題に関する簡単な説明 (レスポンシブ、rem/em、Js ダイナミクス)

3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイ...

フレックスマルチカラムレイアウトで発生する問題と解決策の詳細な説明

フレックス レイアウトは間違いなくシンプルで使いやすいです。レイアウトをよりシンプルかつ高速にします...

非常に便利なオープンソース Docker ツール 5 つを強くお勧めします

導入Docker コミュニティは、さまざまなユースケースを処理するのに役立つ多くのオープンソース ツ...

Youdaの新しいプチビューの実装

目次序文導入ライブ使いやすいルートスコープマウント要素の指定ライフサイクルコンポーネントグローバル状...

MySQLを安全にシャットダウンする方法

MySQL サーバーをシャットダウンする場合、シャットダウン方法に応じてさまざまな問題が発生する可能...

VueはElement el-uploadコンポーネントを使用してピットに足を踏み入れます

目次1. 基本的な使い方2. 画像量の制御3. 画像形式の制限/複数の画像を選択可能補足: vueプ...

同じ日の最初の3つのデータを取得するためのMySQLタイムラインデータ

テーブルデータを作成する テーブル `praise_info` を作成します ( `id` bigi...

Reactのdiffアルゴリズムの詳細な分析

Reactのdiffアルゴリズムの理解diffアルゴリズムは、 Virtual DOMの変更された部...

MIME タイプの完全なリスト

MIME タイプとは何ですか? 1. まず、ブラウザがコンテンツを処理する方法を理解する必要がありま...