Spring Cloud での Docker デプロイメントに jib を使用する詳細な手順

Spring Cloud での Docker デプロイメントに jib を使用する詳細な手順

ジブの紹介

Jib は Google が開発した、Java アプリケーションの Docker および OCI イメージを直接ビルドできるライブラリです。Maven および Gradle プラグインの形式で提供されます。

Jib を使用すると、Java 開発者は使い慣れた Java ツールを使用してコンテナを構築できます。 Jib は、アプリケーションをコンテナ イメージにパッケージ化するために必要なすべての手順を処理する、高速でシンプルなコンテナ イメージ構築ツールです。 Dockerfile を記述したり Docker をインストールしたりする必要がなく、Maven および Gradle に直接統合されます。ビルドにプラグインを追加するだけで、Java アプリケーションを即座にコンテナ化できます。

Jib オープンソース アドレス: https://github.com/GoogleContainerTools/jib

一般的なDockerビルドプロセス

代替画像

ジブの製作プロセス

代替画像

ジブ統合

プロジェクトは Spring Cloud、バージョン Hoxton.SR1 です。

代替画像

jib を統合するには、pom に jib プラグインを追加するだけです。

<プラグイン>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <バージョン>${jib.version}</バージョン>
      </プラグイン>

ジブ関連の完全な構成

<プロパティ>
    <!-- jib docker 設定-->
    <!-- jib バージョン -->
    <jib.version>2.2.0</jib.version>
    <!-- jib パッケージングをスキップするかどうか -->
    <jib.skip>真</jib.skip>
    <!-- ウェアハウスイメージ名 -->
    <jib.repository.name>akk-システム</jib.repository.name>
    <!-- スタートアップ クラス -->
    <jib.main.class>com.akk.GatewayApplication</jib.main.class>
    <!-- 倉庫ログインユーザー名 -->
    <レジストリユーザー名>222222222222</レジストリユーザー名>
    <!-- 倉庫ログインパスワード -->
    <レジストリパスワード>111111111111</レジストリパスワード>
</プロパティ>
 <プラグイン>
    <プラグイン>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>jib-maven-plugin</artifactId>
      <バージョン>${jib.version}</バージョン>
      <構成>
        <skip>${jib.skip}</skip>
        <!-- ベースイメージを構成する -->
        <から>
          <image>openjdk:8-jre-alpine</image>
        </from>
        <!-- プッシュ アドレス、ウェアハウス名、ミラー名を設定します -->
        <に>
          <画像>registry.cn-hangzhou.aliyuncs.com/akk_java/${jib.repository.name}</画像>
          <タグ>
            <!-- <タグ>${jib.repository.name}</タグ>-->
            <!-- <tag>${version}</tag>-->
          </タグ>
          <認証>
            <ユーザー名>${REGISTRY_USERNAME}</ユーザー名>
            <パスワード>${REGISTRY_PASSWORD}</パスワード>
          </auth>
        </に>
        <!-- プライベート サーバーは https ではなく http です。デフォルトでは、jib は https 以外のプライベート サーバーにプッシュしません。プライベート サーバーは追加されますが、パブリック サーバーは追加されません。 -->
        <!-- <allowInsecureRegistries>true</allowInsecureRegistries>-->
        <コンテナ>
          <mainClass>${jib.main.class}</mainClass>
          <ラベル>
            <名前>${アーティファクトID}</名前>
          </ラベル>
        </コンテナ>
      </構成>
      <!--Maven ライフサイクルにバインド-->
      <!-- <実行>-->
      <!-- <実行>-->
      <!-- <phase>パッケージ</phase>-->
      <!-- <目標>-->
      <!-- <goal>ビルド</goal>-->
      <!-- </目標>-->
      <!-- </実行>-->
      <!-- </実行>-->
    </プラグイン>
  </プラグイン>

