ディレクトリ
- ドッキングウィンドウ-のmaven-pluginの紹介
- 環境、ソフトウェアの準備ができています
- Demoサンプル
- 設定DOCKER_HOST
- 例の構築ミラー
- POMを構築するために、ビルド情報を指定します。
- Dockerfile建物を使用します
- コマンドを使用します。
- 様々な段階Mavenをバインドするドッカー順
- プライベートアドレスを使用してドッカー倉庫
- セキュリティ認証の設定
- よくある質問
1、ドッキングウィンドウ-mavenの-プラグイン紹介
当社の継続的な統合プロセスでは、プロジェクトの一般的な使用Mavenのコンパイラパッケージは、その後、ミラーラインを通って、大幅に本当に簡単に、ロールバックすばやく、オンライン効率、高速な動的な拡張を提供することができ、ミラーを生成します。ドッキングウィンドウ-のmaven-pluginのプラグインは、簡単な構成によって、Mavenプロジェクトで私たちを助けるために設計されたミラーの自動生成や倉庫にプッシュされます。
2、環境、ソフトウェアの準備ができています
デモ環境は、私はこのマシンマックOX操作にあった、ソフトウェアおよびバージョンをインストールし、次のとおりです。
- ドッカー:バージョン17.03.1それ
- Mavenの:バージョン3.3.9
- Javaの:バージョン1.8.0_91
- ドッキングウィンドウ-のmaven-pluginの:1.0.0
注:あなたがドッカー、Mavenの程度をインストールする必要がありますので、ここでは、Java Mavenプロジェクトをテストするには、ドッキングウィンドウ-Mavenプラグイン、アップロード画像や他の操作とミラーを打つ、Javaは、ここでは、インストールプロセスを無視します。
3、デモ例
3.1構成DOCKER_HOST
ローカルホスト:ローカルドッカーデフォルトのアドレスへのドッキングウィンドウ-mavenの-プラグインプラグイン接続がある2375年、私たちは、環境変数を設定する必要があります。
DOCKER_HOST=tcp://<host>:2375
注意:あなたが設定されていない場合はDOCKER_HOST
、環境変数を、指定したコマンドラインを表示することができDOCKER_HOST
、私はこのマシンの指定DOCKER_HOSTを持っているように、実行すると:DOCKER_HOST=unix:///var/run/docker.sock mvn clean install docker:build
。
ミラーの実施例3.2の構築
あなたは第一、第二には、既存のDockerfileの建物を使用することで、POMに割り当てられた情報を構築することである、二つの方法でミラーを構築するためにそれを使用することができます。
最初の方法は、サポートFROM
、ENTRYPOINT
、CMD
、MAINTAINER
とADD
Dockerfile構成を使用せずに、POMの構成情報を。しかし場合はVOLUME
、時間や他のDockerfileコマンド、あなたは、第二のアプローチを使用Dockerfileを作成し、POMで設定する必要があるdockerDirectory
パスを指定します。
ここでは一例としてお見せmavendemoのJava Mavenプロジェクトです。
POMの建物に指定された情報の3.2.1建設
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>mavendemo</imageName>
<baseImage>java</baseImage>
<maintainer>docker_maven [email protected]</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
3.2.2ビルドDockerfile
pom.xml配置
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>mavendemo</imageName>
<dockerDirectory>${basedir}/docker</dockerDirectory> <!-- 指定 Dockerfile 路径-->
<!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
${basedir}/docker/Dockerfile 配置
FROM java
MAINTAINER docker_maven [email protected]
WORKDIR /ROOT
CMD ["java", "-version"]
ENTRYPOINT ["java", "-jar", "${project.build.finalName}.jar"]
上記二つの方法で行われdocker:build
、次のような効果と同じで、出力処理が行われます。
[INFO] --- docker-maven-plugin:1.0.0:build (default-cli) @ mavenDemo ---
[INFO] Building image mavendemo
Step 1/5 : FROM java
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER docker_maven [email protected]
---> Using cache
---> 2faf180d4a50
Step 3/5 : WORKDIR /ROOT
---> Using cache
---> 862210f7956a
Step 4/5 : ENTRYPOINT java -jar mavenDemo.jar
---> Running in 96bbe83de6ec
---> c29009c88993
Removing intermediate container 96bbe83de6ec
Step 5/5 : CMD java -version
---> Running in f69b8d2a75b1
---> bc8d54014325
Removing intermediate container f69b8d2a75b1
Successfully built bc8d54014325
実行後、使用してdocker images
ビュー生成された画像を:
REPOSITORY TAG IMAGE ID CREATED SIZE
mavendemo latest 333b429536b2 38 minutes ago 643 MB
3.3ファイル名を指定して実行
mvn clean package docker:build
唯一のビルド操作を実行します
mvn clean package docker:build -DpushImage
完全なプッシュミラーを構築し実行した後
mvn clean package docker:build -DpushImageTag
指定されたタグプッシュミラー構築と実行
注:少なくともimageTagが指定する必要があり、それはPOMに設定することができますが、コマンドラインで指定することができます。次のコマンドラインを指定しますmvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2
、次のようにPOMは、設定ファイルを指定します。
<build>
<plugins>
...
<plugin>
<configuration>
...
<imageTags>
<imageTag>imageTag_1</imageTag>
<imageTag>imageTag_2</imageTag>
</imageTags>
</configuration>
</plugin>
...
</plugins>
</build>
3.4ドッカーコマンドは、様々な段階Mavenをバインドします
私たちは、ステージを展開し、それぞれMavenのパッケージをバインドし、ビルド、タグ、プッシュにドッキングウィンドウすることができ、すべての段階にドッカーMavenのコマンドをバインドすることができ、この時間は、私たちだけで行う必要がありmvn deploy
、全体のビルド、タグ、プッシュを完了するために、操作、そして我々は実行するとmvn build
、それだけで完成したビルド、タグ操作を。さらに加えて、我々は一部のステップを省略またはちょうどステップを実行したい場合、あなたは唯一のステップは、ドッキングウィンドウをスキップすることができます指定する必要があり、POMファイルを変更する必要はありません。たとえば、私たちは自動化プロジェクトを設定したときのテンプレートを持っていますが、我々はちょうど地元のセルフテストにミラーを作りたい、この時間は、それから、指定されたパラメータを実行するための時間を、実装段階をプッシュしたくない-DskipDockerPush
操作を押すスキップすることができます。
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>mavendemo</imageName>
<baseImage>java</baseImage>
<maintainer>docker_maven [email protected]</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>mavendemo:latest</image>
<newName>docker.io/wanyang3/mavendemo:${project.version}</newName>
</configuration>
</execution>
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>docker.io/wanyang3/mavendemo:${project.version}</imageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
上記の例では、我々は実行時にmvn package
、実行タグ実行操作、構築mvn deploy
、ビルド、タグ、プッシュ動作を実行します。私たちは、ドッキングウィンドウのプロセスをスキップしたい場合は、単に:
-DskipDockerBuild
ミラーリングのビルドをスキップ-DskipDockerTag
タグミラーをスキップ-DskipDockerPush
ミラーリングプッシュをスキップ-DskipDocker
ステージ全体をスキップ
例えば:私たちは、実装パッケージは、タグ・プロセスをスキップしたい、我々は必要ですmvn package -DskipDockerTag
。
プライベートドッカー倉庫アドレスの3.5を使用します
実際の作業環境、我々はいくつかの方法があり、また、実装するのは非常に簡単ですdはオッカー-のmaven-pluginのプラグインを使用して、当社のプライベートドッカー倉庫にミラーをプッシュする必要があります。
まず、POMファイルimagenameの操作を変更します
...
<configuration>
<imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
...
</configuration>
...
第二に、POMファイル操作を変更NEWNAME
...
<configuration>
<imageName>mavendemo</imageName>
...
</configuration>
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>mavendemo</image>
<newName>registry.example.com/wanyang3/mavendemo:v1.0.0</newName>
</configuration>
</execution>
...
3.6認証セキュリティ
我々はドッカー倉庫にミラーを押すと登録が完了した後、それらを操作することができる前に、合計またはプライベートかどうか、多くの場合、セキュリティ認証を必要とします。もちろん、我々は、コマンドラインを使用しても構いませんdocker login -u user_name -p password docker_registry_host
ログインしますが、自動化されたプロセスのために、それは非常に便利ではありません。我々は簡単に安全認証を実装することができドッキングウィンドウ-mavenの-プラグインプラグインを使用します。
まず、すべての設定ファイルsetting.xml Mavenの、主要な構成ドッカーレジストリのユーザ認証情報で構成された増加したサーバーに関連付けられているの。
<servers>
<server>
<id>my-docker-registry</id>
<username>wanyang3</username>
<password>12345678</password>
<configuration>
<email>[email protected]</email>
</configuration>
</server>
</servers>
次に、あなただけのpom.xmlにサーバーIDを使用することができます。
<plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
...
<serverId>my-docker-registry</serverId>
</configuration>
</plugin>
</plugins>
3.7その他のパラメータ
ドッキングウィンドウ-のmaven-pluginのプラグインも少しそれのいくつかのパラメータに名前を付けるために、非常に便利な設定の多くを提供します。
パラメータ | 説明 | デフォルト値 |
---|---|---|
<forceTags>true</forceTags> |
タグカバーは、使用imageTagsで、ビルドを強制する場合 | 偽 |
<noCache>true</noCache> |
構築し、-no-キャッシュノーキャッシュを指定しません | 偽 |
<pullOnBuild>true</pullOnBuild> |
-pull =真たびに再引き上げベース画像を指定し、ビルド | 偽 |
<pushImage>true</pushImage> |
ミラーリングビルドプッシュが完了すると | 偽 |
<pushImageTag>true</pushImageTag> |
ビルドが完了すると、ミラーのプッシュは、使用imageTagsで、タグを指定しました | 偽 |
<retryPushCount>5</retryPushCount> |
プッシュミラーは、再試行の回数を失敗します | 5 |
<retryPushTimeout>10</retryPushTimeout> |
プッシュミラーは、時間を再試行し、失敗しました | 10S |
<rm>true</rm> |
ビルド、ビルドが完了した後真= -rm指定即ち中間容器を取り除きます | 偽 |
<useGitCommitId>true</useGitCommitId> |
例えば、使用gitの前に、最新のタグとして、IDに7ビットをコミットし、構築:画像:b50b604を、前提がNEWNAMEに配置されていません | 偽 |
4、よくある質問
状況を考えると、イメージの構築を行う1、:
[INFO] Building image mavendemo
org.apache.http.impl.execchain.RetryExec execute
I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project mavenDemo: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: No such file or directory -> [Help 1]
サービスはドッカーのために、あなたはドッカーを開始することができます起動しなかったためです。
2、画像を構築し実行する際に、エラーケース2:
ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project mavenDemo: Exception caught: Request error: POST unix://localhost:80/build?t=mavenDemo: 500, body: {"message":"Error parsing reference: \"mavenDemo\" is not a valid repository/tag: repository name must be lowercase"}: HTTP 500 Internal Server Error -> [Help 1]
これは、画像名が正しくないため、ドッカー画像名が一致する必要がある[-Z0-9-_。]。
参考資料
オリジナル住所ます。https://blog.csdn.net/aixiaoyang168/article/details/77453974