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はソースコード付きのリファレンスライブラリのメソッドを使用します

monaco-editor-vueの公式ソースコードは次のとおりです。インデックス 'mon...

Tomcat でのサーブレットの作成と実装に関する深い理解

1. サーブレットとは何か1.1. 正式な言葉で説明する:サーブレットは、動的な Web リソースを...

MySQLにおけるrow_numberの実装プロセス

1. 背景一般的に、データ ウェアハウス環境では、row_number 関数を使用して特定のディメン...

Alibaba Cloud Server Linux システムは Tomcat を構築して Web プロジェクトを展開します

私は全体のプロセスを 4 つのステップに分けます。 JDKをダウンロードしてインストールするTomc...

MySQLインデックスを正しく作成する方法

インデックス作成は大学図書館の書誌インデックスの構築に似ており、データ検索の効率を向上させ、データベ...

Linux での透過的巨大ページの使用と無効化の概要

導入コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加して...

Linux で起動時にプログラムを自動的に実行させる最も簡単な方法

たくさん集めましたが、すべて失敗に終わりました。最終的に、この方法は優れており、使用に影響を与えない...

MySQL、Oracle、SQL Server のページングクエリ例の分析

最近、Oracle、MySQL、SQL Server 2005 のデータ ページング クエリについて...

Nginx tp3.2.3 404 問題の解決

最近、Apache を nginx に変更しました。TP プロジェクトを実行に移すと、404 エラー...

クラウド決済を実装するWeChatミニプログラムについて

目次1. はじめに2. 思考分析3. クラウド決済のケーススタディ1. クラウド機能1-1. 認証不...

LinuxサーバーでRabbitMQ管理ページにアクセスできない問題を解決

私のプロジェクトの特定の機能ではサーバーが rabbitmq にメッセージを送信する必要があるため、...

JS の FileReader を介して .txt ファイルの内容を取得する方法

目次JSはFileReaderを通じて.txtファイルの内容を取得します。 .txtファイルの読み取...

ウェブデザインにおけるキーワード設計手法の紹介

多くの場合、ホームページを作成するときに、Web ページ ヘッダー属性の設定を無視します。 Web ...

axiosリクエストをvueでカプセル化する方法

実際、Vueでaxiosをカプセル化するのは非常に簡単ですまず、srcパスにhttpフォルダを作成し...

ネイティブJSを使用した遅延読み込みlazyLoadの3つの方法の概要

目次序文方法1: 高コントラスト方法2: getBoundingClientRect() APIを使...