Spring Boot Docker パッケージング ツールの概要

Spring Boot Docker パッケージング ツールの概要

最近、同社のアプリケーションは数十個のアプリケーションをテストしてリリースするのは面倒であり、環境要因により展開時にさまざまな問題が発生するため、コンテナ化の準備を進めている。開発、テスト、本番環境で一貫した環境を維持するために、コンテナ技術が導入されました。まずはエッジプロジェクトで試して経験を積みました。今日は、一般的なSpring Boot Dockerパッケージングツールをいくつか簡単にまとめました。

スプリングブートDocker

Spring Boot アプリケーションでは、異なる環境を定義するために異なる識別子を合意することができます。たとえば、dev は開発環境を表し、test はテスト環境を表します。対応する構成ファイルは、apppcation-dev.yaml と apppcation-test.yaml です。 spring.profiles.active を宣言して、対応する環境構成をアクティブ化します。たとえば、dev 環境をアクティブ化する場合は、spring.profiles.active=dev とします。完全な起動コマンドは次のとおりです。

java -Djava.security.egd=ファイル:/dev/./urandom -Dspring.profiles.active=dev -jar spring-boot-app.jar

上記のコマンドに従って、複数の環境に適応できる Dockerfile を作成します。

# adoptopenjdk/openjdk8 から openjdk イメージをインポートします 
#著者を宣言する LABEL AUTHOR=felord OG=felord.cn 
# ログなどのいくつかの便利なフォルダをマウントします VOLUME ["/tmp","/logs"] 
#デフォルトの開発構成ファイルを動的に有効にするための環境パラメータを宣言します 
環境アクティブ=dev 
# ポートを公開 EXPOSE 8080 
# アプリケーションをパッケージ化した後、jar ファイルをコピーして名前を変更します ADD /target/flyway-spring-boot-1.0.0.jar app.jar 
# コンテナの起動時に最初に実行されるコマンドは、アプリケーションを起動するために使用されます ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=${ACTIVE}","-jar","app.jar"]

パッケージ化された Docker イメージは、docker run に --env ACTIVE=test を追加することで、環境を動的に変更できます。単純に Dockerfile を書くだけでは、DevOps には不便です。

Dockerイメージのライフサイクル

自動的にビルドし、リポジトリにプッシュし、イメージをプルし、一連のパイプライン操作を実行できる必要があります。幸いなことに、このプロセスを実現するのに役立つツールが市場には数多くあります。

spring-boot-maven-プラグイン

これは、特定のバージョン 2.x で Docker イメージ構築機能を提供する公式の Spring Boot プラグインです。

<プロジェクト> 
 <ビルド> 
  <プラグイン> 
   <プラグイン> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <構成> 
     <画像> 
     <名前>docker.repo.com/library/${project.artifactId}:${project.version}</名前> 
      <publish> 真</publish> 
     </画像> 
     <ドッカー> 
      <レジストリを公開> 
       <ユーザー名>ユーザー</ユーザー名> 
       <password>秘密</password> 
       <url>https://docker.repo.com/v1/</url> 
       <メール>[email protected]</メール> 
      </レジストリを公開> 
     </ドッカー> 
    </構成> 
   </プラグイン> 
  </プラグイン> 
 </ビルド> 
</プロジェクト>

Docker プライベート ウェアハウスを構成した後、mvn clean spring-boot:build-image を使用してイメージをビルドできます。

この方法の利点は、追加の依存関係がないことです。欠点は、ビルドコンポーネントを GitHub からダウンロードする必要があり、ネットワークが良好でないと失敗しやすいことです。

Spotify Maven プラグイン

Spotify Maven プラグインは現在人気のある選択肢です。アプリケーション開発者は Dockerfile を記述し、それをプロジェクトの src/main/docker ディレクトリに配置する必要があります。その後、次の方法でインポートできます。

<プラグイン> 
          <groupId>com.spotify</groupId> 
          <artifactId>dockerfile-maven-plugin</artifactId> 
          <バージョン>1.4.8</バージョン> 
          <構成> 
              <リポジトリ>repo.com/${project.artifactId}</リポジトリ> 
          </構成> 
      </プラグイン>

このプラグインは、ビルド、タグ付け、リモートプライベートリポジトリへの公開にそれぞれ使用される、mvn dockerfile:build、mvn dockerfile:tag、mvn dockerfile:push の 3 つのコマンドを提供します。非常にシンプルです。

これは非常に使いやすいプラグインです。唯一の要件は、Dockerfile を記述できることです。カスタマイズの要件が高い場合に使用できます。

