<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker部署SpringBoot的兩種方法,后一種一鍵部署超好用!

          共 14154字,需瀏覽 29分鐘

           ·

          2021-01-19 08:11

          作者 | LemonSquash

          來源 | cnblogs.com/npeng/p/14267007.html

          1.手工方式

          1.1.準備Springboot jar項目

          將項目打包成jar

          1.2.編寫Dockerfile

          FROM?java:8
          VOLUME?/tmp
          ADD?elk-web-1.0-SNAPSHOT.jar?elk.jar
          EXPOSE?8080
          ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/elk.jar"]
          • FROM:表示基礎(chǔ)鏡像,即運行環(huán)境
          • VOLUME:/tmp創(chuàng)建/tmp目錄并持久化到Docker數(shù)據(jù)文件夾,因為Spring Boot使用的內(nèi)嵌Tomcat容器默認使用/tmp作為工作目錄
          • ADD:拷貝文件并且重命名(ADD elk-web-1.0-SNAPSHOT.jar elk.jar 將應(yīng)用jar包復制到/elk.jar)
          • EXPOSE:并不是真正的發(fā)布端口,這個只是容器部署人員與建立image的人員之間的交流,即建立image的人員告訴容器布署人員容器應(yīng)該映射哪個端口給外界
          • ENTRYPOINT:容器啟動時運行的命令,相當于我們在命令行中輸入java -jar xxxx.jar,為了縮短 Tomcat 的啟動時間,添加java.security.egd的系統(tǒng)屬性指向/dev/urandom作為 ENTRYPOINT

          1.3.構(gòu)建容器

          [root@VM_0_15_centos?elk]#?docker?build?-t?elk?.
          Sending?build?context?to?Docker?daemon?14.43?MB
          Step?1/5?:?FROM?java:8
          Trying?to?pull?repository?docker.io/library/java?...?
          8:?Pulling?from?docker.io/library/java
          5040bd298390:?Pull?complete?
          fce5728aad85:?Pull?complete?
          76610ec20bf5:?Pull?complete?
          60170fec2151:?Pull?complete?
          e98f73de8f0d:?Pull?complete?
          11f7af24ed9c:?Pull?complete?
          49e2d6393f32:?Pull?complete?
          bb9cdec9c7f3:?Pull?complete?
          Digest:?sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
          Status:?Downloaded?newer?image?for?docker.io/java:8
          ?--->?d23bdf5b1b1b
          Step?2/5?:?VOLUME?/tmp
          ?--->?Running?in?0aec2dc2f98c
          ?--->?a52e844f25d4
          Removing?intermediate?container?0aec2dc2f98c
          Step?3/5?:?ADD?elk-web-1.0-SNAPSHOT.jar?elk.jar
          ?--->?3ba2f4fdddda
          Removing?intermediate?container?860a0f748a23
          Step?4/5?:?EXPOSE?8080
          ?--->?Running?in?1d3331cc2be6
          ?--->?e9ac33d26ce0
          Removing?intermediate?container?1d3331cc2be6
          Step?5/5?:?ENTRYPOINT?java?-Djava.security.egd=file:/dev/./urandom?-jar?/elk.jar
          ?--->?Running?in?d354f8ee2af5
          ?--->?8937e1ade6c7
          Removing?intermediate?container?d354f8ee2af5
          Successfully?built?8937e1ade6c7

          1.4.運行容器

          docker?run?-di?--name?容器名稱?-p?8080:8080?鏡像名稱

          其中-d表示后臺運行容器,這也就自然地解決的Spring Boot不支持后臺運行應(yīng)用程序的問題。

          -p 8080:8080表示將容器內(nèi)部的8080端口映射到宿主機器的8080端口,這樣就可以通過宿主機器直接訪問應(yīng)
          用。

          --name 給容器取一個容易記住的名字方便日后管理。

          [root@VM_0_15_centos?elk]#?docker?run?-di?--name?myspringboot?-p?8080:8080?8937e1ade6c7
          04d6b2c347950a10c95a039c94a3e51d717e516dd8c3c742e3197687dfcf5523
          [root@VM_0_15_centos?elk]#?docker?ps?-a
          CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS????????????????????NAMES
          04d6b2c34795????????8937e1ade6c7????????"java?-Djava.secur..."???8?seconds?ago???????Up?7?seconds????????0.0.0.0:8080->8080/tcp???myspringboot
          [root@VM_0_15_centos?elk]#?

          1.5.查看運行日志

          docker logs -f --tail=100 容器名稱

          [root@VM_0_15_centos?elk]#?docker?logs?-f?--tail=100?04d6b2c34795
          ??.???____??????????_????????????__?_?_
          ?/\\?/?___'_?__?_?_(_)_?__??__?_?\?\?\?\
          (?(?)\___?|?'
          _?|?'_|?|?'_?\/?_`?|?\?\?\?\
          ?\\/??___)|?|_)|?|?|?|?|?||?(_|?|??)?)?)?)
          ??'??|____|?.__|_|?|_|_|?|_\__,?|?/?/?/?/
          ?=========|_|==============|___/=/_/_/_/
          ?::?Spring?Boot?::????????(v1.5.4.RELEASE)
          2019-12-29?07:42:58.982??INFO?1?---?[???????????main]?c.b.ElkExampleSpringBootApplication??????:?Starting?ElkExampleSpringBootApplication?v1.0-SNAPSHOT?on?04d6b2c34795?with?PID?1?(/elk.jar?started?by?root?in?/)
          2019-12-29?07:42:58.999??INFO?1?---?[???????????main]?c.b.ElkExampleSpringBootApplication??????:?No?active?profile?set,?falling?back?to?default?profiles:?default
          2019-12-29?07:42:59.243??INFO?1?---?[???????????main]?ationConfigEmbeddedWebApplicationContext?:?Refreshing?org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5a2e4553:?startup?date?[Sun?Dec?29?07:42:59?UTC?2019];?root?of?context?hierarchy
          2019-12-29?07:43:03.652??INFO?1?---?[???????????main]?s.b.c.e.t.TomcatEmbeddedServletContainer?:?Tomcat?initialized?with?port(s):?8080?(http)
          2019-12-29?07:43:03.699??INFO?1?---?[???????????main]?o.apache.catalina.core.StandardService???:?Starting?service?[Tomcat]
          2019-12-29?07:43:03.714??INFO?1?---?[???????????main]?org.apache.catalina.core.StandardEngine??:?Starting?Servlet?Engine:?Apache?Tomcat/8.5.15
          2019-12-29?07:43:04.012??INFO?1?---?[ost-startStop-1]?o.a.c.c.C.[Tomcat].[localhost].[/]???????:?Initializing?Spring?embedded?WebApplicationContext
          2019-12-29?07:43:04.012??INFO?1?---?[ost-startStop-1]?o.s.web.context.ContextLoader????????????:?Root?WebApplicationContext:?initialization?completed?in?4772?ms
          2019-12-29?07:43:04.449??INFO?1?---?[ost-startStop-1]?o.s.b.w.servlet.ServletRegistrationBean??:?Mapping?servlet:?'
          dispatcherServlet'?to?[/]
          2019-12-29?07:43:04.470??INFO?1?---?[ost-startStop-1]?o.s.b.w.servlet.FilterRegistrationBean???:?Mapping?filter:?'
          characterEncodingFilter'?to:?[/*]
          2019-12-29?07:43:04.470??INFO?1?---?[ost-startStop-1]?o.s.b.w.servlet.FilterRegistrationBean???:?Mapping?filter:?'
          hiddenHttpMethodFilter'?to:?[/*]
          2019-12-29?07:43:04.471??INFO?1?---?[ost-startStop-1]?o.s.b.w.servlet.FilterRegistrationBean???:?Mapping?filter:?'
          httpPutFormContentFilter'?to:?[/*]
          2019-12-29?07:43:04.471??INFO?1?---?[ost-startStop-1]?o.s.b.w.servlet.FilterRegistrationBean???:?Mapping?filter:?'
          requestContextFilter'?to:?[/*]
          2019-12-29?07:43:05.534??INFO?1?---?[???????????main]?s.w.s.m.m.a.RequestMappingHandlerAdapter?:?Looking?for?@ControllerAdvice:?org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5a2e4553:?startup?date?[Sun?Dec?29?07:42:59?UTC?2019];?root?of?context?hierarchy
          2019-12-29?07:43:05.765??INFO?1?---?[???????????main]?s.w.s.m.m.a.RequestMappingHandlerMapping?:?Mapped?"{[/exception]}"?onto?public?java.lang.String?com.bruceliu.controller.ELKController.exception()
          2019-12-29?07:43:05.766??INFO?1?---?[???????????main]?s.w.s.m.m.a.RequestMappingHandlerMapping?:?Mapped?"{[/elkdemo]}"?onto?public?java.lang.String?com.bruceliu.controller.ELKController.helloWorld()
          2019-12-29?07:43:05.772??INFO?1?---?[???????????main]?s.w.s.m.m.a.RequestMappingHandlerMapping?:?Mapped?"{[/error],produces=[text/html]}"?onto?public?org.springframework.web.servlet.ModelAndView?org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
          2019-12-29?07:43:05.780??INFO?1?---?[???????????main]?s.w.s.m.m.a.RequestMappingHandlerMapping?:?Mapped?"{[/error]}"?onto?public?org.springframework.http.ResponseEntity>?org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
          2019-12-29?07:43:05.869??INFO?1?---?[???????????main]?o.s.w.s.handler.SimpleUrlHandlerMapping??:?Mapped?URL?path?[/webjars/**]?onto?handler?of?type?[class?org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
          2019-12-29?07:43:05.869??INFO?1?---?[???????????main]?o.s.w.s.handler.SimpleUrlHandlerMapping??:?Mapped?URL?path?[/**]?onto?handler?of?type?[class?org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
          2019-12-29?07:43:05.984??INFO?1?---?[???????????main]?o.s.w.s.handler.SimpleUrlHandlerMapping??:?Mapped?URL?path?[/**/favicon.ico]?onto?handler?of?type?[class?org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
          2019-12-29?07:43:06.387??INFO?1?---?[???????????main]?o.s.j.e.a.AnnotationMBeanExporter????????:?Registering?beans?for?JMX?exposure?on?startup
          2019-12-29?07:43:06.537??INFO?1?---?[???????????main]?s.b.c.e.t.TomcatEmbeddedServletContainer?:?Tomcat?started?on?port(s):?8080?(http)
          2019-12-29?07:43:06.562??INFO?1?---?[???????????main]?c.b.ElkExampleSpringBootApplication??????:?Started?ElkExampleSpringBootApplication?in?8.771?seconds?(JVM?running?for?9.832)

          1.6.訪問測試

          2.Idea一鍵部署

          2.1.配置docker遠程連接端口

          首先編輯我們服務(wù)器上的docker文件

          vim?/usr/lib/systemd/system/docker.service

          修改以ExecStart開頭的行(centos 7):添加

          -H?tcp://0.0.0.0:2375?-H?unix:///var/run/docker.sock?\

          修改后保存文件,然后重啟docker

          systemctl?daemon-reload
          service?docker?restart

          重啟之后測試遠程連接是否正常,這里的2375是之前配置的端口

          curl?http://localhost:2375/version

          看到返回信息基本上就沒有問題了

          [root@VM_0_15_centos?elk]#?curl?http://localhost:2375/version
          {"Version":"1.13.1","ApiVersion":"1.26","MinAPIVersion":"1.12","GitCommit":"7f2769b/1.13.1","GoVersion":"go1.10.3","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-957.21.3.el7.x86_64","BuildTime":"2019-09-15T14:06:47.565778468+00:00","PkgVersion":"docker-1.13.1-103.git7f2769b.el7.centos.x86_64"}

          然后開啟端口,或者關(guān)閉防火墻,二者選其一即可

          firewall-cmd?--zone=public?--add-port=2375/tcp?--permanent??
          chkconfig?iptables?off

          然后打開瀏覽器測試將之前的localhost修改為你的ip

          2.2.使用idea連接到docker

          首先下載docker插件,idea2019自帶了docker插件。如果沒有插件可以選擇安裝docker插件。

          然后配置docker地址,在你的File | Settings | Build, Execution, Deployment | Docker

          配置完成鏈接之后,出現(xiàn)了框中的內(nèi)容即可.

          鏈接成功之后會列出容器和鏡像!

          配置阿里云鏡像加速器:

          2.3.docker-maven-plugin 介紹

          在我們持續(xù)集成過程中,項目工程一般使用 Maven 編譯打包,然后生成鏡像,通過鏡像上線,能夠大大提供上線效率,同時能夠快速動態(tài)擴容,快速回滾,著實很方便。

          docker-maven-plugin 插件就是為了幫助我們在Maven工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中。

          pom.xml:

          <build>

          ????????<finalName>${project.artifactId}finalName>

          ????????<plugins>

          ????????????<plugin>
          ????????????????<groupId>org.springframework.bootgroupId>
          ????????????????<artifactId>spring-boot-maven-pluginartifactId>
          ????????????????<configuration>
          ????????????????????<fork>truefork>
          ????????????????configuration>
          ????????????plugin>
          ????????????
          ????????????<plugin>
          ????????????????<groupId>org.apache.maven.pluginsgroupId>
          ????????????????<artifactId>maven-surefire-pluginartifactId>
          ????????????????<configuration>
          ????????????????????<skipTests>trueskipTests>
          ????????????????configuration>
          ????????????plugin>

          ????????????
          ????????????<plugin>
          ????????????????<groupId>com.spotifygroupId>
          ????????????????<artifactId>docker-maven-pluginartifactId>
          ????????????????<version>1.0.0version>
          ????????????????
          ????????????????<executions>
          ????????????????????<execution>
          ????????????????????????<id>build-imageid>
          ????????????????????????
          ????????????????????????<phase>packagephase>
          ????????????????????????<goals>
          ????????????????????????????<goal>buildgoal>
          ????????????????????????goals>
          ????????????????????execution>
          ????????????????executions>
          ????????????????<configuration>
          ????????????????????
          ????????????????????<imageName>bruceliu/${project.artifactId}imageName>
          ????????????????????
          ????????????????????<imageTags>
          ????????????????????????<imageTag>latestimageTag>
          ????????????????????imageTags>
          ????????????????????
          ????????????????????<baseImage>javabaseImage>
          ????????????????????
          ????????????????????<maintainer>[email protected]maintainer>
          ????????????????????
          ????????????????????<workdir>/ROOTworkdir>
          ????????????????????<cmd>["java",?"-version"]cmd>
          ????????????????????<entryPoint>["java",?"-jar",?"/${project.build.finalName}.jar"]entryPoint>
          ????????????????????
          ????????????????????<dockerHost>http://122.51.50.249:2375dockerHost>
          ????????????????????
          ????????????????????<resources>
          ????????????????????????<resource>
          ????????????????????????????<targetPath>/targetPath>
          ????????????????????????????
          ????????????????????????????<directory>${project.build.directory}directory>
          ????????????????????????????
          ????????????????????????????<include>${project.build.finalName}.jarinclude>
          ????????????????????????resource>
          ????????????????????resources>
          ????????????????configuration>
          ????????????plugin>

          ????????plugins>
          ????build>

          執(zhí)行Maven打包命令:

          G:\softDevelopment\JDK8\bin\java?-Dmaven.multiModuleProjectDirectory=E:\workspace2017\elk-web?-Dmaven.home=E:\Maven20190910\apache-maven-3.6.1?-Dclassworlds.conf=E:\Maven20190910\apache-maven-3.6.1\bin\m2.conf?"-javaagent:G:\idea2017\IntelliJ?IDEA?2017.3.1\lib\idea_rt.jar=49260:G:\idea2017\IntelliJ?IDEA?2017.3.1\bin"?-Dfile.encoding=UTF-8?-classpath?E:\Maven20190910\apache-maven-3.6.1\boot\plexus-classworlds-2.6.0.jar?org.codehaus.classworlds.Launcher?-Didea.version=2017.3.7?-s?E:\Maven20190910\apache-maven-3.6.1\conf\settings.xml?-Dmaven.repo.local=E:\Maven20190910\repository?package
          [INFO]?Scanning?for?projects...
          [WARNING]?
          [WARNING]?Some?problems?were?encountered?while?building?the?effective?model?for?com.bruceliu.elk.demo:elk-web:jar:1.0-SNAPSHOT
          [WARNING]?'build.plugins.plugin.(groupId:artifactId)'?must?be?unique?but?found?duplicate?declaration?of?plugin?org.springframework.boot:spring-boot-maven-plugin?@?line?36,?column?21
          [WARNING]?
          [WARNING]?It?is?highly?recommended?to?fix?these?problems?because?they?threaten?the?stability?of?your?build.
          [WARNING]?
          [WARNING]?For?this?reason,?future?Maven?versions?might?no?longer?support?building?such?malformed?projects.
          [WARNING]?
          [INFO]?
          [INFO]?---------------------------------------
          [INFO]?Building?elk-web?1.0-SNAPSHOT
          [INFO]?--------------------------------[?jar?]---------------------------------
          [INFO]?
          [INFO]?---?maven-resources-plugin:2.6:resources?(default-resources)?@?elk-web?---
          [INFO]?Using?'UTF-8'?encoding?to?copy?filtered?resources.
          [INFO]?Copying?1?resource
          [INFO]?Copying?0?resource
          [INFO]?
          [INFO]?---?maven-compiler-plugin:3.1:compile?(default-compile)?@?elk-web?---
          [INFO]?Changes?detected?-?recompiling?the?module!
          [INFO]?Compiling?2?source?files?to?E:\workspace2017\elk-web\target\classes
          [INFO]?
          [INFO]?---?maven-resources-plugin:2.6:testResources?(default-testResources)?@?elk-web?---
          [INFO]?Using?'UTF-8'?encoding?to?copy?filtered?resources.
          [INFO]?skip?non?existing?resourceDirectory?E:\workspace2017\elk-web\src\test\resources
          [INFO]?
          [INFO]?---?maven-compiler-plugin:3.1:testCompile?(default-testCompile)?@?elk-web?---
          [INFO]?Nothing?to?compile?-?all?classes?are?up?to?date
          [INFO]?
          [INFO]?---?maven-surefire-plugin:2.18.1:test?(default-test)?@?elk-web?---
          [INFO]?Tests?are?skipped.
          [INFO]?
          [INFO]?---?maven-jar-plugin:2.6:jar?(default-jar)?@?elk-web?---
          [INFO]?Building?jar:?E:\workspace2017\elk-web\target\elk-web.jar
          [INFO]?
          [INFO]?---?spring-boot-maven-plugin:1.5.4.RELEASE:repackage?(default)?@?elk-web?---
          [INFO]?
          [INFO]?---?docker-maven-plugin:1.0.0:build?(build-image)?@?elk-web?---
          [INFO]?Using?authentication?suppliers:?[ConfigFileRegistryAuthSupplier]
          [INFO]?Copying?E:\workspace2017\elk-web\target\elk-web.jar?->?E:\workspace2017\elk-web\target\docker\elk-web.jar
          [INFO]?Building?image?bruceliu/elk-web
          Step?1/6?:?FROM?java
          ?--->?d23bdf5b1b1b
          Step?2/6?:[email protected]
          ?--->?Running?in?787e4786fbd4
          ?--->?4d4519f52fda
          Removing?intermediate?container?787e4786fbd4
          Step?3/6?:?WORKDIR?/ROOT
          ?--->?f40dcbc9a9eb
          Removing?intermediate?container?7fa6bbc9d1df
          Step?4/6?:?ADD?/elk-web.jar?//
          ?--->?c7f1107ae3d4
          Removing?intermediate?container?f370558f1a38
          Step?5/6?:?ENTRYPOINT?java?-jar?/elk-web.jar
          ?--->?Running?in?e4480ced0829
          ?--->?b634ca5fa5ad
          Removing?intermediate?container?e4480ced0829
          Step?6/6?:?CMD?java?-version
          ?--->?Running?in?cc6a064ef921
          ?--->?cf9a5d50326b
          Removing?intermediate?container?cc6a064ef921
          Successfully?built?cf9a5d50326b
          [INFO]?Built?bruceliu/elk-web
          [INFO]?Tagging?bruceliu/elk-web?with?latest
          [INFO]?------------------------------------------------------------------------
          [INFO]?BUILD?SUCCESS
          [INFO]?------------------------------------------------------------------------
          [INFO]?Total?time:??10.329?s
          [INFO]?Finished?at:?2019-12-29T22:44:06+08:00
          [INFO]?------------------------------------------------------------------------

          Process?finished?with?exit?code?0



          往期推薦

          一文匯總 JDK 5 到 JDK 15 中的牛逼功能!


          Socket粘包問題終極解決方案—Netty版(2W字)!


          不要再用main方法測試代碼性能了,用這款JDK自帶工具


          關(guān)注我,每天陪你進步一點點!

          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国精品无码一区二区三区在线秋菊 | 亚洲三级片视频 | 亚洲ⅴA| 特黄妇女AA毛片 | 大香蕉第一页 |