パラメータの説明:
${jib.version} jibバージョン: 好きなものを選択してください
${jib.skip} jib をスキップするかどうか: jib プラグインはルート ディレクトリの下の pom に配置されるため、プロジェクトのすべてのモジュールが jib 操作を実行します。プロジェクトのパブリック依存モジュールをパッケージ化する必要がない場合は、このプロパティを再定義してjibをスキップすることができます。
${jib.repository.name}ミラープッシュリポジトリ名: リポジトリ名
${version}イメージバージョン: プッシュされたイメージのバージョン
${REGISTRY_USERNAME}ミラーリポジトリのユーザー名: プライベートリポジトリのログインアカウント
${REGISTRY_PASSWORD}ミラーリポジトリパスワード: プライベートリポジトリのログインパスワード
${jib.main.class}プロジェクト モジュール スタートアップ クラス: プロジェクト モジュール スタートアップ クラス、Spring Boot スタートアップ クラス

formタグはベース イメージを定義します。ここではopenjdk:8-jre-alpineに基づいていますが、他のイメージを使用することもできます。 toタグはコンパイルされたイメージのプッシュ情報を定義し、 imageプッシュイメージ名情報を定義し、 tagsイメージタグをプッシュします。タグを通じて指定されたイメージをプルすることができます。 authプライベート リポジトリのログイン情報を定義します。 containerイメージのコンテンツ情報を定義し、 mainClassメインクラスを開始します。 Docker のラベルと同様に、アプリケーション メタデータのキーと値のペアにlabels 。以下の実行はコマンドをバインドします。ここでは、jib build コマンドが maven package コマンドにバインドされています。mvn package を実行すると、jib build が自動的に実行されます。 (その他の設定タグについては、https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin を参照してください)

この時点で、idea の Maven メニューに jib プラグイン関連のコンテンツが表示されます。

代替画像

たとえば、ゲートウェイモジュール(イメージをパッケージ化する必要がある)の場合、pom構成は次のようになります。

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<プロジェクト xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <親>
    <artifactId>akk システム</artifactId>
    <グループID>com.akk</グループID>
    <バージョン>0.0.1-SNAPSHOT</バージョン>
  </親>
  <モデルバージョン>4.0.0</モデルバージョン>

  <artifactId>ゲートウェイ</artifactId>

  <プロパティ>
    <!-- jib docker 設定-->
    <jib.version>2.2.0</jib.version>
    <jib.skip>偽</jib.skip>
    <jib.repository.name>akk-gateway</jib.repository.name>
    <jib.main.class>com.akk.GatewayApplication</jib.main.class>
  </プロパティ>

  <依存関係>
    <依存関係>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
    </依存関係>
    <依存関係>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-spring-boot-starter</artifactId>
    </依存関係>
  </依存関係>

</プロジェクト>

共通のパブリック依存関係パッケージ pom (イメージをパッケージ化する必要はありません):

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<プロジェクト xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <モデルバージョン>4.0.0</モデルバージョン>
  <親>
    <artifactId>akk システム</artifactId>
    <グループID>com.akk</グループID>
    <バージョン>0.0.1-SNAPSHOT</バージョン>
  </親>
  <artifactId>共通</artifactId>
  <バージョン>0.0.1-SNAPSHOT</バージョン>

  <プロパティ>
    <!-- jib docker 設定-->
    <jib.version>2.2.0</jib.version>
    <jib.skip>真</jib.skip>
    <jib.repository.name>akk-システム</jib.repository.name>
    <jib.image.name>akk システム</jib.image.name>
  </プロパティ>

  <依存関係>
    <!-- 依存関係情報 -->
  </依存関係>

</プロジェクト>

このうち、プロパティはジブの関連パラメータ設定をカバーします。

パッケージ画像

パッケージ化するにはmvn package jib:dockerBuildを実行します。

代替画像

パッケージ化が完了したら、ローカルの Docker イメージを確認します (jib:dockerBuild コマンドではイメージはアップロードされませんが、jib:build コマンドではイメージがアップロードされます)

代替画像

画像をパックしてアップロードする

mvn package jib:buildを実行してパッケージ化し、アップロードします。
dockerプライベートウェアハウスにログインする

