{"id":412,"date":"2017-09-13T16:43:12","date_gmt":"2017-09-13T08:43:12","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=412"},"modified":"2017-09-13T16:43:12","modified_gmt":"2017-09-13T08:43:12","slug":"%e4%bd%bf%e7%94%a8docker-maven-plugin%e6%8f%92%e4%bb%b6%e5%ae%9e%e7%8e%b0docker%e6%9e%84%e5%bb%ba%e5%b9%b6%e6%8f%90%e4%ba%a4%e5%88%b0%e7%a7%81%e6%9c%89%e4%bb%93%e5%ba%93","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=412","title":{"rendered":"\u4f7f\u7528docker-maven-plugin\u63d2\u4ef6\u5b9e\u73b0Docker\u6784\u5efa\u5e76\u63d0\u4ea4\u5230\u79c1\u6709\u4ed3\u5e93"},"content":{"rendered":"<div>\n<div>\n<h5>\u4f7f\u7528Maven\u63d2\u4ef6\u5b9e\u73b0\u9879\u76ee\u6253\u5305\u53caDocker\u6784\u5efa\u5e76\u63d0\u4ea4\u5230\u79c1\u6709\u4ed3\u5e93<\/h5>\n<h6><em>\u4ee5\u4e0b\u5185\u5bb9\u975e\u6559\u7a0b\uff0c\u4e0d\u9002\u5408\u5bf9Docker\u53caMaven\u4e0d\u719f\u6089\u8005\u4f7f\u7528<\/em><\/h6>\n<p>\u76ee\u6807\uff1aSpring Boot\u9879\u76ee\u6253\u5305\u6210\u53ef\u6267\u884c\u7684jar\u6587\u4ef6\u540e\uff0c\u4f7f\u7528docker-maven-plugin\uff08spotify\uff09\u63d2\u4ef6\u81ea\u52a8\u6784\u5efaDocker\u540e\u4e0a\u4f20\u5230\u963f\u91cc\u4e91Docker\u955c\u50cf\u4ed3\u5e93\uff08\u5176\u4ed6\u4ed3\u5e93\u540c\u7406\uff09<\/p>\n<blockquote><p>\u5f15\u7528\u53c2\u8003\uff1a<\/p>\n<ol>\n<li>docker-maven-plugin\u63d2\u4ef6\uff1a<a href=\"https:\/\/github.com\/spotify\/docker-maven-plugin\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/spotify\/docker-maven-plugin<\/a><\/li>\n<li>Maven\u63d0\u4ea4\u670d\u52a1\u5bc6\u7801\u52a0\u5bc6\uff1a<a href=\"https:\/\/maven.apache.org\/guides\/mini\/guide-encryption.html\" target=\"_blank\" rel=\"noopener\">https:\/\/maven.apache.org\/guides\/mini\/guide-encryption.html<\/a><\/li>\n<li>Maven\u7684settings.xml\uff1a<a href=\"http:\/\/maven.apache.org\/ref\/3.3.9\/maven-settings\/settings.html\" target=\"_blank\" rel=\"noopener\">http:\/\/maven.apache.org\/ref\/3.3.9\/maven-settings\/settings.html<\/a><\/li>\n<\/ol>\n<\/blockquote>\n<p>\u51c6\u5907\u5de5\u4f5c\uff1a<\/p>\n<ul>\n<li>\u672c\u673a\u5b89\u88c5 Docker 1.9<\/li>\n<li>Eclipse\u73af\u5883\uff08\u672c\u673a\u4f7f\u7528STS\uff09<\/li>\n<li>Maven\u73af\u5883<\/li>\n<li>\u963f\u91cc\u4e91Docker\u4ed3\u5e93\uff08\u5176\u4ed6Docker\u4ed3\u5e93\u90fd\u53ef\u4ee5\uff09<\/li>\n<li>\u5982\u679c\u9700\u8981Maven\u9879\u76ee\u90e8\u7f72\uff0c\u9700\u8981Maven\u79c1\u670d\uff08\uff09<\/li>\n<li>SecureCRT \uff08\u5176\u4ed6\u7ec8\u7aef\u7686\u53ef\uff0c\u4ec5\u7528\u4e8e\u542f\u52a8Docker\u6d4b\u8bd5\uff09<\/li>\n<\/ul>\n<p>1\u3001 \u6784\u5efaSpring Boot\u9879\u76ee<\/p>\n<div class=\"image-package\"><img decoding=\"async\" src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-1a0e51451c342615.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" data-original-src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-1a0e51451c342615.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\" \/><\/p>\n<div class=\"image-caption\">\u9879\u76ee\u76ee\u5f55<\/div>\n<\/div>\n<p>2\u3001 pom.xml\u6587\u4ef6\u4e2d \u52a0\u5165docker-maven-plugin\u63d2\u4ef6<\/p>\n<p>\u5b8c\u6574pom\u6587\u4ef6\uff1a<\/p>\n<pre class=\"hljs undefined\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n    xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\n    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n    &lt;groupId&gt;com.example&lt;\/groupId&gt;\n    &lt;artifactId&gt;dockerdemo&lt;\/artifactId&gt;\n    &lt;version&gt;0.0.1&lt;\/version&gt;\n    &lt;packaging&gt;jar&lt;\/packaging&gt;\n\n    &lt;name&gt;dockerdemo&lt;\/name&gt;\n    &lt;description&gt;Demo project for Spring Boot&lt;\/description&gt;\n\n    &lt;parent&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-boot-starter-parent&lt;\/artifactId&gt;\n        &lt;version&gt;1.4.3.RELEASE&lt;\/version&gt;\n        &lt;relativePath\/&gt; &lt;!-- lookup parent from repository --&gt;\n    &lt;\/parent&gt;\n\n    &lt;properties&gt;\n        &lt;project.build.sourceEncoding&gt;UTF-8&lt;\/project.build.sourceEncoding&gt;\n        &lt;project.reporting.outputEncoding&gt;UTF-8&lt;\/project.reporting.outputEncoding&gt;\n        &lt;java.version&gt;1.8&lt;\/java.version&gt;\n        &lt;docker.repostory&gt;registry.cn-hangzhou.aliyuncs.com&lt;\/docker.repostory&gt;\n        &lt;docker.registry.name&gt;viiso&lt;\/docker.registry.name&gt;\n    &lt;\/properties&gt;\n\n    &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-boot-starter-actuator&lt;\/artifactId&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-boot-devtools&lt;\/artifactId&gt;\n            &lt;scope&gt;runtime&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-boot-starter-test&lt;\/artifactId&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n    &lt;\/dependencies&gt;\n\n    &lt;build&gt;\n        &lt;resources&gt;&lt;!-- \u4f7f\u7528@@\u7ad9\u4f4d\u7b26\uff0c\u8f93\u51faDockerfile\u81f3docker\u6587\u4ef6\u5939 --&gt;\n            &lt;resource&gt;\n                &lt;directory&gt;src\/main\/docker&lt;\/directory&gt;\n                &lt;filtering&gt;true&lt;\/filtering&gt;\n                &lt;includes&gt;\n                    &lt;include&gt;**\/Dockerfile&lt;\/include&gt;\n                &lt;\/includes&gt;\n                &lt;targetPath&gt;..\/docker&lt;\/targetPath&gt;\n            &lt;\/resource&gt;\n        &lt;\/resources&gt;\n        &lt;plugins&gt;\n            &lt;plugin&gt;&lt;!-- \u7f6e\u9876 --&gt;\n                &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n                &lt;artifactId&gt;spring-boot-maven-plugin&lt;\/artifactId&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;version&gt;0.4.13&lt;\/version&gt;\n                &lt;executions&gt;\n                    &lt;execution&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;${docker.registry.name}\/${project.artifactId}:${project.version}&lt;\/image&gt;\n                            &lt;newName&gt;${docker.repostory}\/${docker.registry.name}\/${project.artifactId}:${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.repostory}\/${docker.registry.name}\/${project.artifactId}:${project.version}&lt;\/imageName&gt;\n                        &lt;\/configuration&gt;\n                    &lt;\/execution&gt;\n                &lt;\/executions&gt;\n                &lt;configuration&gt;\n                    &lt;!-- \u79c1\u6709\u4ed3\u5e93\u914d\u7f6e\uff0c\u9700\u8981settings.xml\u6587\u4ef6\u914d\u5408serverId\u5bf9\u5e94\u7684\u670d\u52a1\u5730\u5740 --&gt;\n                    &lt;serverId&gt;docker-aliyun&lt;\/serverId&gt;\n                    &lt;registryUrl&gt;registry.cn-hangzhou.aliyuncs.com&lt;\/registryUrl&gt;\n                    &lt;!-- &lt;forceTags&gt;true&lt;\/forceTags&gt; --&gt;\n                    &lt;!--install\u9636\u6bb5\u4e5f\u4e0a\u4f20\uff0c\u5426\u5219\u53ea\u6709deploy\u9636\u6bb5\u4e0a\u4f20--&gt;\n                    &lt;pushImage&gt;true&lt;\/pushImage&gt;\n                    &lt;dockerDirectory&gt;target\/docker&lt;\/dockerDirectory&gt;\n                     &lt;imageName&gt;\n                        ${docker.repostory}\/${docker.registry.name}\/${project.artifactId}:${project.version}\n                    &lt;\/imageName&gt;\n                    &lt;imageTags&gt;\n                        &lt;!--docker\u7684tag\u4e3a\u9879\u76ee\u7248\u672c\u53f7\u3001latest--&gt;\n                        &lt;imageTag&gt;${git.commit.id.abbrev}&lt;\/imageTag&gt;\n                        &lt;imageTag&gt;latest&lt;\/imageTag&gt;\n                    &lt;\/imageTags&gt;\n                    &lt;resources&gt;\n                        &lt;rescource&gt;&lt;!-- \u5c06\u6253\u5305\u6587\u4ef6\u653e\u5165dockerDirectory\u6307\u5b9a\u7684\u4f4d\u7f6e --&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;\/rescource&gt;\n                           &lt;!-- \u8f93\u51faDockerfile\u81f3docker\u6587\u4ef6\u5939,\u5982\u679c\u4e0d\u4f7f\u7528\u5360\u4f4d\u7b26,\u53ef\u4f7f\u7528\u4ee5\u4e0b\u914d\u7f6e --&gt;\n                           &lt;!--\n                           &lt;resource&gt;\n                               &lt;directory&gt;src\/main\/docker&lt;\/directory&gt;\n                               &lt;filtering&gt;true&lt;\/filtering&gt;\n                               &lt;includes&gt;\n                                   &lt;include&gt;**\/Dockerfile&lt;\/include&gt;\n                               &lt;\/includes&gt;\n                               &lt;targetPath&gt;..\/docker&lt;\/targetPath&gt;\n                           &lt;\/resource&gt;\n                           --&gt;\n                    &lt;\/resources&gt;\n                &lt;\/configuration&gt;\n            &lt;\/plugin&gt;\n        &lt;\/plugins&gt;\n    &lt;\/build&gt;\n&lt;\/project&gt;<\/code><\/pre>\n<p>\u8bf4\u660e\uff1a<\/p>\n<ul>\n<li>Dockerfile\u6784\u5efa\u6587\u4ef6\u5728src\/main\/docker\u4e2d<\/li>\n<li>\u5982\u679cDockerfile\u6587\u4ef6\u9700\u8981maven\u6784\u5efa\u53c2\u6570\uff08\u6bd4\u5982\u9700\u8981\u6784\u5efa\u540e\u7684\u6253\u5305\u6587\u4ef6\u540d\u7b49\uff09\uff0c\u5219\u4f7f\u7528@@\u5360\u4f4d\u7b26\uff08\u5982@project.build.finalName@\uff09\u539f\u56e0\u662fSping Boot \u7684pom\u5c06resource\u63d2\u4ef6\u7684\u5360\u4f4d\u7b26\u7531${}\u6539\u4e3a@@\uff0c\u975e\u7ee7\u627fSpring Boot \u7684pom\u6587\u4ef6\uff0c\u5219\u4f7f\u7528${}\u5360\u4f4d\u7b26<\/li>\n<li>\u5982\u679c\u4e0d\u9700\u8981\u52a8\u6001\u751f\u6210Dockerfile\u6587\u4ef6\uff0c\u5219\u53ef\u4ee5\u5c06Dockerfile\u8d44\u6e90\u62f7\u8d1d\u90e8\u5206\u653e\u5165docker-maven-plugin\u63d2\u4ef6\u7684&lt;resources&gt;\u914d\u7f6e\u91cc<\/li>\n<li>spring-boot-maven-plugin\u63d2\u4ef6\u4e00\u5b9a\u8981\u5728\u5176\u4ed6\u6784\u5efa\u63d2\u4ef6\u4e4b\u4e0a\uff0c\u5426\u5219\u6253\u5305\u6587\u4ef6\u4f1a\u6709\u95ee\u9898\u3002<\/li>\n<\/ul>\n<p>Dockerfile\u6587\u4ef6<\/p>\n<pre class=\"hljs undefined\"><code># Version 0.0.1\nFROM java:8\n\nMAINTAINER Ryuu KK \"ryuu_kk@163.com\"\n\n# \u73af\u5883\u53d8\u91cf\nENV WORK_PATH \/home\/project\/dockerdemo\nENV APP_NAME @project.build.finalName@.@project.packaging@\nENV APP_VERSION @project.version@\n\nEXPOSE 8080\n\n#USER\n#USER user:group\n\n#VOLUME\nVOLUME [\"\/home\/project\", \"\/tmp\/data\"]\n\n#ADD\n\n#COPY\nCOPY $APP_NAME $WORK_PATH\/\n\n#LABEL\n#STOPSIGNAL\n#ARG\n#ONBUILD\n\n# WORKDIR\nWORKDIR $WORK_PATH\n\n# ENTRYPOINT\nENTRYPOINT [\"java\",\"-Djava.security.egd=file:\/dev\/.\/urandom\"]\n\n# CMD\nCMD [\"-jar\", \"@project.build.finalName@.@project.packaging@\"]<\/code><\/pre>\n<p>3\u3001settings.xml\u914d\u7f6e\u79c1\u6709\u5e93\u7684\u8bbf\u95ee<br \/>\n\u9996\u5148\u4f7f\u7528\u4f60\u7684\u79c1\u6709\u4ed3\u5e93\u8bbf\u95ee\u5bc6\u7801\u751f\u6210\u4e3b\u5bc6\u7801\uff1a<\/p>\n<pre class=\"hljs undefined\"><code>mvn --encrypt-master-password &lt;password&gt;<\/code><\/pre>\n<p>\u5176\u6b21\u5728settings.xml\u6587\u4ef6\u7684\u540c\u7ea7\u76ee\u5f55\u521b\u5efasettings-security.xml\u6587\u4ef6\uff0c\u5c06\u4e3b\u5bc6\u7801\u5199\u5165\uff1a<\/p>\n<pre class=\"hljs undefined\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;settingsSecurity&gt;\n  &lt;master&gt;{Ns0JM49fW9gHMTZ44n*****************=}&lt;\/master&gt;\n&lt;\/settingsSecurity&gt;<\/code><\/pre>\n<p>\u6700\u540e\u4f7f\u7528\u4f60\u7684\u79c1\u6709\u4ed3\u5e93\u8bbf\u95ee\u5bc6\u7801\u751f\u6210\u670d\u52a1\u5bc6\u7801\uff0c\u5c06\u751f\u6210\u7684\u5bc6\u7801\u5199\u5165\u5230settings.xml\u7684&lt;services&gt;\u4e2d\uff1a<\/p>\n<pre class=\"hljs undefined\"><code>mvn --encrypt-password &lt;password&gt;<\/code><\/pre>\n<pre class=\"hljs undefined\"><code> &lt;server&gt;\n      &lt;id&gt;docker-aliyun&lt;\/id&gt;\n      &lt;username&gt;***pro@gmail.com&lt;\/username&gt;\n      &lt;password&gt;{D9YIyWYvtYsHayLjIenj***********=}&lt;\/password&gt;\n      &lt;configuration&gt;\n        &lt;email&gt;***pro@gmail.com&lt;\/email&gt;\n      &lt;\/configuration&gt;\n    &lt;\/server&gt;<\/code><\/pre>\n<div class=\"image-package\"><img decoding=\"async\" src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-f2ef6a918fc7bd54.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" data-original-src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-f2ef6a918fc7bd54.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\" \/><\/p>\n<div class=\"image-caption\">.m2\u6587\u4ef6\u5939<\/div>\n<\/div>\n<blockquote><p>\u66f4\u591asettings.xml\u914d\u7f6e\u53c2\u8003\uff1a<a href=\"http:\/\/maven.apache.org\/ref\/3.3.9\/maven-settings\/settings.html\" target=\"_blank\" rel=\"noopener\">http:\/\/maven.apache.org\/ref\/3.3.9\/maven-settings\/settings.html<\/a><\/p><\/blockquote>\n<p>4\u3001\u6267\u884cmaven install<br \/>\n\u5982\u679c&lt;pushImage&gt;false&lt;\/pushImage&gt;\u5219install\u9636\u6bb5\u5c06\u4e0d\u63d0\u4ea4Docker\u955c\u50cf\uff0c\u53ea\u6709maven\u7684deploy\u9636\u6bb5\u624d\u63d0\u4ea4\u3002<br \/>\n<code>mvn clean install -Dmaven.test.skip=true -s ~\/.m2\/settings.xml<\/code><\/p>\n<pre class=\"hljs undefined\"><code>[INFO] Scanning for projects...\n[INFO]\n[INFO] ------------------------------------------------------------------------\n[INFO] Building dockerdemo 0.0.1\n[INFO] ------------------------------------------------------------------------\n[INFO]\n[INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ dockerdemo ---\n[INFO] Deleting \/home\/tony\/git\/dockerdemo\/target\n[INFO]\n[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ dockerdemo ---\n[INFO] Using 'UTF-8' encoding to copy filtered resources.\n[INFO] Copying 1 resource to ..\/docker\n[INFO]\n[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ dockerdemo ---\n[INFO] Changes detected - recompiling the module!\n[INFO] Compiling 1 source file to \/home\/tony\/git\/dockerdemo\/target\/classes\n[INFO]\n[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ dockerdemo ---\n[INFO] Not copying test resources\n[INFO]\n[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ dockerdemo ---\n[INFO] Not compiling test sources\n[INFO]\n[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ dockerdemo ---\n[INFO] Tests are skipped.\n[INFO]\n[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ dockerdemo ---\n[INFO] Building jar: \/home\/tony\/git\/dockerdemo\/target\/dockerdemo-0.0.1.jar\n[INFO]\n[INFO] --- spring-boot-maven-plugin:1.4.3.RELEASE:repackage (default) @ dockerdemo ---\n[INFO]\n[INFO] --- docker-maven-plugin:0.4.13:build (default) @ dockerdemo ---\n[INFO] Copying \/home\/tony\/git\/dockerdemo\/target\/dockerdemo-0.0.1.jar -&gt; \/home\/tony\/git\/dockerdemo\/target\/docker\/dockerdemo-0.0.1.jar\n[INFO] Copying target\/docker\/dockerdemo-0.0.1.jar -&gt; \/home\/tony\/git\/dockerdemo\/target\/docker\/dockerdemo-0.0.1.jar\n[INFO] Copying target\/docker\/Dockerfile -&gt; \/home\/tony\/git\/dockerdemo\/target\/docker\/Dockerfile\n[INFO] Building image registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1\nStep 1 : FROM java:8\n ---&gt; a001fc27db5a\nStep 2 : MAINTAINER Ryuu KK \"ryuu_kk@163.com\"\n ---&gt; Using cache\n ---&gt; 9142f19f66e4\nStep 3 : ENV WORK_PATH \/home\/project\/dockerdemo\n ---&gt; Using cache\n ---&gt; f804b2685414\nStep 4 : ENV APP_NAME dockerdemo-0.0.1.jar\n ---&gt; Using cache\n ---&gt; 449b34e1b059\nStep 5 : ENV APP_VERSION 0.0.1\n ---&gt; Using cache\n ---&gt; 434e7a21767b\nStep 6 : EXPOSE 8080\n ---&gt; Using cache\n ---&gt; b4f12840a5fd\nStep 7 : VOLUME \/home\/project \/tmp\/data\n ---&gt; Using cache\n ---&gt; 6dc6a16375f8\nStep 8 : ADD $APP_NAME $WORK_PATH\/\n ---&gt; fb9ca6c55101\nRemoving intermediate container 0e7d77507c01\nStep 9 : COPY . $WORK_PATH\/\n ---&gt; 1f3848c151a5\nRemoving intermediate container 3ffe74084b83\nStep 10 : WORKDIR $WORK_PATH\n ---&gt; Running in 98819e023aec\n ---&gt; 14d8dda96d7c\nRemoving intermediate container 98819e023aec\nSuccessfully built 14d8dda96d7c\n[INFO] Built registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1\n[INFO] Tagging registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1 with latest\n[INFO] Pushing registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1\nThe push refers to a repository [registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo]\nd8c8f704105a: Pushed\ncfb84949120c: Pushed\n2071795f387c: Layer already exists\n046002f6f2ea: Layer already exists\n9425eace6ed9: Layer already exists\n9c39e87731b7: Layer already exists\nf7ed56f3fce3: Layer already exists\n53c779688d06: Layer already exists\n60a0858edcd5: Layer already exists\nb6ca02dfe5e6: Layer already exists\n0.0.1: digest: sha256:e743bfd839a6457a4db7fd22edcb3758ffc39e4e7816c8d00bc24ccf0ede13a5 size: 2424\nnull: null\n[INFO]\n[INFO] --- docker-maven-plugin:0.4.13:tag (tag-image) @ dockerdemo ---\n[INFO] Creating tag registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1 from registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1\n[INFO] Pushing registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1\nThe push refers to a repository [registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo]\nd8c8f704105a: Layer already exists\ncfb84949120c: Layer already exists\n2071795f387c: Layer already exists\n046002f6f2ea: Layer already exists\n9425eace6ed9: Layer already exists\n9c39e87731b7: Layer already exists\nf7ed56f3fce3: Layer already exists\n53c779688d06: Layer already exists\n60a0858edcd5: Layer already exists\nb6ca02dfe5e6: Layer already exists\n0.0.1: digest: sha256:e23d5c731170fd2980b688c34b5a844fac66d9547ba48a41417bd1684425958f size: 2424\nnull: null\n[INFO]\n[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ dockerdemo ---\n[INFO] Installing \/home\/tony\/git\/dockerdemo\/target\/dockerdemo-0.0.1.jar to \/home\/tony\/.m2\/repository\/com\/example\/dockerdemo\/0.0.1\/dockerdemo-0.0.1.jar\n[INFO] Installing \/home\/tony\/git\/dockerdemo\/pom.xml to \/home\/tony\/.m2\/repository\/com\/example\/dockerdemo\/0.0.1\/dockerdemo-0.0.1.pom\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 54.660 s\n[INFO] Finished at: 2017-01-08T15:48:33+08:00\n[INFO] Final Memory: 43M\/303M\n[INFO] ------------------------------------------------------------------------<\/code><\/pre>\n<p>\u67e5\u770b\u963f\u91cc\u4e91Docker\u955c\u50cf\u4ed3\u5e93\uff0cSHA256\u6458\u8981\u4e0e\u65e5\u5fd7\u7684\u6458\u8981\u4e00\u81f4<\/p>\n<div class=\"image-package\"><img decoding=\"async\" src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-bfae344b6d5c6527.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" data-original-src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-bfae344b6d5c6527.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\" \/><\/p>\n<div class=\"image-caption\">Paste_Image.png<\/div>\n<\/div>\n<p>5\u3001\u8fd0\u884c\u79c1\u6709\u4ed3\u5e93\u7684dockerdemo\u955c\u50cf<br \/>\n\u4f7f\u7528SecureCRT \u767b\u5f55\u5ba2\u6237\u7aef<\/p>\n<pre class=\"hljs undefined\"><code>sudo docker login --username=***pro@gmail.com registry.cn-hangzhou.aliyuncs.com<\/code><\/pre>\n<div class=\"image-package\"><img decoding=\"async\" src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-6b635653712af65f.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" data-original-src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-6b635653712af65f.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\" \/><\/p>\n<div class=\"image-caption\">\u767b\u5f55Docker\u79c1\u6709\u4ed3\u5e93<\/div>\n<\/div>\n<p>\u4e0b\u8f7d\u4ed3\u5e93\u955c\u50cf<\/p>\n<pre class=\"hljs undefined\"><code>sudo docker pull registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:[\u955c\u50cf\u7248\u672c\u53f7]<\/code><\/pre>\n<div class=\"image-package\"><img decoding=\"async\" src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-5a1c948193c6f92e.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" data-original-src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-5a1c948193c6f92e.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\" \/><\/p>\n<div class=\"image-caption\">\u4e0b\u8f7dDocker\u955c\u50cf\uff0c\u7531\u4e8e\u540e\u671f\u624d\u622a\u56fe\uff0c\u56fe\u7247\u7684\u6458\u8981\u4e0e\u4e0a\u6587\u7684\u6458\u8981\u4e0d\u540c<\/div>\n<\/div>\n<p>\u8fd0\u884c\u955c\u50cf\uff0c\u5c06Docker\u5bb9\u5668\u76848080\u7aef\u53e3\u6620\u5c04\u672c\u673a80\u7aef\u53e3<\/p>\n<pre class=\"hljs undefined\"><code>docker run -i -t -p 80:8080 registry.cn-hangzhou.aliyuncs.com\/viiso\/dockerdemo:0.0.1<\/code><\/pre>\n<div class=\"image-package\"><img decoding=\"async\" src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-7e708fa0ad39323f.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" data-original-src=\"http:\/\/upload-images.jianshu.io\/upload_images\/4237997-7e708fa0ad39323f.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\" \/><\/p>\n<div class=\"image-caption\">\u542f\u52a8\u955c\u50cf\uff0cSpring Boot\u542f\u52a8Tomcat\uff0c\u4f7f\u75288080\u7aef\u53e3<\/div>\n<\/div>\n<p>6\u3001\u6d4b\u8bd5<br \/>\n\u4f7f\u7528\u670d\u52a1\u5668ip\u8fdb\u884c\u6d4b\u8bd5<\/p>\n<pre class=\"hljs undefined\"><code>curl http:\/\/ip\/health\n{\"status\":\"UP\",\"diskSpace\":{\"status\":\"UP\",\"total\":42139451392,\"free\":38050045952,\"threshold\":10485760}}<\/code><\/pre>\n<blockquote><p>dockerdemo\u9879\u76ee\u4ee3\u7801\uff1a<a href=\"https:\/\/code.aliyun.com\/ryuu.pro\/dockerdemo.git\" target=\"_blank\" rel=\"noopener\">https:\/\/code.aliyun.com\/ryuu.pro\/dockerdemo.git<\/a><\/p><\/blockquote>\n<p>&#8212;&#8212;&#8212;&#8212;- 2017\/03\/21 \u66f4\u65b0&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\u5728\u591aModule\u9879\u76ee\u4e2d\u4f7f\u7528\u8be5\u63d2\u4ef6\u53d1\u73b0\u7684\u51e0\u4e2a\u95ee\u9898<\/p>\n<ul>\n<li><code>&lt;dockerDirectory&gt;target\/docker&lt;\/dockerDirectory&gt;<\/code>\u76f8\u5bf9\u8def\u5f84\u5728\u591a\u6a21\u5757\u4e2d\u51fa\u73b0\u201cbasedir target does not exist \u201d\u95ee\u9898\uff0c\u4f7f\u7528<code>&lt;dockerDirectory&gt;${project.build.directory}&lt;\/dockerDirectory&gt;<\/code>\u6307\u5b9a\u7f16\u8bd1\u8def\u5f84<\/li>\n<li>\u4fee\u6539Dockerfile\u6587\u4ef6\u7684\u751f\u6210\u8def\u5f84\u9ed8\u8ba4\u5230target\u8def\u5f84\uff0c\u7531\u4e8eDockerfile\u91cc\u4f7f\u7528<code>COPY<\/code>\u65e0\u6cd5\u6539\u53d8\u6587\u4ef6\u8def\u5f84\uff0c\u5982<code>COPY ..\/xxxx.jar \/xxx<\/code>\u65f6\u5c06\u51fa\u73b0&#8221;Permission denied&#8221;\u7684\u95ee\u9898\n<pre class=\"hljs undefined\"><code>&lt;resource&gt;\n      &lt;directory&gt;src\/main\/docker&lt;\/directory&gt;\n      &lt;filtering&gt;true&lt;\/filtering&gt;\n      &lt;includes&gt;\n          &lt;include&gt;**\/Dockerfile&lt;\/include&gt;\n      &lt;\/includes&gt;\n      &lt;targetPath&gt;${project.build.directory}&lt;\/targetPath&gt;\n&lt;\/resource&gt;<\/code><\/pre>\n<\/li>\n<li>\u539f\u6587 \u4f7f\u7528<code>&lt;imageTag&gt;${git.commit.id.abbrev}&lt;\/imageTag&gt;<\/code>\u7f3a\u5c11\u63d2\u4ef6\n<pre class=\"hljs undefined\"><code>&lt;plugin&gt;\n      &lt;groupId&gt;pl.project13.maven&lt;\/groupId&gt;\n      &lt;artifactId&gt;git-commit-id-plugin&lt;\/artifactId&gt;\n      &lt;configuration&gt;\n          &lt;failOnNoGitDirectory&gt;false&lt;\/failOnNoGitDirectory&gt;\n      &lt;\/configuration&gt;\n&lt;\/plugin&gt;<\/code><\/pre>\n<p>\u5982\u679c\u4e0d\u9700\u8981git\u5c5e\u6027\u63d2\u4ef6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528<code>&lt;imageTag&gt;${project.version}&lt;\/imageTag&gt;<\/code><\/li>\n<\/ul>\n<\/div>\n<p>\u4f5c\u8005\uff1a\u75af\u72c2\u7684\u6a59<br \/>\n\u94fe\u63a5\uff1ahttp:\/\/www.jianshu.com\/p\/c435ea4c0cc0<br \/>\n\u4f86\u6e90\uff1a\u7b80\u4e66<br \/>\n\u8457\u4f5c\u6743\u5f52\u4f5c\u8005\u6240\u6709\u3002\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u8054\u7cfb\u4f5c\u8005\u83b7\u5f97\u6388\u6743\uff0c\u975e\u5546\u4e1a\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u4f7f\u7528Maven\u63d2\u4ef6\u5b9e\u73b0\u9879\u76ee\u6253\u5305\u53caDocker\u6784\u5efa\u5e76\u63d0\u4ea4\u5230\u79c1\u6709\u4ed3\u5e93 \u4ee5\u4e0b\u5185\u5bb9\u975e\u6559\u7a0b\uff0c\u4e0d\u9002\u5408\u5bf9Docker\u53caMaven\u4e0d\u719f\u6089\u8005\u4f7f\u7528 \u76ee\u6807\uff1aSpring Boot\u9879\u76ee\u6253\u5305\u6210\u53ef\u6267\u884c\u7684jar\u6587\u4ef6\u540e\uff0c\u4f7f\u7528docker-maven-plugin\uff08spotify\uff09\u63d2\u4ef6\u81ea\u52a8\u6784\u5efaDocker\u540e\u4e0a\u4f20\u5230\u963f\u91cc\u4e91Docker\u955c\u50cf\u4ed3\u5e93\uff08\u5176\u4ed6\u4ed3\u5e93\u540c\u7406\uff09 \u5f15\u7528\u53c2\u8003\uff1a docker-maven-plugin\u63d2\u4ef6\uff1ahttps:\/\/github.com\/spotify\/docker-maven-plugin Maven\u63d0\u4ea4\u670d\u52a1\u5bc6\u7801\u52a0\u5bc6\uff1ahttps:\/\/maven.apache.org\/guides\/mini\/guide-encryption.html Maven\u7684settings.xml\uff1ahttp:\/\/maven.apache.org\/ref\/3.3.9\/maven-settings\/settings.html \u51c6\u5907\u5de5\u4f5c\uff1a \u672c\u673a\u5b89\u88c5 Docker 1.9 Eclipse\u73af\u5883\uff08\u672c\u673a\u4f7f\u7528STS\uff09 Maven\u73af\u5883 \u963f\u91cc\u4e91Docker\u4ed3\u5e93\uff08\u5176\u4ed6Docker\u4ed3\u5e93\u90fd\u53ef\u4ee5\uff09 \u5982\u679c\u9700\u8981Maven\u9879\u76ee\u90e8\u7f72\uff0c\u9700\u8981Maven\u79c1\u670d\uff08\uff09 SecureCRT \uff08\u5176\u4ed6\u7ec8\u7aef\u7686\u53ef\uff0c\u4ec5\u7528\u4e8e\u542f\u52a8Docker\u6d4b\u8bd5\uff09 1\u3001 \u6784\u5efaSpring [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-412","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/412","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=412"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/412\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}