{"id":40288,"date":"2022-12-30T03:58:14","date_gmt":"2024-03-01T03:12:27","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/"},"modified":"2024-04-29T07:37:36","modified_gmt":"2024-04-28T23:37:36","slug":"%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/","title":{"rendered":"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u662fZOZO Advent Calendar 2021 #5\u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002<\/p>\n<h1>\u9996\u5148<\/h1>\n<p>\u6211\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u5728Spring Boot\u4e2d\uff0c\u4eceSpring Boot 2.3\u5f00\u59cb\u652f\u6301Cloud Native Buildpacks\u3002\u56e0\u6b64\uff0c\u6211\u5c1d\u8bd5\u4e86\u4f7f\u7528Dockerfile\u548cCloud Native Buildpacks\u8fd9\u4e24\u79cd\u65b9\u5f0f\u6765\u5bb9\u5668\u5316\u3002<\/p>\n<h1>\u5bb9\u5668\u7684\u610f\u601d\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u4f7f\u7528\u5bb9\u5668\u5c06\u5e94\u7528\u7a0b\u5e8f\u53ca\u5176\u6267\u884c\u73af\u5883\u4e00\u8d77\u865a\u62df\u5316\u7684\u6280\u672f\uff0c\u4f7f\u5e94\u7528\u7a0b\u5e8f\u80fd\u591f\u5728\u72ec\u7acb\u4e8e\u73af\u5883\u7684\u60c5\u51b5\u4e0b\u8fd0\u884c\u3002<\/p>\n<h1>Docker \u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u8fd9\u662f\u4e00\u4e2a\u4f7f\u7528\u5bb9\u5668\u865a\u62df\u5316\u6765\u5f00\u53d1\u3001\u90e8\u7f72\u548c\u8fd0\u884c\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u653e\u5e73\u53f0\u3002<\/p>\n<h1>&#8220;Cloud Native Buildpacks\u662f\u4ec0\u4e48&#8221;<\/h1>\n<p>Cloud Native Buildpacks\u662f\u4e00\u4e2a\u5de5\u5177\uff0c\u53ef\u4ee5\u5c06\u5e94\u7528\u7a0b\u5e8f\u7684\u6e90\u4ee3\u7801\u8f6c\u6362\u4e3a\u53ef\u4ee5\u5728\u4efb\u4f55\u4e91\u5e73\u53f0\u4e0a\u8fd0\u884c\u7684\u6620\u50cf\u3002<\/p>\n<h1>\u9996\u5148\u51c6\u5907\u5e94\u7528\u7a0b\u5e8f\u3002<\/h1>\n<p>\u4e3a\u4e86\u5b9e\u73b0\u5bb9\u5668\u5316\uff0c\u672c\u6b21\u5c06\u51c6\u5907\u4e00\u4e2a\u7b80\u5355\u7684Web\u5e94\u7528\u7a0b\u5e8f\uff0c\u53ea\u9700\u8981\u663e\u793aHello World\u3002<\/p>\n<h4>pom.xml \u53ef\u4ee5\u88ab\u91cd\u5199\u4e3a\uff1a\u9aa8\u67b6\u6a94\u6848.xml\u3002<\/h4>\n<pre class=\"post-pre\"><code><span class=\"cp\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;<\/span>\r\n<span class=\"nt\">&lt;project<\/span> <span class=\"na\">xmlns=<\/span><span class=\"s\">\"http:\/\/maven.apache.org\/POM\/4.0.0\"<\/span>\r\n         <span class=\"na\">xmlns:xsi=<\/span><span class=\"s\">\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span>\r\n         <span class=\"na\">xsi:schemaLocation=<\/span><span class=\"s\">\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"<\/span><span class=\"nt\">&gt;<\/span>\r\n    <span class=\"nt\">&lt;modelVersion&gt;<\/span>4.0.0<span class=\"nt\">&lt;\/modelVersion&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;groupId&gt;<\/span>com.example<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n    <span class=\"nt\">&lt;artifactId&gt;<\/span>spring-docker-demo<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n    <span class=\"nt\">&lt;version&gt;<\/span>1.0-SNAPSHOT<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n    <span class=\"nt\">&lt;packaging&gt;<\/span>jar<span class=\"nt\">&lt;\/packaging&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;parent&gt;<\/span>\r\n        <span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n        <span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-parent<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n        <span class=\"nt\">&lt;version&gt;<\/span>2.4.1<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n        <span class=\"nt\">&lt;relativePath\/&gt;<\/span> <span class=\"c\">&lt;!-- lookup parent from repository --&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/parent&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;properties&gt;<\/span>\r\n        <span class=\"nt\">&lt;java.version&gt;<\/span>11<span class=\"nt\">&lt;\/java.version&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/properties&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;dependencies&gt;<\/span>\r\n        <span class=\"nt\">&lt;dependency&gt;<\/span>\r\n            <span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n            <span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-web<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n        <span class=\"nt\">&lt;dependency&gt;<\/span>\r\n            <span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n            <span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-starter-thymeleaf<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/dependencies&gt;<\/span>\r\n\r\n    <span class=\"nt\">&lt;build&gt;<\/span>\r\n        <span class=\"nt\">&lt;finalName&gt;<\/span>app<span class=\"nt\">&lt;\/finalName&gt;<\/span>\r\n        <span class=\"nt\">&lt;plugins&gt;<\/span>\r\n            <span class=\"nt\">&lt;plugin&gt;<\/span>\r\n                <span class=\"nt\">&lt;groupId&gt;<\/span>org.springframework.boot<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n                <span class=\"nt\">&lt;artifactId&gt;<\/span>spring-boot-maven-plugin<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n            <span class=\"nt\">&lt;\/plugin&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/plugins&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/build&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;\/project&gt;<\/span>\r\n\r\n<\/code><\/pre>\n<h4>\u4f60\u597d\u63a7\u5236\u5668.java<\/h4>\n<pre class=\"post-pre\"><code>\r\n<span class=\"kn\">package<\/span> <span class=\"nn\">com.example.web.controller<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.stereotype.Controller<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.ui.Model<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.GetMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestMapping<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestParam<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@Controller<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">HelloController<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"nd\">@GetMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">root<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"s\">\"hello\/index\"<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u9996\u9875.html .html)<\/h4>\n<pre class=\"post-pre\"><code>Hello World\r\n<\/code><\/pre>\n<h1>\u5b89\u88c5Docker Desktop\u3002<\/h1>\n<p>\u6211\u5011\u5728\u9019\u88e1\u53d6\u5f97\u4e86\u9019\u500b\uff1a<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"8jVMnncCm6\"><p><a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\">Docker Desktop<\/a><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Docker Desktop&#8221; &#8212; Docker\" src=\"https:\/\/www.docker.com\/products\/docker-desktop\/embed\/#?secret=itgQYdFPmE#?secret=8jVMnncCm6\" data-secret=\"8jVMnncCm6\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<h1>\u4f7f\u7528Dockerfile\u8fdb\u884c\u5bb9\u5668\u5316<\/h1>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u5c06\u4f7f\u7528Dockerfile\u8fdb\u884c\u5bb9\u5668\u5316\u3002<\/p>\n<h4>Dockerfile &#8211; Docker \u6587\u4ef6<\/h4>\n<pre class=\"post-pre\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> maven:3.6.3-jdk-11 AS builder<\/span>\r\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/tmp<\/span>\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> .\/src .\/src<\/span>\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> .\/pom.xml .<\/span>\r\n<span class=\"k\">RUN <\/span>mvn package\r\n<span class=\"k\">FROM<\/span><span class=\"s\"> adoptopenjdk\/openjdk11:debianslim-jre<\/span>\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/tmp\/target\/app.jar \/app\/app.jar<\/span>\r\n<span class=\"k\">EXPOSE<\/span><span class=\"s\"> 8080<\/span>\r\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"java\", \"-jar\", \"\/app\/app.jar\"]<\/span>\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u4f7f\u7528\u4e2d\u7684\u6307\u4ee4\u6982\u8ff0\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30b3\u30de\u30f3\u30c9\u540d\u5185\u5bb9FROM\u30b3\u30f3\u30c6\u30ca\u306e\u30d9\u30fc\u30b9\u30a4\u30e1\u30fc\u30b8\u6307\u5b9aWORKDIR\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u6307\u5b9aCOPY\u8ffd\u52a0\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u30a4\u30e1\u30fc\u30b8\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u4e0a\u306e\u30d1\u30b9\u306b\u8ffd\u52a0RUN\u30d3\u30eb\u30c9\u6642\u306b\u4efb\u610f\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308bEXPOSE\u30b3\u30f3\u30c6\u30ca\u30fc\u306e\u5b9f\u884c\u6642\u306b\u3001\u6240\u5b9a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4e0a\u306e\u3069\u306e\u30dd\u30fc\u30c8\u3092\u30ea\u30c3\u30b9\u30f3\u3059\u308b\u304b\u3092\u6307\u5b9aENTRYPOINT\u30b3\u30f3\u30c6\u30ca\u30fc\u3092\u5b9f\u884c\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u3088\u3046\u306b\u3057\u3066\u5b9f\u884c\u3059\u308b\u8a2d\u5b9a\u3092\u884c\u3046<\/div>\n<\/div>\n<p>\u5982\u679c\u60a8\u60f3\u4e86\u89e3\u4e0a\u8ff0\u6307\u4ee4\u7684\u8be6\u7ec6\u4fe1\u606f\u6216\u5176\u4ed6\u6307\u4ee4\uff0c\u8bf7\u67e5\u9605Dockerfile\u53c2\u8003\u8d44\u6599\u3002<\/p>\n<h4>\u6784\u5efa\u5bb9\u5668\u955c\u50cf<\/h4>\n<p>\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u6784\u5efa\u5bb9\u5668\u955c\u50cf\u3002<\/p>\n<pre class=\"post-pre\"><code>docker image build -t [Docker Hub\u306e\u30e6\u30fc\u30b6\u30fc\u540d\uff08\u4efb\u610f\uff09]\/[\u30a4\u30e1\u30fc\u30b8\u540d\uff08\u5fc5\u9808\uff09]:[\u30bf\u30b0\uff08\u4efb\u610f\uff09] [Dockerfile\u30d1\u30b9]\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u8bd5\u4e00\u8bd5\u3002<\/p>\n<pre class=\"post-pre\"><code>docker image build -t spring-docker-demo:0.0.1 .\/\r\n\r\n[+] Building 3.0s (13\/13) FINISHED\r\n =&gt; [internal] load build definition from Dockerfile                                                                                                                                                                               0.1s\r\n =&gt; =&gt; transferring dockerfile: 32B                                                                                                                                                                                                0.0s\r\n =&gt; [internal] load .dockerignore                                                                                                                                                                                                  0.1s\r\n =&gt; =&gt; transferring context: 2B                                                                                                                                                                                                    0.0s\r\n =&gt; [internal] load metadata for docker.io\/adoptopenjdk\/openjdk11:debianslim-jre                                                                                                                                                   2.6s\r\n =&gt; [internal] load metadata for docker.io\/library\/maven:3.6.3-jdk-11                                                                                                                                                              2.7s\r\n =&gt; [stage-1 1\/2] FROM docker.io\/adoptopenjdk\/openjdk11:debianslim-jre@sha256:a24a26c8d0f780b25efe8d61593e51ac35a502565d5e4b12bcce43807fb43fb2                                                                                     0.0s\r\n =&gt; [internal] load build context                                                                                                                                                                                                  0.0s\r\n =&gt; =&gt; transferring context: 711B                                                                                                                                                                                                  0.0s\r\n =&gt; [builder 1\/5] FROM docker.io\/library\/maven:3.6.3-jdk-11@sha256:1d29ccf46ef2a5e64f7de3d79a63f9bcffb4dc56be0ae3daed5ca5542b38aa2d                                                                                                0.0s\r\n =&gt; CACHED [builder 2\/5] WORKDIR \/tmp                                                                                                                                                                                              0.0s\r\n =&gt; CACHED [builder 3\/5] COPY .\/src .\/src                                                                                                                                                                                          0.0s\r\n =&gt; CACHED [builder 4\/5] COPY .\/pom.xml .                                                                                                                                                                                          0.0s\r\n =&gt; CACHED [builder 5\/5] RUN mvn package                                                                                                                                                                                           0.0s\r\n =&gt; CACHED [stage-1 2\/2] COPY --from=builder \/tmp\/target\/app.jar \/app\/app.jar                                                                                                                                                      0.0s\r\n =&gt; exporting to image                                                                                                                                                                                                             0.0s\r\n =&gt; =&gt; exporting layers                                                                                                                                                                                                            0.0s\r\n =&gt; =&gt; writing image sha256:1f356d2363a438bf1a2a5ebf980acae48dbdbc22d0c47007331ce3c32d0c404d                                                                                                                                       0.0s\r\n =&gt; =&gt; naming to docker.io\/library\/spring-docker-demo:0.0.1\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u5bb9\u5668\u955c\u50cf\u5df2\u7ecf\u521b\u5efa\u5b8c\u6bd5\uff0c\u63a5\u4e0b\u6765\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>docker image ls\r\n\r\nREPOSITORY           TAG       IMAGE ID       CREATED          SIZE\r\nspring-docker-demo   0.0.1     1f356d2363a4   48 minutes ago   251MB\r\n\r\n<\/code><\/pre>\n<p>\u6211\u5df2\u786e\u8ba4\u3002<\/p>\n<h4>\u5f00\u542f<\/h4>\n<p>\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>docker run -it -p [\u30db\u30b9\u30c8\u5074\u306e\u30dd\u30fc\u30c8\u756a\u53f7]:[\u30b3\u30f3\u30c6\u30ca\u306e\u30dd\u30fc\u30c8\u756a\u53f7] [\u30a4\u30e1\u30fc\u30b8\u540d]:[\u30bf\u30b0]\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>docker run -it -p 8080:8080 spring-docker-demo:0.0.1\r\n\r\n  .   ____          _            __ _ _\r\n \/\\\\ \/ ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\r\n( ( )\\___ | '_ | '_| | '_ \\\/ _` | \\ \\ \\ \\\r\n \\\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\r\n  '  |____| .__|_| |_|_| |_\\__, | \/ \/ \/ \/\r\n =========|_|==============|___\/=\/_\/_\/_\/\r\n :: Spring Boot ::                (v2.4.1)\r\n\r\n2021-12-23 00:39:47.873  INFO 1 --- [           main] com.example.Application                  : Starting Application v1.0-SNAPSHOT using Java 11.0.13 on a437d718d310 with PID 1 (\/app\/app.jar started by root in \/)\r\n2021-12-23 00:39:47.880  INFO 1 --- [           main] com.example.Application                  : No active profile set, falling back to default profiles: default\r\n2021-12-23 00:39:49.961  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)\r\n2021-12-23 00:39:49.985  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]\r\n2021-12-23 00:39:49.985  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat\/9.0.41]\r\n2021-12-23 00:39:50.088  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[\/]       : Initializing Spring embedded WebApplicationContext\r\n2021-12-23 00:39:50.088  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2029 ms\r\n2021-12-23 00:39:50.444  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'\r\n2021-12-23 00:39:50.867  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''\r\n2021-12-23 00:39:50.900  INFO 1 --- [           main] com.example.Application                  : Started Application in 3.963 seconds (JVM running for 4.609)\r\n\r\n<\/code><\/pre>\n<p>\u6709\u5173run\u547d\u4ee4\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u67e5\u9605\u6b64\u5904\u7684\u53c2\u8003\u8d44\u6599\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d400937434c4406c90a30\/40-0.png\" alt=\"image.png\" \/><\/div>\n<h1>\u4f7f\u7528 Cloud Native Buildpacks \u8fdb\u884c\u5bb9\u5668\u5316\u3002<\/h1>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u4f7f\u7528Cloud Native Buildpacks\u8fdb\u884c\u5bb9\u5668\u5316\u5904\u7406\u3002<\/p>\n<p>\u7531\u4e8eSpring Boot Maven\u63d2\u4ef6\u4e0eCloud Native Buildpacks\u5177\u6709\u96c6\u6210\u529f\u80fd\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u521b\u5efa\u5bb9\u5668\u955c\u50cf\u3002<\/p>\n<pre class=\"post-pre\"><code>mvn spring-boot:build-image -Dspring-boot.build-image.imageName=[\u30a4\u30e1\u30fc\u30b8\u540d]:[\u30bf\u30b0]\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>mvn spring-boot:build-image -Dspring-boot.build-image.imageName=spring-docker-cnb-demo:0.0.1\r\n\r\n\r\n[INFO] Scanning for projects...\r\n[INFO] \r\n[INFO] -------------------&lt; com.example:spring-docker-demo &gt;-------------------\r\n[INFO] Building spring-docker-demo 1.0-SNAPSHOT\r\n[INFO] --------------------------------[ jar ]---------------------------------\r\n[INFO] \r\n[INFO] &gt;&gt;&gt; spring-boot-maven-plugin:2.4.1:build-image (default-cli) &gt; package @ spring-docker-demo &gt;&gt;&gt;\r\n[INFO] \r\n[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ spring-docker-demo ---\r\n[INFO] Using 'UTF-8' encoding to copy filtered resources.\r\n[INFO] Using 'UTF-8' encoding to copy filtered properties files.\r\n[INFO] Copying 1 resource\r\n[INFO] Copying 1 resource\r\n[INFO] The encoding used to copy filtered properties files have not been set. This means that the same encoding will be used to copy filtered properties files as when copying other filtered resources. This might not be what you want! Run your build with --debug to see which files might be affected. Read more at https:\/\/maven.apache.org\/plugins\/maven-resources-plugin\/examples\/filtering-properties-files.html\r\n[INFO] \r\n[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ spring-docker-demo ---\r\n[INFO] Changes detected - recompiling the module!\r\n[INFO] Compiling 2 source files to C:\\sources\\spring-docker-demo\\target\\classes\r\n[INFO] \r\n[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ spring-docker-demo ---\r\n[INFO] Using 'UTF-8' encoding to copy filtered resources.\r\n[INFO] Using 'UTF-8' encoding to copy filtered properties files.\r\n[INFO] skip non existing resourceDirectory C:\\sources\\spring-docker-demo\\src\\test\\resources\r\n[INFO] \r\n[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ spring-docker-demo ---\r\n[INFO] No sources to compile\r\n[INFO] \r\n[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ spring-docker-demo ---\r\n[INFO] No tests to run.\r\n[INFO] \r\n[INFO] --- maven-jar-plugin:3.2.0:jar (default-jar) @ spring-docker-demo ---\r\n[INFO] Building jar: C:\\sources\\spring-docker-demo\\target\\app.jar\r\n[INFO] \r\n[INFO] --- spring-boot-maven-plugin:2.4.1:repackage (repackage) @ spring-docker-demo ---\r\n[INFO] Replacing main artifact with repackaged archive\r\n[INFO] \r\n[INFO] &lt;&lt;&lt; spring-boot-maven-plugin:2.4.1:build-image (default-cli) &lt; package @ spring-docker-demo &lt;&lt;&lt;\r\n[INFO] \r\n[INFO] \r\n[INFO] --- spring-boot-maven-plugin:2.4.1:build-image (default-cli) @ spring-docker-demo ---\r\n[INFO] Building image 'docker.io\/library\/spring-docker-cnb-demo:0.0.1'\r\n[INFO] \r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 0%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 1%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 2%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 2%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 3%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 4%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 6%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 6%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 8%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 9%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 11%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 12%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 14%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 15%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 17%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 20%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 22%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 24%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 26%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 27%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 29%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 31%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 36%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 40%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 45%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 49%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 55%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 61%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 65%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 70%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 75%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 79%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 83%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 88%\r\n[INFO]  &gt; Pulling builder image 'docker.io\/paketobuildpacks\/builder:base' 100%\r\n[INFO]  &gt; Pulled builder image 'paketobuildpacks\/builder@sha256:c212f4cde8f22e1517c4e919d64843c0d2287ad836b75449ae958f696183b458'\r\n[INFO]  &gt; Pulling run image 'docker.io\/paketobuildpacks\/run:base-cnb' 1%\r\n[INFO]  &gt; Pulling run image 'docker.io\/paketobuildpacks\/run:base-cnb' 47%\r\n[INFO]  &gt; Pulling run image 'docker.io\/paketobuildpacks\/run:base-cnb' 100%\r\n[INFO]  &gt; Pulled run image 'paketobuildpacks\/run@sha256:50c74ebc95c169ea54ee4650d39d3c71d0fc738a3f0ad89b23d646cfd9ea36f2'\r\n[INFO]  &gt; Executing lifecycle version v0.13.2\r\n[INFO]  &gt; Using build cache volume 'pack-cache-c4b51991c14c.build'\r\n[INFO] \r\n[INFO]  &gt; Running creator\r\n[INFO]     [creator]     ===&gt; DETECTING\r\n[INFO]     [creator]     6 of 19 buildpacks participating\r\n[INFO]     [creator]     paketo-buildpacks\/ca-certificates   3.0.1\r\n[INFO]     [creator]     paketo-buildpacks\/bellsoft-liberica 9.0.1\r\n[INFO]     [creator]     paketo-buildpacks\/syft              1.3.0\r\n[INFO]     [creator]     paketo-buildpacks\/executable-jar    6.0.1\r\n[INFO]     [creator]     paketo-buildpacks\/dist-zip          5.0.1\r\n[INFO]     [creator]     paketo-buildpacks\/spring-boot       5.2.0\r\n[INFO]     [creator]     ===&gt; ANALYZING\r\n[INFO]     [creator]     Previous image with name \"docker.io\/library\/spring-docker-cnb-demo:0.0.1\" not found\r\n[INFO]     [creator]     ===&gt; RESTORING\r\n[INFO]     [creator]     ===&gt; BUILDING\r\n[INFO]     [creator]     \r\n[INFO]     [creator]     Paketo CA Certificates Buildpack 3.0.1\r\n[INFO]     [creator]       https:\/\/github.com\/paketo-buildpacks\/ca-certificates\r\n[INFO]     [creator]       Launch Helper: Contributing to layer\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_ca-certificates\/helper\/exec.d\/ca-certificates-helper\r\n[INFO]     [creator]     \r\n[INFO]     [creator]     Paketo BellSoft Liberica Buildpack 9.0.1\r\n[INFO]     [creator]       https:\/\/github.com\/paketo-buildpacks\/bellsoft-liberica\r\n[INFO]     [creator]       Build Configuration:\r\n[INFO]     [creator]         $BP_JVM_TYPE                 JRE             the JVM type - JDK or JRE\r\n[INFO]     [creator]         $BP_JVM_VERSION              11.*            the Java version\r\n[INFO]     [creator]       Launch Configuration:\r\n[INFO]     [creator]         $BPL_DEBUG_ENABLED           false           enables Java remote debugging support\r\n[INFO]     [creator]         $BPL_DEBUG_PORT              8000            configure the remote debugging port\r\n[INFO]     [creator]         $BPL_DEBUG_SUSPEND           false           configure whether to suspend execution until a debugger has attached\r\n[INFO]     [creator]         $BPL_HEAP_DUMP_PATH                          write heap dumps on error to this path\r\n[INFO]     [creator]         $BPL_JAVA_NMT_ENABLED        true            enables Java Native Memory Tracking (NMT)\r\n[INFO]     [creator]         $BPL_JAVA_NMT_LEVEL          summary         configure level of NMT, summary or detail\r\n[INFO]     [creator]         $BPL_JFR_ARGS                                configure custom Java Flight Recording (JFR) arguments\r\n[INFO]     [creator]         $BPL_JFR_ENABLED             false           enables Java Flight Recording (JFR)\r\n[INFO]     [creator]         $BPL_JMX_ENABLED             false           enables Java Management Extensions (JMX)\r\n[INFO]     [creator]         $BPL_JMX_PORT                5000            configure the JMX port\r\n[INFO]     [creator]         $BPL_JVM_HEAD_ROOM           0               the headroom in memory calculation\r\n[INFO]     [creator]         $BPL_JVM_LOADED_CLASS_COUNT  35% of classes  the number of loaded classes in memory calculation\r\n[INFO]     [creator]         $BPL_JVM_THREAD_COUNT        250             the number of threads in memory calculation\r\n[INFO]     [creator]         $JAVA_TOOL_OPTIONS                           the JVM launch flags\r\n[INFO]     [creator]       BellSoft Liberica JRE 11.0.13: Contributing to layer\r\n[INFO]     [creator]         Downloading from https:\/\/github.com\/bell-sw\/Liberica\/releases\/download\/11.0.13+8\/bellsoft-jre11.0.13+8-linux-amd64.tar.gz\r\n[INFO]     [creator]         Verifying checksum\r\n[INFO]     [creator]         Expanding to \/layers\/paketo-buildpacks_bellsoft-liberica\/jre\r\n[INFO]     [creator]         Adding 128 container CA certificates to JVM truststore\r\n[INFO]     [creator]         Writing env.launch\/BPI_APPLICATION_PATH.default\r\n[INFO]     [creator]         Writing env.launch\/BPI_JVM_CACERTS.default\r\n[INFO]     [creator]         Writing env.launch\/BPI_JVM_CLASS_COUNT.default\r\n[INFO]     [creator]         Writing env.launch\/BPI_JVM_SECURITY_PROVIDERS.default\r\n[INFO]     [creator]         Writing env.launch\/JAVA_HOME.default\r\n[INFO]     [creator]         Writing env.launch\/JAVA_TOOL_OPTIONS.append\r\n[INFO]     [creator]         Writing env.launch\/JAVA_TOOL_OPTIONS.delim\r\n[INFO]     [creator]         Writing env.launch\/MALLOC_ARENA_MAX.default\r\n[INFO]     [creator]       Launch Helper: Contributing to layer\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/active-processor-count\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/java-opts\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/jvm-heap\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/link-local-dns\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/memory-calculator\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/openssl-certificate-loader\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/security-providers-configurer\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/jmx\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/jfr\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/nmt\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/security-providers-classpath-9\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_bellsoft-liberica\/helper\/exec.d\/debug-9\r\n[INFO]     [creator]       Java Security Properties: Contributing to layer\r\n[INFO]     [creator]         Writing env.launch\/JAVA_SECURITY_PROPERTIES.default\r\n[INFO]     [creator]         Writing env.launch\/JAVA_TOOL_OPTIONS.append\r\n[INFO]     [creator]         Writing env.launch\/JAVA_TOOL_OPTIONS.delim\r\n[INFO]     [creator]     \r\n[INFO]     [creator]     Paketo Syft Buildpack 1.3.0\r\n[INFO]     [creator]       https:\/\/github.com\/paketo-buildpacks\/syft\r\n[INFO]     [creator]         Downloading from https:\/\/github.com\/anchore\/syft\/releases\/download\/v0.33.0\/syft_0.33.0_linux_amd64.tar.gz\r\n[INFO]     [creator]         Verifying checksum\r\n[INFO]     [creator]         Writing env.build\/SYFT_CHECK_FOR_APP_UPDATE.default\r\n[INFO]     [creator]     \r\n[INFO]     [creator]     Paketo Executable JAR Buildpack 6.0.1\r\n[INFO]     [creator]       https:\/\/github.com\/paketo-buildpacks\/executable-jar\r\n[INFO]     [creator]       Class Path: Contributing to layer\r\n[INFO]     [creator]         Writing env\/CLASSPATH.delim\r\n[INFO]     [creator]         Writing env\/CLASSPATH.prepend\r\n[INFO]     [creator]       Process types:\r\n[INFO]     [creator]         executable-jar: java org.springframework.boot.loader.JarLauncher (direct)\r\n[INFO]     [creator]         task:           java org.springframework.boot.loader.JarLauncher (direct)\r\n[INFO]     [creator]         web:            java org.springframework.boot.loader.JarLauncher (direct)\r\n[INFO]     [creator]     \r\n[INFO]     [creator]     Paketo Spring Boot Buildpack 5.2.0\r\n[INFO]     [creator]       https:\/\/github.com\/paketo-buildpacks\/spring-boot\r\n[INFO]     [creator]       Creating slices from layers index\r\n[INFO]     [creator]         dependencies\r\n[INFO]     [creator]         spring-boot-loader\r\n[INFO]     [creator]         snapshot-dependencies\r\n[INFO]     [creator]         application\r\n[INFO]     [creator]       Launch Helper: Contributing to layer\r\n[INFO]     [creator]         Creating \/layers\/paketo-buildpacks_spring-boot\/helper\/exec.d\/spring-cloud-bindings\r\n[INFO]     [creator]       Spring Cloud Bindings 1.8.0: Contributing to layer\r\n[INFO]     [creator]         Downloading from https:\/\/repo.spring.io\/release\/org\/springframework\/cloud\/spring-cloud-bindings\/1.8.0\/spring-cloud-bindings-1.8.0.jar\r\n[INFO]     [creator]         Verifying checksum\r\n[INFO]     [creator]         Copying to \/layers\/paketo-buildpacks_spring-boot\/spring-cloud-bindings\r\n[INFO]     [creator]       Web Application Type: Contributing to layer\r\n[INFO]     [creator]         Servlet web application detected\r\n[INFO]     [creator]         Writing env.launch\/BPL_JVM_THREAD_COUNT.default\r\n[INFO]     [creator]       4 application slices\r\n[INFO]     [creator]       Image labels:\r\n[INFO]     [creator]         org.opencontainers.image.title\r\n[INFO]     [creator]         org.opencontainers.image.version\r\n[INFO]     [creator]         org.springframework.boot.version\r\n[INFO]     [creator]     ===&gt; EXPORTING\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/ca-certificates:helper'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/bellsoft-liberica:helper'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/bellsoft-liberica:java-security-properties'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/bellsoft-liberica:jre'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/executable-jar:classpath'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/spring-boot:helper'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/spring-boot:spring-cloud-bindings'\r\n[INFO]     [creator]     Adding layer 'paketo-buildpacks\/spring-boot:web-application-type'\r\n[INFO]     [creator]     Adding 5\/5 app layer(s)\r\n[INFO]     [creator]     Adding layer 'launcher'\r\n[INFO]     [creator]     Adding layer 'config'\r\n[INFO]     [creator]     Adding layer 'process-types'\r\n[INFO]     [creator]     Adding label 'io.buildpacks.lifecycle.metadata'\r\n[INFO]     [creator]     Adding label 'io.buildpacks.build.metadata'\r\n[INFO]     [creator]     Adding label 'io.buildpacks.project.metadata'\r\n[INFO]     [creator]     Adding label 'org.opencontainers.image.title'\r\n[INFO]     [creator]     Adding label 'org.opencontainers.image.version'\r\n[INFO]     [creator]     Adding label 'org.springframework.boot.version'\r\n[INFO]     [creator]     Setting default process type 'web'\r\n[INFO]     [creator]     Saving docker.io\/library\/spring-docker-cnb-demo:0.0.1...\r\n[INFO]     [creator]     *** Images (3615490a772e):\r\n[INFO]     [creator]           docker.io\/library\/spring-docker-cnb-demo:0.0.1\r\n[INFO]     [creator]     Adding cache layer 'paketo-buildpacks\/syft:syft'\r\n[INFO] \r\n[INFO] Successfully built image 'docker.io\/library\/spring-docker-cnb-demo:0.0.1'\r\n[INFO] \r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] BUILD SUCCESS\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] Total time:  02:12 min\r\n[INFO] Finished at: 2021-12-23T10:03:59+09:00\r\n[INFO] ------------------------------------------------------------------------\r\n<\/code><\/pre>\n<p>\u5df2\u7ecf\u6267\u884c\u4e86\u521b\u5efaJAR\u6587\u4ef6\u3001\u4e0b\u8f7d\u6240\u9700\u7684\u955c\u50cf\u548c\u6784\u5efaDocker\u955c\u50cf\u7684\u64cd\u4f5c\u3002<\/p>\n<p>\u68c0\u67e5\u5bb9\u5668\u955c\u50cf\u3002<\/p>\n<pre class=\"post-pre\"><code>docker image ls\r\n\r\nREPOSITORY                 TAG        IMAGE ID       CREATED        SIZE\r\nspring-docker-demo         0.0.1      1f356d2363a4   2 hours ago    251MB\r\npaketobuildpacks\/run       base-cnb   a6fc5afbe7bb   7 days ago     87.2MB\r\npaketobuildpacks\/builder   base       73430d4688f2   42 years ago   760MB\r\nspring-docker-cnb-demo     0.0.1      3615490a772e   42 years ago   262MB\r\n\r\n<\/code><\/pre>\n<p>\u6211\u5df2\u7ecf\u786e\u8ba4\u5728\u6784\u5efa\u65f6\u4e0b\u8f7d\u4e86\u955c\u50cf\u5e76\u521b\u5efa\u4e86 Docker \u955c\u50cf\u3002<\/p>\n<h4>\u542f\u52a8<\/h4>\n<pre class=\"post-pre\"><code>docker run -it -p 8080:8080 spring-docker-cnb-demo:0.0.1\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d400937434c4406c90a30\/52-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6211\u5df2\u7ecf\u6210\u529f\u542f\u52a8\u4e86\u3002<\/p>\n<h1>\u6700\u7ec8<\/h1>\n<p>\u6211\u5011\u9019\u6b21\u4f7f\u7528\u4e86\u5169\u7a2e\u65b9\u6cd5\u9032\u884c\u5bb9\u5668\u5316\uff0c\u4f46\u4f7f\u7528Cloud Native Buildpacks\u7684\u65b9\u6cd5\u66f4\u7c21\u55ae\u3002<br \/>\n\u4f7f\u7528Dockerfile\u7684\u65b9\u6cd5\u662f\u4e00\u7a2e\u7c21\u6613\u7684\u8a18\u8f09\uff0c\u4e26\u6c92\u6709\u8003\u616e\u5230\u5b89\u5168\u6027\u548c\u6027\u80fd\uff0c\u5728\u5c07\u5176\u61c9\u7528\u65bc\u751f\u7522\u74b0\u5883\u6642\u9700\u8981\u66f4\u8a73\u7d30\u7684\u8a18\u8f09\uff0c\u9019\u7a2e\u5dee\u7570\u6703\u66f4\u52a0\u986f\u8457\u3002<\/p>\n<p>Cloud Native Buildpacks\u975e\u5e38\u9002\u5408\u521b\u5efa\u4e0d\u6613\u53d7\u5230\u6f0f\u6d1e\u653b\u51fb\u7684\u955c\u50cf\u72b6\u6001\uff0c\u800c\u65e0\u9700\u7f16\u5199Dockerfile\uff0c\u56e0\u6b64\u4f7f\u7528Cloud Native Buildpacks\u662f\u6700\u4f73\u9009\u62e9\u3002<\/p>\n<p>\u7136\u800c\uff0c\u7531\u4e8e\u6240\u6709\u64cd\u4f5c\u90fd\u662f\u81ea\u52a8\u6267\u884c\u7684\uff0c\u65e0\u6cd5\u8fdb\u884c\u8be6\u7ec6\u7684\u914d\u7f6e\uff0c\u56e0\u6b64\u6211\u8ba4\u4e3a\u9700\u8981\u8fdb\u884c\u5145\u5206\u7684\u9a8c\u8bc1\uff0c\u4ee5\u786e\u5b9a\u662f\u5426\u53ef\u4ee5\u5728\u6211\u7684\u9879\u76ee\u4e2d\u65e0\u95ee\u9898\u5730\u4f7f\u7528\u3002\u56e0\u6b64\uff0c\u6211\u5e0c\u671b\u80fd\u7ee7\u7eed\u8fdb\u884c\u8c03\u67e5\u548c\u9a8c\u8bc1\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u662fZOZO Advent Calendar 2021 #5\u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002 \u9996\u5148 \u6211\u5c1d\u8bd5\u5c06Sprin [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40288","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5c06spring-boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c\" \/>\n<meta property=\"og:description\" content=\"\u8fd9\u7bc7\u6587\u7ae0\u662fZOZO Advent Calendar 2021 #5\u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002 \u9996\u5148 \u6211\u5c1d\u8bd5\u5c06Sprin [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5c06spring-boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-01T03:12:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T23:37:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d400937434c4406c90a30\/40-0.png\" \/>\n<meta name=\"author\" content=\"\u96c5, \u609f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u96c5, \u609f\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/\",\"name\":\"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-03-01T03:12:27+00:00\",\"dateModified\":\"2024-04-28T23:37:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\",\"name\":\"\u96c5, \u609f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"caption\":\"\u96c5, \u609f\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5c06spring-boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c","og_description":"\u8fd9\u7bc7\u6587\u7ae0\u662fZOZO Advent Calendar 2021 #5\u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002 \u9996\u5148 \u6211\u5c1d\u8bd5\u5c06Sprin [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u5c06spring-boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-03-01T03:12:27+00:00","article_modified_time":"2024-04-28T23:37:36+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d400937434c4406c90a30\/40-0.png"}],"author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"13 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/","name":"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-03-01T03:12:27+00:00","dateModified":"2024-04-28T23:37:36+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c1d\u8bd5\u5c06Spring Boot\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u5bb9\u5668\u5316\u5b9e\u9a8c"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6","name":"\u96c5, \u609f","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","caption":"\u96c5, \u609f"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e5%b0%86spring-boot%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%bf%9b%e8%a1%8c%e5%ae%b9%e5%99%a8%e5%8c%96%e5%ae%9e%e9%aa%8c%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=40288"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40288\/revisions"}],"predecessor-version":[{"id":83924,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/40288\/revisions\/83924"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=40288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=40288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=40288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}