docker ログイン --username=ユーザー名 --password=パスワード registry.cn-hangzhou.aliyuncs.com

画像をプルする

docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-gateway:latest 

代替画像

Docker デプロイメント プロジェクト

マイクロサービス プロジェクトのデプロイメントには多くのモジュールがあり、一般的には分散クラスター環境であるため、手動でのデプロイメントは面倒です。Jenkins などの自動デプロイメント ツールを使用できます。 Jenkins を使用してイメージをパッケージ化してアップロードした後、リモート サーバーにログインし、スクリプトを実行して起動します。のように:

#!/bin/bash
# docker リポジトリにログインdocker login --username=username --password=password registry.cn-hangzhou.aliyuncs.com
# 実行中のコンテナを停止します docker ps | grep akk_java | awk '{print $1}' | xargs docker stop
# コンテナを削除する docker ps -a -q | grep akk_java | awk '{print $1}' | xargs docker rm
# イメージファイルをクエリし、docker イメージを削除します | grep akk_java | awk '{print $3}' | xargs docker rmi
# イメージをプルする docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-user:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-gateway:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-task:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-store:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-pay:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-app-api:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-sso-auth:latest
docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-seata:latest

イメージを再度プルした後、 docker runコマンドを実行して Docker を起動します。

Spring Cloud での Docker デプロイメントに jib を使用する詳細な手順に関するこの記事はこれで終わりです。Spring Cloud Docker デプロイメントに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • jib を使用して Docker イメージをパッケージ化する
  • 初めてDockerイメージを構築、実行、公開、取得するための詳細な手順
  • Dockerイメージを構築する2つの方法の分析
  • Dockerイメージ構築原理の分析(Dockerをインストールしなくてもイメージを構築できる)
  • GoogleContainerTools を使用して jib をコンテナ化し、Docker イメージを構築する

<<:  vue3 再帰コンポーネントカプセル化の全プロセス記録

>>:  vue+node+socket ioは複数人のインタラクションを実現し、プロセス全体を解放します

推薦する

例を通してMySQLパーティションテーブルの原理と一般的な操作を学びます

1. パーティションテーブルの意味パーティション テーブル定義は、任意のサイズに設定できるルールに従...

Linux サーバーのステータスとパフォーマンスに関連するコマンドの詳細な説明

サーバーステータス分析Linux サーバーの CPU の詳細を表示する#CPU情報を表示[root@...

MySQL の DOS ウィンドウの文字化け問題を解決する方法

文字化けしたコードの問題は次のとおりです。 この問題の原因は非常に単純です。コマンドラインのエンコー...

MySQLグループリンクの使用に関する詳細な説明

MYSQL におけるグループ化とリンクは、データベースの操作やデータのやり取りで最もよく使用される ...

Dockerはmysqldumpコマンドを使用してプロジェクト内のmysqlデータをバックアップおよびエクスポートします。

mysqldump コマンドはじめに: データベースバックアッププログラム形式: mysqldum...

Vueコンポーネントが相互に値を転送する方法の詳細な説明

目次概要1. 親コンポーネントが子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに...

jsonファイルの書き方の詳細説明

目次JSONとはなぜこの技術なのでしょうか? JSONの使い方- データ形式- メモ- JSには2つ...

CSS を使用して ul と li の水平配置を実現する 2 つの方法

li はブロックレベル要素であり、デフォルトで 1 行を占めるため、水平方向の配置を実現する場合は、...

RGBAアルファ透明度変換計算表

IEでのRGBAとフィルター値の変換RGBA 透明度値IE フィルター値0.1 19 0.2 33 ...

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...

Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法

詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...

MySQL のジオメトリ型を使用して経度と緯度の距離の問題を処理する方法

テーブルを作成する テーブル `map` を作成します ( `id` int(11) NULLではな...

jsネイティブカルーセルプラグインの制作

この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...

MySQLスローログクエリの詳細な説明

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

react setStateの詳細な説明

目次setState は同期ですか、それとも非同期ですか?カスタム合成イベントと React フック...