1. docker-maven-pluginの紹介私たちの継続的インテグレーションプロセスでは、プロジェクトエンジニアリングでは通常、Maven を使用してコンパイルおよびパッケージ化し、イメージを生成します。イメージをオンラインにすることで、オンライン効率が大幅に向上すると同時に、容量を迅速かつ動的に拡張し、迅速にロールバックできるため、非常に便利です。 docker-maven-plugin プラグインは、Maven プロジェクトでの簡単な構成を通じて、イメージを自動的に生成し、ウェアハウスにプッシュできるように設計されています。 2. 環境とソフトウェアの準備このデモ環境では、ローカルの Mac OX で操作しました。インストールされているソフトウェアとバージョンは次のとおりです。
注: ここでは、docker-maven プラグインを使用してイメージのビルド、イメージのアップロード、およびその他の操作を実行する Java Maven プロジェクトをテストするため、最初に Docker、Maven、および Java をインストールする必要があります。ここではインストール プロセスは無視されます。 3. デモ例3.1 DOCKER_HOSTの設定docker-maven-plugin プラグインのローカル Docker へのデフォルトの接続アドレスは localhost:2375 なので、最初に環境変数を設定する必要があります。 DOCKER_HOST=tcp://<ホスト>:2375 注: DOCKER_HOST 環境変数が設定されていない場合は、コマンド ラインで DOCKER_HOST を指定して実行できます。たとえば、ローカル マシンで DOCKER_HOST を指定します: DOCKER_HOST=unix:///var/run/docker.sock mvn clean install docker:build。 3.2 イメージ構築の例イメージをビルドする方法は 2 つあります。1 つ目は POM でビルド情報を指定する方法、2 つ目は既存の Dockerfile を使用してビルドする方法です。 ここでは、Java Maven プロジェクト mavendemo を例として説明します。 3.2.1 POMでビルドするためのビルド情報を指定する <ビルド> <プラグイン> <プラグイン> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <バージョン>1.0.0</バージョン> <構成> <imageName>mavendemo</imageName> <baseImage>java</baseImage> <maintainer>docker_maven [email protected]</maintainer> <作業ディレクトリ>/ROOT</作業ディレクトリ> <cmd>["java", "-version"]</cmd> <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint> <!-- 以下は、jar パッケージを docker コンテナの指定されたディレクトリにコピーするための構成です --> <リソース> <リソース> <ターゲットパス>/ROOT</ターゲットパス> <ディレクトリ>${project.build.directory}</ディレクトリ> <include>${project.build.finalName}.jar</include> </リソース> </リソース> </構成> </プラグイン> </プラグイン> </ビルド> 3.2.2 Dockerfileを使用したビルド pom.xml 構成 <ビルド> <プラグイン> <プラグイン> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <バージョン>1.0.0</バージョン> <構成> <imageName>mavendemo</imageName> <dockerDirectory>${basedir}/docker</dockerDirectory> <!-- Dockerfile パスを指定します --> <!-- ここでは、jar パッケージを docker コンテナの指定されたディレクトリ構成にコピーします。これは Dokokerfile に書き込むこともできます --> <リソース> <リソース> <ターゲットパス>/ROOT</ターゲットパス> <ディレクトリ>${project.build.directory}</ディレクトリ> <include>${project.build.finalName}.jar</include> </リソース> </リソース> </構成> </プラグイン> </プラグイン> </ビルド> ${basedir}/docker/Dockerfile 設定 FROM java メンテナー docker_maven [email protected] ワークディレクトリ /ルート CMD ["java", "-version"] エントリポイント ["java", "-jar", "${project.build.finalName}.jar"] 上記の 2 つの docker:build 実行方法は同じ効果があります。実行出力プロセスは次のとおりです。
実行が完了したら、docker images を使用して生成されたイメージを表示します。
3.3 コマンドの実行mvn clean package docker:buildはビルド操作のみを実行します mvn clean package docker:build -DpushImage はビルドを実行し、完了後にイメージをプッシュします。 mvn clean package docker:build -DpushImageTag はビルドを実行し、指定されたタグのイメージをプッシュします。 注: ここでは少なくとも 1 つの imageTag を指定する必要があります。これは POM で構成するか、コマンド ラインで指定できます。コマンドラインは次のように指定されます: mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2、POM ファイルで指定される構成は次のとおりです: <ビルド> <プラグイン> ... <プラグイン> <構成> ... <画像タグ> <imageTag>imageTag_1</imageTag> <imageTag>imageTag_2</imageTag> </画像タグ> </構成> </プラグイン> ... </プラグイン> </ビルド> 3.4 DockerコマンドをMavenステージにバインドするDocker コマンドをさまざまな Maven ステージにバインドできます。Docker をビルド、タグ、プッシュに分割し、それぞれ Maven のパッケージ ステージとデプロイ ステージにバインドできます。この時点で、ビルド、タグ、プッシュ操作全体を完了するには、mvn deploy を実行するだけで済みます。mvn build を実行すると、ビルドとタグ操作のみが完了します。さらに、特定のステップをスキップしたり、特定のステップのみを実行したりする場合は、POM ファイルを変更する必要はなく、特定の docker ステップをスキップするように指定するだけで済みます。たとえば、プロジェクトで自動化テンプレートがすでに構成されているが、今回はローカルセルフテストにイメージをビルドするだけで、プッシュステージを実行したくない場合は、プッシュ操作をスキップするためにパラメーター -DskipDockerPush を指定する必要があります。 <ビルド> <プラグイン> <プラグイン> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <バージョン>1.0.0</バージョン> <構成> <imageName>mavendemo</imageName> <baseImage>java</baseImage> <maintainer>docker_maven [email protected]</maintainer> <作業ディレクトリ>/ROOT</作業ディレクトリ> <cmd>["java", "-version"]</cmd> <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint> <リソース> <リソース> <ターゲットパス>/ROOT</ターゲットパス> <ディレクトリ>${project.build.directory}</ディレクトリ> <include>${project.build.finalName}.jar</include> </リソース> </リソース> </構成> <処刑> <実行> <id>ビルドイメージ</id> <phase>パッケージ</phase> <目標> <goal>ビルド</goal> </目標> </実行> <実行> <id>タグ画像</id> <phase>パッケージ</phase> <目標> <goal>タグ</goal> </目標> <構成> <image>mavendemo:latest</image> <新しい名前>docker.io/wanyang3/mavendemo:${プロジェクトバージョン}</新しい名前> </構成> </実行> <実行> <id>プッシュイメージ</id> <phase>デプロイ</phase> <目標> <goal>プッシュ</goal> </目標> <構成> <イメージ名>docker.io/wanyang3/mavendemo:${プロジェクトバージョン}</イメージ名> </構成> </実行> </処刑> </プラグイン> </プラグイン> </ビルド> 上記の例では、mvn package を実行するとビルドとタグの操作が実行され、mvn deploy を実行するとビルド、タグ、プッシュの操作が実行されます。 docker プロセスをスキップしたい場合は、次の操作を行うだけです。
たとえば、パッケージを実行するときにタグ処理をスキップしたい場合は、mvn package -DskipDockerTag が必要です。 3.5 プライベートDockerリポジトリアドレスの使用実際の作業環境では、イメージをプライベート Docker リポジトリにプッシュする必要があります。これは、docker-maven-plugin プラグインを使用して実現することも非常に簡単です。実現するにはいくつかの方法があります。 1. POMファイルのimageName操作を変更する ... <構成> <imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName> ... </構成> ... 2. POMファイル内のnewName操作を変更する ... <構成> <imageName>mavendemo</imageName> ... </構成> <実行> <id>タグ画像</id> <phase>パッケージ</phase> <目標> <goal>タグ</goal> </目標> <構成> <image>mavendemo</image> <newName>registry.example.com/wanyang3/mavendemo:v1.0.0</newName> </構成> </実行> ... 3.6 セキュリティ認証構成イメージを Docker リポジトリにプッシュする場合、共有リポジトリかプライベートリポジトリかに関係なく、セキュリティ認証が必要になることが多く、ログインが完了した後にのみ操作を実行できます。もちろん、コマンドライン docker login -u user_name -p password docker_registry_host からログインすることもできますが、自動化されたプロセスにはあまり便利ではありません。 docker-maven-plugin プラグインを使用すると、セキュリティ認証を簡単に実装できます。 まず、Maven 構成ファイル setting.xml に関連するサーバー構成を追加し、主に Docker レジストリのユーザー認証情報を構成します。 <サーバー> <サーバー> <id>私のDockerレジストリ</id> <ユーザー名>wanyang3</ユーザー名> <パスワード>12345678</パスワード> <構成> <メール>[email protected]</メール> </構成> </サーバー> </サーバー> 次に、pom.xml でサーバー ID を使用します。 <プラグイン> <プラグイン> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <バージョン>1.0.0</バージョン> <構成> <imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName> ... <serverId>my-docker-registry</serverId> </構成> </プラグイン> </プラグイン> 3.7 その他のパラメータdocker-maven-plugin プラグインも多くの便利な設定を提供します。ここにいくつかのパラメータを示します。
4. よくある質問1. ビルドイメージを実行すると、エラー 1 が発生します。
これは Docker サービスが開始されていないためです。Docker を開始してください。 2. ビルド イメージを実行すると、エラー 2 が報告されます。
これはイメージ名が間違っているためです。Docker イメージ名は [a-z0-9-_.] と一致する必要があります。 docker-maven-plugin のパッケージングイメージとプライベートリポジトリへのアップロードに関するこの記事はこれで終わりです。docker-maven-plugin のパッケージングイメージの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ウェブサイトでページコンテンツや情報を直接コピーできない問題を解決する方法
>>: フレックスレイアウトによるシームレスなスクロールのサンプルコード
目次地図フィルターいくつかの毎インデックスを検索パイプ参考回答1. パラメータを受け入れる関数を返す...
目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...
01. コマンドの概要貼り付けコマンドは各ファイルを列ごとに結合します。これは、2 つの異なるファイ...
背景アプリケーション システムの数が増え続けると、当初はアラームを発していなかったアクティブ スレッ...
今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...
システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...
この記事では、Centos7.3でのmysql5.7.18のインストールと初期パスワードの変更につい...
この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...
この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...
序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタ...
JS で関数を定義する 3 つの方法例を挙げて説明しましょう。 <スクリプト> //メソ...
まずプロジェクトの成果物を構成するスタートアップ項目の設定 Tomcatサービスを作成する開始したい...
UNION演算子の使用union : 2 つ以上の SELECT ステートメントの結果を 1 つの...
1. コマンドの紹介seq (シーケンス) コマンドは、指定されたステップ サイズに従って、開始番号...
ローカルの MySQL バージョンが比較的低いため、最近 MySQL のバージョンをアップグレードす...