dockerfile-maven-plugin 使用ガイドの概要

dockerfile-maven-plugin 使用ガイドの概要

最近、コンテナプラットフォームにアプリケーションをデプロイする際に、パッケージング時に docker イメージを生成する必要がありました。最初はインターネットで docker-maven-plugin プラグインを探したのですが、使い方が非常に面倒で、maven と dockerfile で余分な設定をたくさんする必要がありました。その後、公式 Github で作者が新しいプラグイン dockerfile-maven-plugin の使用を推奨していることがわかったので、これに置き換えましたが、このプラグインに関する関連情報はインターネット上にほとんどありません。ここに記録する

pom 構成

<プラグイン>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <構成>
                    <skip>真</skip>
                </構成>
            </プラグイン>

            <!-- Dockerfile Maven プラグイン -->
            <プラグイン>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <バージョン>1.4.10</バージョン>
                <処刑>
                    <!--<実行>-->
                        <!--<id>デフォルト</id>-->
                        <!--<目標>-->
                            <!--&lt;!&ndash;docker パッケージングを使用しない場合は、このゴールをコメントアウトしてください&ndash;&gt;-->
                            <!--<goal>ビルド</goal>-->
                            <!--<goal>プッシュ</goal>-->
                        <!--</目標>-->
                    <!--</実行>-->
                </処刑>
                <構成>
                    <リポジトリ>docker-reg.****.com/feedback/${artifactId}-${profiles.active}</リポジトリ>
                    <タグ>${プロジェクト.バージョン}</タグ>
                    <ビルド引数>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </構成>
            </プラグイン>

Setting.xml 構成

このファイルは Maven ディレクトリにあり、cd $M2_HOME/conf でアクセスできます。

pluginGroupsにcom.spotifyを追加する

  <プラグイングループ>
    <pluginGroup>com.spotify</pluginGroup>
  </プラグイングループ>

ログインステータス

ログインが必要です

ログインの確認方法には多くの落とし穴があります。 HABO で倉庫を非公開に設定する場合は、ログインして次の公式設定に従う必要があります。

 <プラグイン>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <バージョン>${バージョン}</バージョン>
    <構成>
        <ユーザー名>リポジトリユーザー名</ユーザー名>
        <password>リポジトリパスワード</password>
        <リポジトリ>${docker.image.prefix}/${project.artifactId}</リポジトリ>
        <ビルド引数>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </構成>
</プラグイン>

ログインは必要ありません

しかし、私はhaborからイメージを自動取得するようにk8sを設定していたため、publicに設定しました。この場合、ログインする必要はありませんが、実行に失敗することがあります。このとき、~/.docker/config.jsonにあるこのウェブサイトの設定を削除する必要があります。

~/.docker/config.json を編集します。

{
    「認証」: {
        "192.168.87.110:5000": {
            「認証」: 「YWRtaW46JKDtaW4xMjM="
        }(ここで削除)
    },
    "HttpHeaders": {
        「ユーザーエージェント」: 「Docker-Client/18.09.0 (linux)」
    }
}

これが空であることを確認した後もエラーが報告される場合は、docker login ... を再度実行すると成功します。

Maven マルチモジュール構成

複数のモジュールの場合、パッケージング プラグインはアプリケーション サブモジュールに配置する必要があります。ルート pom に配置すると、パッケージ化は失敗します。

以下の状況:

  • -アプリ
  • -一般
  • -ファイル
  • -郵便
  • -応用
  • ​ -pom.xml

この場合は2つのステップに分けることができます

最初のステップは、ルートディレクトリにあるすべてのモジュールをパッケージ化することです。

mvn クリーンパッケージ -P テスト

2番目のステップは、サブモジュールでデプロイコマンドを実行してイメージをパッケージ化することです。

mvn dockerfile:ビルド dockerfile:プッシュ

このようにして、サブモジュールをミラーに正常にパッケージ化してプッシュすることができます。

ジェンキンス

ローカルでテストした後、このプロセスを Jenkins に移動し、いくつかの構成を行う必要があります。

Jenkins サーバーに Docker をインストールする

ここでは詳細には触れません。Maven の setting.xml およびその他の構成はローカルのものと同じです。

Jenkinsプロジェクト構成を変更する

この時点では、プロジェクトを 2 回パッケージ化する必要があるため (1 回はルート ディレクトリに、2 回目はミラーとしてサブディレクトリに)、mvn コマンドを 2 回実行する必要があります。これは以前とは異なり、最初の実行では引き続き Jenkins Build モジュールが使用されます。

ここに画像の説明を挿入

2回目の実行はポストステップに配置され、コマンドによって実行されます。

テキスト

cd サブモジュールディレクトリ mvn clean package -P $env dockerfile:build dockerfile:push

このようにして、パッケージ化と画像作成の手順を完了できます。

dockerfile-maven-plugin の使い方ガイドはこれで終了です。dockerfile-maven-plugin の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker-maven-pluginプラグインは対応するjarパッケージを取得できません
  • docker-maven-plugin の詳細な使用方法
  • Maven プラグイン docker-maven-plugin の使用
  • dockerfile-maven-plugin ミニマリスト チュートリアル (推奨)
  • docker-maven-pluginを使用してデプロイメントを自動化する方法を説明します

<<:  長いデータを HTML で表示するときに処理する方法

>>:  JavaScript strictモードの概要 strictを使用する

推薦する

商品クエリ機能を実現するJavaScript

この記事の例では、商品検索機能を実現するためのJavaScriptの具体的なコードを参考までに共有し...

ウェブページの背景画像を伸ばす2つの方法

解決策は2つあります。 1つはCSSで、background-size:coverを使用して画像の伸...

Node.js で簡単なクローラーケースを作成するチュートリアル

準備まず、nodejs をダウンロードする必要がありますが、これは問題ないはずです。原文はwebst...

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

Vueはドラッグプログレスバーを実装します

この記事では、ドラッグプログレスバーを実現するためのVueの具体的なコードを例として紹介します。具体...

Dockerデータのバックアップとリカバリプロセスの詳細な説明

データのバックアップ操作は非常に簡単です。次のコマンドを実行します。 docker run --vo...

Linux でスペースを含むファイルを削除する (ディレクトリではない)

日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...

デザイン理論:フォントデザインの基礎

<br />言葉は、人間の思考や感情を伝えるために必然的に生み出されるものです。人類の文...

js は axios 制限リクエスト キューを実装します

目次背景は次のとおりです。何が起こるでしょうか?背景は次のとおりです。実際の開発では、ネットワークの...

iframe src 割り当ての問題 (サーバー側)

今日この問題に遭遇しました。サーバー側でiframeのsrc値を再割り当てし、iframeにIDを追...

vue+element で動的スキニングを実装するためのサンプルコード

プロジェクトのテーマがすべての人の美的感覚を満足できないこともあります。このとき、スキン変更機能は非...

Linuxの運用・保守の基礎知識から上級者向け知識までをまとめました

運用保守エンジニアは、初期段階では非常に大変な仕事です。この期間中、コンピューターの修理、ネットワー...

Reactコンポーネントをフルスクリーンにする方法

導入この記事は、 React + antdをベースにして、完全な全屏demoを紹介します。その理由は...

初心者のためのWebページ作成: HTMLのハイパーリンクAタグの使い方を学ぶ

ハイパーリンク a タグはリンク ポイントを表し、英語の単語「anchor」の略語です。その機能は、...

HTML フレームセットのサンプルコード

この記事では、Frameset が作成した、できるだけシンプルなフレームワークを紹介します。さて、ま...