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は複数人のインタラクションを実現し、プロセス全体を解放します

推薦する

Vue 親子コンポーネントの相互値の転送と呼び出し

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

自動ロック画面機能を実現するjs

1. 使用シナリオこのような要件があるため、システムが開発されました。ユーザーがデスクトップを離れ...

Ubuntu 18.04 LTSでIPアドレスを設定するための完全な手順

序文Ubuntu 18.04 LTS で IP アドレスを設定する方法は、これまで使用されていた設定...

IDEA 2020 で Tomcat サーバーを構成するための詳細な手順

IDEA 2020 で Tomcat を構成する手順は次のとおりです。最初のステップはTomcatを...

docker を使用して Kong クラスター操作を構築する

docker コンテナの下に kong クラスターを構築するのは非常に簡単です。公式サイトの紹介も非...

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

vue v-for ループ オブジェクトの属性

目次1. ループオブジェクト内の値2. ループオブジェクト3. キーと値のループ1. ループオブジェ...

JavaScriptオブジェクト指向について学ぼう

目次JavaScript プロトタイプチェーンオブジェクトプロトタイプトップレベルのプロトタイプOb...

Ubuntu 18.04.4 に MySQL をインストールするプロセスの詳細な説明

Ubuntu 18.04.4 に MySQL をインストールするプロセスを見てみましょう。内容は次の...

純粋な CSS 実装 (スクリプトなし) HTML コマンド スタイルのツールチップ テキスト プロンプト効果

実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (...

HTMLはフォームタグを使用して登録ページのサンプルコードを実装します。

ケースの説明: - ページ効果を実現するためにテーブルを使用する- ハイパーリンクを機能させたくない...

MySQL データベース内の varchar 型の数値のサイズを比較する方法

テストテーブルを作成する -- ---------------------------- -- ch...

JavaScript で配列遅延評価ライブラリを実装する方法

目次概要達成方法具体的な実装評価関数の終了を決定する生成関数の範囲変換関数マップフィルター割り込み機...

Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

1. コンセプト1. ホットバックアップとバックアップの違いホット バックアップは高可用性 (HA)...

Vueはデジタル千単位区切り形式をグローバルに実装します

この記事の例では、Vue がデジタル 3 桁区切り形式をグローバルに実装するための具体的なコードを参...