{"id":1931,"date":"2023-04-01T09:54:17","date_gmt":"2023-04-01T01:54:17","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1931"},"modified":"2023-04-22T08:47:48","modified_gmt":"2023-04-22T00:47:48","slug":"use-of-docker-aven-plugin-in-maven-plugin","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/04\/01\/use-of-docker-aven-plugin-in-maven-plugin\/","title":{"rendered":"Maven \u63d2\u4ef6\u4e4b docker-maven-plugin \u7684\u4f7f\u7528"},"content":{"rendered":"<h2>docker-maven-plugin \u4ecb\u7ecd<\/h2>\n<p>\u5728\u6301\u7eed\u96c6\u6210\u8fc7\u7a0b\u4e2d\uff0c\u9879\u76ee\u5de5\u7a0b\u4e00\u822c\u4f7f\u7528Maven\u7f16\u8bd1\u6253\u5305\uff0c\u7136\u540e\u751f\u6210\u955c\u50cf\uff0c\u901a\u8fc7\u955c\u50cf\u4e0a\u7ebf\uff0c\u80fd\u591f\u5927\u5927\u63d0\u4f9b\u4e0a\u7ebf\u6548\u7387\uff0c\u540c\u65f6\u80fd\u591f\u5feb\u901f\u52a8\u6001\u6269\u5bb9\uff0c\u5feb\u901f\u56de\u6eda\uff0c\u7740\u5b9e\u5f88\u65b9\u4fbf\u3002<code>docker-maven-plugin<\/code>\u63d2\u4ef6\u5c31\u662f\u4e3a\u4e86\u5e2e\u52a9\u6211\u4eec\u5728Maven\u5de5\u7a0b\u4e2d\uff0c\u901a\u8fc7\u7b80\u5355\u7684\u914d\u7f6e\uff0c\u81ea\u52a8\u751f\u6210\u955c\u50cf\u5e76\u63a8\u9001\u5230\u4ed3\u5e93\u4e2d\u3002<\/p>\n<p><code>docker-maven-plugin<\/code>\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/spotify\/docker-maven-plugin\">https:\/\/github.com\/spotify\/docker-maven-plugin<\/a><\/p>\n<p><!-- more --><\/p>\n<h2>Demo \u793a\u4f8b<\/h2>\n<p>\u8fd9\u91cc\u6211\u4eec\u6d4b\u8bd5 Java Maven \u9879\u76ee\u4f7f\u7528<code>docker-maven<\/code>\u63d2\u4ef6\u6253\u955c\u50cf\uff0c\u4e0a\u4f20\u955c\u50cf\u7b49\u64cd\u4f5c<\/p>\n<h3>\u914d\u7f6e DOCKER_HOST<\/h3>\n<p><code>docker-maven-plugin<\/code>\u63d2\u4ef6\u9ed8\u8ba4\u8fde\u63a5\u672c\u5730<code>Docker<\/code>\u5730\u5740\u4e3a\uff1a<code>localhost:2375<\/code>\uff0c\u6240\u4ee5\u9700\u8981\u5148\u8bbe\u7f6e\u4e0b\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<pre><code>DOCKER_HOST=tcp:\/\/&lt;host&gt;:2375<\/code><\/pre>\n<p>\u6ce8\u610f\uff1a\u5982\u679c\u6ca1\u6709\u8bbe\u7f6e<code>DOCKER_HOST<\/code>\u73af\u5883\u53d8\u91cf\uff0c\u53ef\u4ee5\u547d\u4ee4\u884c\u663e\u793a\u6307\u5b9a<code>DOCKER_HOST<\/code>\u6765\u6267\u884c\uff0c\u5982\u672c\u673a\u6307\u5b9a<code>DOCKER_HOST<\/code>\uff1a<\/p>\n<pre><code>DOCKER_HOST=unix:\/\/\/var\/run\/docker.sock mvn clean install docker:build<\/code><\/pre>\n<h3>\u793a\u4f8b\u6784\u5efa\u955c\u50cf<\/h3>\n<p>\u6784\u5efa\u955c\u50cf\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\uff0c\u7b2c\u4e00\u79cd\u662f\u5c06\u6784\u5efa\u4fe1\u606f\u6307\u5b9a\u5230<code>POM<\/code>\u4e2d\uff0c\u7b2c\u4e8c\u79cd\u662f\u4f7f\u7528\u5df2\u5b58\u5728\u7684<code>Dockerfile<\/code>\u6784\u5efa\u3002<br \/>\n\u7b2c\u4e00\u79cd\u65b9\u5f0f\uff0c\u652f\u6301\u5c06<code>FROM<\/code>, <code>ENTRYPOINT<\/code>, <code>CMD<\/code>, <code>MAINTAINER<\/code>\u4ee5\u53ca<code>ADD<\/code>\u4fe1\u606f\u914d\u7f6e\u5728<code>POM<\/code>\u4e2d\uff0c\u4e0d\u9700\u8981\u4f7f\u7528<code>Dockerfile<\/code>\u914d\u7f6e\u3002\u4f46\u662f\u5982\u679c\u4f7f\u7528<code>VOLUME<\/code>\u6216\u5176\u4ed6<code>Dockerfile<\/code>\u4e2d\u7684\u547d\u4ee4\u7684\u65f6\u5019\uff0c\u9700\u8981\u4f7f\u7528\u7b2c\u4e8c\u79cd\u65b9\u5f0f\uff0c\u521b\u5efa\u4e00\u4e2a<code>Dockerfile<\/code>\uff0c\u5e76\u5728<code>POM<\/code>\u4e2d\u914d\u7f6e<code>dockerDirectory<\/code>\u6765\u6307\u5b9a\u8def\u5f84\u5373\u53ef\u3002<\/p>\n<p>\u8fd9\u91cc\u6211\u4eec\u4ee5\u4e00\u4e2a Java Maven \u9879\u76ee<code>mavendemo<\/code>\u4f5c\u4e3a\u793a\u4f8b\u6f14\u793a\u4e00\u4e0b\u3002<\/p>\n<h4>\u6307\u5b9a\u6784\u5efa\u4fe1\u606f\u5230 POM \u4e2d\u6784\u5efa<\/h4>\n<pre><code class=\"language-xml\">&lt;build&gt;\n    &lt;plugins&gt;\n        &lt;plugin&gt;\n            &lt;groupId&gt;com.spotify&lt;\/groupId&gt;\n            &lt;artifactId&gt;docker-maven-plugin&lt;\/artifactId&gt;\n            &lt;version&gt;1.0.0&lt;\/version&gt;\n            &lt;configuration&gt;\n                &lt;imageName&gt;mavendemo&lt;\/imageName&gt;\n                &lt;baseImage&gt;java&lt;\/baseImage&gt;\n                &lt;maintainer&gt;docker_maven docker_maven@email.com&lt;\/maintainer&gt;\n                &lt;workdir&gt;\/ROOT&lt;\/workdir&gt;\n                &lt;cmd&gt;[&quot;java&quot;, &quot;-version&quot;]&lt;\/cmd&gt;\n                &lt;entryPoint&gt;[&quot;java&quot;, &quot;-jar&quot;, &quot;${project.build.finalName}.jar&quot;]&lt;\/entryPoint&gt;\n                &lt;!-- \u8fd9\u91cc\u662f\u590d\u5236 jar \u5305\u5230 docker \u5bb9\u5668\u6307\u5b9a\u76ee\u5f55\u914d\u7f6e --&gt;\n                &lt;resources&gt;\n                    &lt;resource&gt;\n                        &lt;targetPath&gt;\/ROOT&lt;\/targetPath&gt;\n                        &lt;directory&gt;${project.build.directory}&lt;\/directory&gt;\n                        &lt;include&gt;${project.build.finalName}.jar&lt;\/include&gt;\n                    &lt;\/resource&gt;\n                &lt;\/resources&gt;\n            &lt;\/configuration&gt;\n        &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n&lt;\/build&gt;<\/code><\/pre>\n<h4>\u4f7f\u7528 Dockerfile \u6784\u5efa<\/h4>\n<p><code>pom.xml<\/code>\u914d\u7f6e<\/p>\n<pre><code class=\"language-xml\">&lt;build&gt;\n    &lt;plugins&gt;\n         &lt;plugin&gt;\n            &lt;groupId&gt;com.spotify&lt;\/groupId&gt;\n            &lt;artifactId&gt;docker-maven-plugin&lt;\/artifactId&gt;\n            &lt;version&gt;1.0.0&lt;\/version&gt;\n            &lt;configuration&gt;\n                &lt;imageName&gt;mavendemo&lt;\/imageName&gt;\n                &lt;dockerDirectory&gt;${basedir}\/docker&lt;\/dockerDirectory&gt; &lt;!-- \u6307\u5b9a Dockerfile \u8def\u5f84--&gt;\n                &lt;!-- \u8fd9\u91cc\u662f\u590d\u5236 jar \u5305\u5230 docker \u5bb9\u5668\u6307\u5b9a\u76ee\u5f55\u914d\u7f6e\uff0c\u4e5f\u53ef\u4ee5\u5199\u5230 Docokerfile \u4e2d --&gt;\n                &lt;resources&gt;\n                    &lt;resource&gt;\n                        &lt;targetPath&gt;\/ROOT&lt;\/targetPath&gt;\n                        &lt;directory&gt;${project.build.directory}&lt;\/directory&gt;\n                        &lt;include&gt;${project.build.finalName}.jar&lt;\/include&gt;\n                    &lt;\/resource&gt;\n                &lt;\/resources&gt;\n            &lt;\/configuration&gt;\n        &lt;\/plugin&gt;   \n    &lt;\/plugins&gt;\n&lt;\/build&gt;<\/code><\/pre>\n<p><code>${basedir}\/docker\/Dockerfile<\/code>\u914d\u7f6e<\/p>\n<pre><code>FROM java\nMAINTAINER docker_maven docker_maven@email.com\nWORKDIR \/ROOT\nCMD [&quot;java&quot;, &quot;-version&quot;]\nENTRYPOINT [&quot;java&quot;, &quot;-jar&quot;, &quot;${project.build.finalName}.jar&quot;]<\/code><\/pre>\n<p>\u4ee5\u4e0a\u4e24\u79cd\u65b9\u5f0f\u6267\u884c<code>docker:build<\/code>\u6548\u679c\u662f\u4e00\u6837\u7684\uff0c\u6267\u884c\u8f93\u51fa\u8fc7\u7a0b\u5927\u81f4\u5982\u4e0b\uff1a<\/p>\n<pre><code>[INFO] --- docker-maven-plugin:1.0.0:build (default-cli) @ mavenDemo ---\n[INFO] Building image mavendemo\nStep 1\/5 : FROM java\n ---&gt; d23bdf5b1b1b\nStep 2\/5 : MAINTAINER docker_maven docker_maven@email.com\n ---&gt; Using cache\n ---&gt; 2faf180d4a50\nStep 3\/5 : WORKDIR \/ROOT\n ---&gt; Using cache\n ---&gt; 862210f7956a\nStep 4\/5 : ENTRYPOINT java -jar mavenDemo.jar\n ---&gt; Running in 96bbe83de6ec\n ---&gt; c29009c88993\nRemoving intermediate container 96bbe83de6ec\nStep 5\/5 : CMD java -version\n ---&gt; Running in f69b8d2a75b1\n ---&gt; bc8d54014325\nRemoving intermediate container f69b8d2a75b1\nSuccessfully built bc8d54014325<\/code><\/pre>\n<p>\u6267\u884c\u5b8c\u6210\u540e\uff0c\u4f7f\u7528<code>docker images<\/code>\u67e5\u770b\u751f\u6210\u7684\u955c\u50cf\uff1a<\/p>\n<pre><code>REPOSITORY       TAG           IMAGE ID            CREATED             SIZE\nmavendemo        latest        333b429536b2        38 minutes ago      643 MB<\/code><\/pre>\n<h3>\u6267\u884c\u547d\u4ee4<\/h3>\n<p><code>mvn clean package docker:build<\/code>\u53ea\u6267\u884c build \u64cd\u4f5c<\/p>\n<p><code>mvn clean package docker:build -DpushImage<\/code>\u6267\u884c build \u5b8c\u6210\u540e push \u955c\u50cf<\/p>\n<p><code>mvn clean package docker:build -DpushImageTag<\/code>\u6267\u884c build \u5e76 push \u6307\u5b9a tag \u7684\u955c\u50cf<\/p>\n<p>\u6ce8\u610f\uff1a\u8fd9\u91cc\u5fc5\u987b\u6307\u5b9a\u81f3\u5c11\u4e00\u4e2a<code>imageTag<\/code>\uff0c\u5b83\u53ef\u4ee5\u914d\u7f6e\u5230<code>POM<\/code>\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5728\u547d\u4ee4\u884c\u6307\u5b9a\u3002\u547d\u4ee4\u884c\u6307\u5b9a\u5982\u4e0b\uff1a<\/p>\n<pre><code>mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2<\/code><\/pre>\n<p>POM \u6587\u4ef6\u4e2d\u6307\u5b9a\u914d\u7f6e\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-xml\">&lt;build&gt;\n  &lt;plugins&gt;\n    ...\n    &lt;plugin&gt;\n      &lt;configuration&gt;\n        ...\n        &lt;imageTags&gt;\n           &lt;imageTag&gt;imageTag_1&lt;\/imageTag&gt;\n           &lt;imageTag&gt;imageTag_2&lt;\/imageTag&gt;\n        &lt;\/imageTags&gt;\n      &lt;\/configuration&gt;\n    &lt;\/plugin&gt;\n    ...\n  &lt;\/plugins&gt;\n&lt;\/build&gt;<\/code><\/pre>\n<h3>\u7ed1\u5b9aDocker \u547d\u4ee4\u5230 Maven \u5404\u4e2a\u9636\u6bb5<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u7ed1\u5b9a<code>Docker<\/code>\u547d\u4ee4\u5230 Maven \u5404\u4e2a\u9636\u6bb5\uff0c\u628a<code>Docker<\/code>\u5206\u4e3a<code>build<\/code>\u3001<code>tag<\/code>\u3001<code>push<\/code>\uff0c\u7136\u540e\u5206\u522b\u7ed1\u5b9a Maven \u7684<code>package<\/code>\u3001<code>deploy<\/code>\u9636\u6bb5\uff0c\u6b64\u65f6\uff0c\u6211\u4eec\u53ea\u9700\u8981\u6267\u884c<code>mvn deploy<\/code>\u5c31\u53ef\u4ee5\u5b8c\u6210\u6574\u4e2a<code>build<\/code>\u3001<code>tag<\/code>\u3001<code>push<\/code>\u64cd\u4f5c\uff0c\u5f53\u6211\u4eec\u6267\u884c<code>mvn build<\/code>\u5c31\u53ea\u5b8c\u6210<code>build<\/code>\u3001<code>tag<\/code>\u64cd\u4f5c\u3002\u9664\u6b64\u6b64\u5916\uff0c\u5f53\u6211\u4eec\u60f3\u8df3\u8fc7\u67d0\u4e9b\u6b65\u9aa4\u6216\u8005\u53ea\u6267\u884c\u67d0\u4e2a\u6b65\u9aa4\u65f6\uff0c\u4e0d\u9700\u8981\u4fee\u6539<code>POM<\/code>\u6587\u4ef6\uff0c\u53ea\u9700\u8981\u6307\u5b9a\u8df3\u8fc7<code>Docker<\/code>\u67d0\u4e2a\u6b65\u9aa4\u5373\u53ef\u3002\u6bd4\u5982\u5f53\u6211\u4eec\u5de5\u7a0b\u5df2\u7ecf\u914d\u7f6e\u597d\u4e86\u81ea\u52a8\u5316\u6a21\u677f\uff0c\u4f46\u662f\u8fd9\u6b21\u6211\u4eec\u53ea\u9700\u8981\u6253\u955c\u50cf\u5230\u672c\u5730\u81ea\u6d4b\uff0c\u4e0d\u60f3\u6267\u884c<code>push<\/code>\u9636\u6bb5\uff0c\u90a3\u4e48\u6b64\u65f6\u6267\u884c\u8981\u6307\u5b9a\u53c2\u6570<code>-DskipDockerPush<\/code>\u5c31\u53ef\u8df3\u8fc7<code>push<\/code>\u64cd\u4f5c\u3002<\/p>\n<pre><code class=\"language-xml\">&lt;build&gt;\n    &lt;plugins&gt;\n        &lt;plugin&gt;\n            &lt;groupId&gt;com.spotify&lt;\/groupId&gt;\n            &lt;artifactId&gt;docker-maven-plugin&lt;\/artifactId&gt;\n            &lt;version&gt;1.0.0&lt;\/version&gt;\n            &lt;configuration&gt;\n                &lt;imageName&gt;mavendemo&lt;\/imageName&gt;\n                &lt;baseImage&gt;java&lt;\/baseImage&gt;\n                &lt;maintainer&gt;docker_maven docker_maven@email.com&lt;\/maintainer&gt;\n                &lt;workdir&gt;\/ROOT&lt;\/workdir&gt;\n                &lt;cmd&gt;[&quot;java&quot;, &quot;-version&quot;]&lt;\/cmd&gt;\n                &lt;entryPoint&gt;[&quot;java&quot;, &quot;-jar&quot;, &quot;${project.build.finalName}.jar&quot;]&lt;\/entryPoint&gt;\n                &lt;resources&gt;\n                    &lt;resource&gt;\n                        &lt;targetPath&gt;\/ROOT&lt;\/targetPath&gt;\n                        &lt;directory&gt;${project.build.directory}&lt;\/directory&gt;\n                        &lt;include&gt;${project.build.finalName}.jar&lt;\/include&gt;\n                    &lt;\/resource&gt;\n                &lt;\/resources&gt;\n            &lt;\/configuration&gt;\n            &lt;executions&gt;\n                &lt;execution&gt;\n                    &lt;id&gt;build-image&lt;\/id&gt;\n                    &lt;phase&gt;package&lt;\/phase&gt;\n                    &lt;goals&gt;\n                        &lt;goal&gt;build&lt;\/goal&gt;\n                    &lt;\/goals&gt;\n                &lt;\/execution&gt;\n                &lt;execution&gt;\n                    &lt;id&gt;tag-image&lt;\/id&gt;\n                    &lt;phase&gt;package&lt;\/phase&gt;\n                    &lt;goals&gt;\n                        &lt;goal&gt;tag&lt;\/goal&gt;\n                    &lt;\/goals&gt;\n                    &lt;configuration&gt;\n                        &lt;image&gt;mavendemo:latest&lt;\/image&gt;\n                        &lt;newName&gt;docker.io\/yezhou\/mavendemo:${project.version}&lt;\/newName&gt;\n                    &lt;\/configuration&gt;\n                &lt;\/execution&gt;\n                &lt;execution&gt;\n                    &lt;id&gt;push-image&lt;\/id&gt;\n                    &lt;phase&gt;deploy&lt;\/phase&gt;\n                    &lt;goals&gt;\n                        &lt;goal&gt;push&lt;\/goal&gt;\n                    &lt;\/goals&gt;\n                    &lt;configuration&gt;\n                        &lt;imageName&gt;docker.io\/yezhou\/mavendemo:${project.version}&lt;\/imageName&gt;\n                    &lt;\/configuration&gt;\n                &lt;\/execution&gt;\n            &lt;\/executions&gt;\n        &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n&lt;\/build&gt;<\/code><\/pre>\n<p>\u4ee5\u4e0a\u793a\u4f8b\uff0c\u5f53\u6211\u4eec\u6267\u884c<code>mvn package<\/code>\u65f6\uff0c\u6267\u884c<code>build<\/code>\u3001<code>tag<\/code>\u64cd\u4f5c\uff0c\u5f53\u6267\u884c<code>mvn deploy<\/code>\u65f6\uff0c\u6267\u884c<code>build<\/code>\u3001<code>tag<\/code>\u3001<code>push<\/code>\u64cd\u4f5c\u3002\u5982\u679c\u6211\u4eec\u60f3\u8df3\u8fc7<code>docker<\/code>\u67d0\u4e2a\u8fc7\u7a0b\u65f6\uff0c\u53ea\u9700\u8981\uff1a<\/p>\n<ul>\n<li><code>-DskipDockerBuild<\/code> \u8df3\u8fc7 build \u955c\u50cf<\/li>\n<li><code>-DskipDockerTag<\/code> \u8df3\u8fc7 tag \u955c\u50cf<\/li>\n<li><code>-DskipDockerPush<\/code> \u8df3\u8fc7 push \u955c\u50cf<\/li>\n<li><code>-DskipDocker<\/code> \u8df3\u8fc7\u6574\u4e2a\u9636\u6bb5<\/li>\n<\/ul>\n<p>\u4f8b\u5982\uff1a\u6211\u4eec\u60f3\u6267\u884c<code>package<\/code>\u65f6\uff0c\u8df3\u8fc7<code>tag<\/code>\u8fc7\u7a0b\uff0c\u90a3\u4e48\u5c31\u9700\u8981\uff1a<code>mvn package -DskipDockerTag<\/code><\/p>\n<h3>\u4f7f\u7528\u79c1\u6709 Docker \u4ed3\u5e93\u5730\u5740<\/h3>\n<p>\u5b9e\u9645\u5de5\u4f5c\u73af\u5883\u4e2d\uff0c\u6211\u4eec\u9700\u8981<code>push<\/code>\u955c\u50cf\u5230\u6211\u4eec\u79c1\u6709<code>Docker<\/code>\u4ed3\u5e93\u4e2d\uff0c\u4f7f\u7528<code>docker-maven-plugin<\/code>\u63d2\u4ef6\u6211\u4eec\u4e5f\u662f\u5f88\u5bb9\u6613\u5b9e\u73b0\uff0c\u6709\u51e0\u79cd\u65b9\u5f0f\u5b9e\u73b0\uff1a<\/p>\n<p>\uff081\uff09\u4fee\u6539<code>POM<\/code>\u6587\u4ef6<code>imageName<\/code>\u64cd\u4f5c<\/p>\n<pre><code class=\"language-xml\">...\n&lt;configuration&gt;\n    &lt;imageName&gt;registry.example.com\/yezhou\/mavendemo:v1.0.0&lt;\/imageName&gt;\n    ...\n&lt;\/configuration&gt;\n...<\/code><\/pre>\n<p>\uff082\uff09\u4fee\u6539<code>POM<\/code>\u6587\u4ef6\u4e2d<code>newName<\/code>\u64cd\u4f5c<\/p>\n<pre><code class=\"language-xml\">...\n&lt;configuration&gt;\n    &lt;imageName&gt;mavendemo&lt;\/imageName&gt;\n    ...\n&lt;\/configuration&gt;\n&lt;execution&gt;\n    &lt;id&gt;tag-image&lt;\/id&gt;\n    &lt;phase&gt;package&lt;\/phase&gt;\n    &lt;goals&gt;\n        &lt;goal&gt;tag&lt;\/goal&gt;\n    &lt;\/goals&gt;\n    &lt;configuration&gt;\n        &lt;image&gt;mavendemo&lt;\/image&gt;\n        &lt;newName&gt;registry.example.com\/yezhou\/mavendemo:v1.0.0&lt;\/newName&gt;\n    &lt;\/configuration&gt;\n&lt;\/execution&gt;\n...<\/code><\/pre>\n<h3>\u5b89\u5168\u8ba4\u8bc1\u914d\u7f6e<\/h3>\n<p>\u5f53\u6211\u4eec<code>push<\/code>\u955c\u50cf\u5230<code>Docker<\/code>\u4ed3\u5e93\u4e2d\u65f6\uff0c\u4e0d\u7ba1\u662f\u5171\u6709\u8fd8\u662f\u79c1\u6709\uff0c\u7ecf\u5e38\u4f1a\u9700\u8981\u5b89\u5168\u8ba4\u8bc1\uff0c\u767b\u5f55\u5b8c\u6210\u4e4b\u540e\u624d\u53ef\u4ee5\u8fdb\u884c\u64cd\u4f5c\u3002\u5f53\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c<code>docker login -u user_name -p password docker_registry_host<\/code>\u767b\u5f55\uff0c\u4f46\u662f\u5bf9\u4e8e\u81ea\u52a8\u5316\u6d41\u7a0b\u6765\u8bf4\uff0c\u5c31\u4e0d\u662f\u5f88\u65b9\u4fbf\u4e86\u3002\u4f7f\u7528<code>docker-maven-plugin<\/code>\u63d2\u4ef6\u6211\u4eec\u53ef\u4ee5\u5f88\u5bb9\u6613\u5b9e\u73b0\u5b89\u5168\u8ba4\u8bc1\u3002<\/p>\n<p>\u9996\u5148\u5728 Maven \u7684\u914d\u7f6e\u6587\u4ef6<code>setting.xml<\/code>\u4e2d\u589e\u52a0\u76f8\u5173<code>server<\/code>\u914d\u7f6e\uff0c\u4e3b\u8981\u914d\u7f6e<code>Docker registry<\/code>\u7528\u6237\u8ba4\u8bc1\u4fe1\u606f\u3002<\/p>\n<pre><code class=\"language-xml\">&lt;servers&gt;\n  &lt;server&gt;\n    &lt;id&gt;my-docker-registry&lt;\/id&gt;\n    &lt;username&gt;yezhou&lt;\/username&gt;\n    &lt;password&gt;12345678&lt;\/password&gt;\n    &lt;configuration&gt;\n      &lt;email&gt;yezhou@mail.com&lt;\/email&gt;\n    &lt;\/configuration&gt;\n  &lt;\/server&gt;\n&lt;\/servers&gt;<\/code><\/pre>\n<p>\u7136\u540e\u53ea\u9700\u8981\u5728<code>pom.xml<\/code>\u4e2d\u4f7f\u7528<code>server id<\/code>\u5373\u53ef\u3002<\/p>\n<pre><code>&lt;plugin&gt;\n  &lt;plugin&gt;\n    &lt;groupId&gt;com.spotify&lt;\/groupId&gt;\n    &lt;artifactId&gt;docker-maven-plugin&lt;\/artifactId&gt;\n    &lt;version&gt;1.0.0&lt;\/version&gt;\n    &lt;configuration&gt;\n      &lt;imageName&gt;registry.example.com\/wanyang3\/mavendemo:v1.0.0&lt;\/imageName&gt;\n      ...\n      &lt;serverId&gt;my-docker-registry&lt;\/serverId&gt;\n    &lt;\/configuration&gt;\n  &lt;\/plugin&gt;\n&lt;\/plugins&gt;<\/code><\/pre>\n<h3>\u5176\u4ed6\u53c2\u6570<\/h3>\n<p><code>docker-maven-plugin<\/code>\u63d2\u4ef6\u8fd8\u63d0\u4f9b\u4e86\u5f88\u591a\u5f88\u5b9e\u7528\u7684\u914d\u7f6e\uff0c\u7a0d\u5fae\u5217\u4e3e\u51e0\u4e2a\u53c2\u6570\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">\u53c2\u6570<\/th>\n<th style=\"text-align: left;\">\u8bf4\u660e<\/th>\n<th style=\"text-align: left;\">\u9ed8\u8ba4\u503c<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;forceTags&gt;true&lt;\/forceTags&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u65f6\u5f3a\u5236\u8986\u76d6<code>tag<\/code>\uff0c\u914d\u5408<code>imageTags<\/code>\u4f7f\u7528<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;noCache&gt;true&lt;\/noCache&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u65f6\uff0c\u6307\u5b9a<code>\u2013no-cache<\/code>\u4e0d\u4f7f\u7528\u7f13\u5b58<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;pullOnBuild&gt;true&lt;\/pullOnBuild&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u65f6\uff0c\u6307\u5b9a<code>\u2013pull=true<\/code>\u6bcf\u6b21\u90fd\u91cd\u65b0\u62c9\u53d6\u57fa\u7840\u955c\u50cf<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;pushImage&gt;true&lt;\/pushImage&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u5b8c\u6210\u540e push \u955c\u50cf<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;pushImageTag&gt;true&lt;\/pushImageTag&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u5b8c\u6210\u540e\uff0c<code>push<\/code>\u6307\u5b9a<code>tag<\/code>\u7684\u955c\u50cf\uff0c\u914d\u5408<code>imageTags<\/code>\u4f7f\u7528<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;retryPushCount&gt;5&lt;\/retryPushCount&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>push<\/code>\u955c\u50cf\u5931\u8d25\uff0c\u91cd\u8bd5\u6b21\u6570<\/td>\n<td style=\"text-align: left;\">5<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;retryPushTimeout&gt;10&lt;\/retryPushTimeout&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>push<\/code>\u955c\u50cf\u5931\u8d25\uff0c\u91cd\u8bd5\u65f6\u95f4<\/td>\n<td style=\"text-align: left;\">10s<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;rm&gt;true&lt;\/rm&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u65f6\uff0c\u6307\u5b9a<code>\u2013rm=true<\/code>\u5373<code>build<\/code>\u5b8c\u6210\u540e\u5220\u9664\u4e2d\u95f4\u5bb9\u5668<\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>&lt;useGitCommitId&gt;true&lt;\/useGitCommitId&gt;<\/code><\/td>\n<td style=\"text-align: left;\"><code>build<\/code>\u65f6\uff0c\u4f7f\u7528\u6700\u8fd1\u7684<code>git commit id<\/code>\u524d7\u4f4d\u4f5c\u4e3a<code>tag<\/code><br \/>\u4f8b\u5982\uff1a<code>image:b50b604<\/code>\uff0c\u524d\u63d0\u662f\u4e0d\u914d\u7f6e<code>newName<\/code><\/td>\n<td style=\"text-align: left;\">false<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\u914d\u7f6e\u6848\u4f8b<\/h2>\n<pre><code class=\"language-xml\">&lt;build&gt;\n    &lt;plugins&gt;\n        &lt;plugin&gt;\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-boot-maven-plugin&lt;\/artifactId&gt;\n            &lt;executions&gt;\n                &lt;execution&gt;\n                    &lt;goals&gt;\n                        &lt;goal&gt;repackage&lt;\/goal&gt;\n                    &lt;\/goals&gt;\n                &lt;\/execution&gt;\n            &lt;\/executions&gt;\n        &lt;\/plugin&gt;\n        &lt;plugin&gt;\n            &lt;groupId&gt;com.spotify&lt;\/groupId&gt;\n            &lt;artifactId&gt;docker-maven-plugin&lt;\/artifactId&gt;\n            &lt;configuration&gt;\n                &lt;imageName&gt;${docker.image.prefix}\/${project.artifactId}&lt;\/imageName&gt;\n                &lt;imageTags&gt;\n                    &lt;imageTag&gt;${project.version}&lt;\/imageTag&gt;\n                    &lt;imageTag&gt;latest&lt;\/imageTag&gt;\n                &lt;\/imageTags&gt;\n                &lt;forceTags&gt;true&lt;\/forceTags&gt;\n                &lt;baseImage&gt;${docker.baseImage}&lt;\/baseImage&gt;\n                &lt;volumes&gt;${docker.volumes}&lt;\/volumes&gt;\n                &lt;env&gt;\n                    &lt;JAVA_OPTS&gt;${docker.java.opts}&lt;\/JAVA_OPTS&gt;\n                &lt;\/env&gt;\n                &lt;entryPoint&gt;[&quot;sh&quot;,&quot;-c&quot;,&quot;java $JAVA_OPTS ${docker.java.security.egd} -jar \/${project.build.finalName}.jar&quot;]&lt;\/entryPoint&gt;\n                &lt;resources&gt;\n                    &lt;resource&gt;\n                        &lt;targetPath&gt;\/&lt;\/targetPath&gt;\n                        &lt;directory&gt;${project.build.directory}&lt;\/directory&gt;\n                        &lt;include&gt;${project.build.finalName}.jar&lt;\/include&gt;\n                    &lt;\/resource&gt;\n                &lt;\/resources&gt;\n            &lt;\/configuration&gt;\n        &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n    &lt;finalName&gt;${project.artifactId}&lt;\/finalName&gt;\n&lt;\/build&gt;<\/code><\/pre>\n<h2>FAQ<\/h2>\n<p>1\u3001\u6267\u884c<code>build images<\/code>\u65f6\uff0c\u62a5\u9519\u60c5\u51b5\u4e00\uff1a<\/p>\n<pre><code>[INFO] Building image mavendemo\norg.apache.http.impl.execchain.RetryExec execute\nI\/O exception (java.io.IOException) caught when processing request to {}-&gt;unix:\/\/localhost:80: No such file or directory\n[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 -&gt; [Help 1]<\/code><\/pre>\n<p>\u8fd9\u4e2a\u662f\u56e0\u4e3a<code>Docker<\/code>\u670d\u52a1\u6ca1\u6709\u542f\u52a8\u9020\u6210\u7684\uff0c\u542f\u52a8<code>Docker<\/code>\u5373\u53ef<\/p>\n<p>2\u3001\u6267\u884c<code>build images<\/code>\u65f6\uff0c\u62a5\u9519\u60c5\u51b5\u4e8c\uff1a<\/p>\n<pre><code>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: {&quot;message&quot;:&quot;Error parsing reference: \\&quot;mavenDemo\\&quot; is not a valid repository\/tag: repository name must be lowercase&quot;}: HTTP 500 Internal Server Error -&gt; [Help 1]<\/code><\/pre>\n<p>\u8fd9\u4e2a\u662f\u56e0\u4e3a\u955c\u50cf\u540d\u5b57\u4e0d\u6b63\u786e\uff0c<code>Docker<\/code>\u955c\u50cf\u540d\u79f0\u9700\u5339\u914d<code>[a-z0-9-_.]<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>docker-maven-plugin \u4ecb\u7ecd \u5728\u6301\u7eed\u96c6\u6210\u8fc7\u7a0b\u4e2d\uff0c\u9879\u76ee\u5de5\u7a0b\u4e00\u822c\u4f7f\u7528Maven\u7f16\u8bd1\u6253\u5305\uff0c\u7136\u540e\u751f\u6210\u955c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[179,41],"tags":[143],"class_list":["post-1931","post","type-post","status-publish","format-standard","hentry","category-docker","category-spring-boot","tag-maven"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1931"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1931\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}