Jib Maven プラグイン

これについては以前の記事ですでに紹介しているので、詳しく知ることができます。これは、Docker イメージをパッケージ化するために使用できる、Google のオープンソース OCI イメージ パッケージ化ツールであり、ほとんどの場合のニーズを満たします。しかし、カスタマイズしたい場合は、まだ簡単ではないため、公式ドキュメントを読む必要があります。 JIb を使用する場合、最初の Dockerfile は次のように構成する必要があります。

<プラグイン> 
    <groupId>com.google.cloud.tools</groupId> 
    <artifactId>jib-maven-plugin</artifactId> 
    <バージョン>3.0.0</バージョン> 
    <構成> 
        <から> 
            <画像>openjdk/openjdk8 を採用</画像> 
        </from> 
        <に> 
            <画像>docker.repo.com/library/${project.artifactId}</画像> 
            <認証> 
                <username>フェロード</username> 
                <パスワード>xxxxxx</パスワード> 
            </auth> 
            <タグ> 
                <タグ>${プロジェクト.バージョン}</タグ> 
            </タグ> 
        </に> 
        <追加ディレクトリ> 
            <パス> 
                <パス> 
                    <from>target/${project.artifactId}-${project.version}.jar</from> 
                    <includes>*.jar</includes> 
                    <into>/app.jar</into> 
                </パス> 
            </パス> 
        </extraDirectories> 
        <containerizingMode>パッケージ化</containerizingMode> 
        <コンテナ> 
            <ボリューム>/tmp、/logs</ボリューム> 
            <ポート> 
                <ポート>8080</ポート> 
            </ポート> 
            <環境> 
                <active>開発</active> 
            </環境> 
            <エントリポイント> 
                java、-Djava.security.egd=ファイル:/dev/./urandom、-Dspring.profiles.active=${active}、-jar、/app.jar 
            </エントリポイント> 
            <creationTime>USE_CURRENT_TIMESTAMP</creationTime> 
        </コンテナ> 
    </構成> 
</プラグイン>

ローカルの Docker 環境が不要で、階層化構築やイメージスリム化に対応しているため導入しやすいのがメリットですが、カスタマイズが難しいのがデメリットです。

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

以下もご興味があるかもしれません:
  • SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)
  • Springboot docker jenkins でイメージを自動的にデプロイしてアップロードするための詳細な手順
  • Springboot パッケージングを Docker イメージとして実装し、デプロイする
  • Spring Boot パッケージング Docker イメージの最もシンプルな実装
  • Springboot マイクロサービス パッケージング Docker イメージ プロセスの分析
  • Spring Boot のパッケージ化と Docker リポジトリへのアップロードの詳細な手順

<<:  小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現するためにCSSを使用する

>>:  MySQLデータ損失の原因と解決策

推薦する

Ubuntu 20.04 に MySql5.7 をインストールして構成するための詳細なチュートリアル

目次1. Ubuntuソースの変更2. MySQLをインストールする3. 新しいユーザーを作成し、権...

CSS リセットスタイルリセットの実装例

はじめに: すべてのブラウザには、「ユーザー エージェント スタイル シート」と呼ばれる、すべてのペ...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

ローカルサーバーを構築するためのwebpack-dev-serverの実装

目次序文webpack-deb サーバーwebpack-dev-server 起動エラー解決策1解決...

Apache SkyWalkingのセルフモニタリングを素早く有効にする方法を説明します

1. Prometheusテレメトリデータを有効にするデフォルトでは、テレメトリは次のように無効にな...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

HTMLテーブルの詳細な説明

機能: データ表示、テーブルアプリケーションシナリオ。 <table> テーブル<...

MySQLはデータテーブル内の既存のテーブルを分割します

目次操作方法操作プロセス既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移...

HTML チュートリアル: よく使われる HTML タグのコレクション (4)

関連記事:初心者が学ぶ HTML タグ (3)導入された HTML タグは、必ずしも XHTML 仕...

Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせ...

MySql マスタースレーブレプリケーションの実装原理と構成

データベースの読み取りと書き込みの分離は、トラフィック量の多い大規模システムやインターネット アプリ...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...

Docker 環境での Jmeter の分散操作に関する詳細なチュートリアル

1. jmeterの基本イメージを構築するDockerfile は次のとおりです。 # Java 8...

HTML で色を表すには、6 桁の 16 進コード、RGB、またはキーワードを使用します。

HTML で色を表す方法は 3 つありますが、最もよく使われるのは 6 桁の 16 進コード表現です...