1. Docker 部署 Spring Boot 項目的 2 種方式!

        共 14278字,需瀏覽 29分鐘

         ·

        2021-02-20 14:26

        點擊關(guān)注公眾號,Java干貨及時送達

        作者:LemonSquash

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

        1.手工方式

        1.1.準(zhǔn)備Springboot jar項目

        將項目打包成jar。Spring Boot 推薦看下面這個教程,很齊全:

        https://github.com/javastacks/spring-boot-best-practice

        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容器默認(rèn)使用/tmp作為工作目錄 ADD:拷貝文件并且重命名(ADD elk-web-1.0-SNAPSHOT.jar elk.jar 將應(yīng)用jar包復(fù)制到/elk.jar) EXPOSE:并不是真正的發(fā)布端口,這個只是容器部署人員與建立image的人員之間的交流,即建立image的人員告訴容器布署人員容器應(yīng)該映射哪個端口給外界 ENTRYPOINT:容器啟動時運行的命令,相當(dāng)于我們在命令行中輸入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.Docker遠(yuǎn)程連接并且使用idea一鍵部署

        2.1.配置docker遠(yuǎn)程連接端口

        首先編輯我們服務(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

        重啟之后測試遠(yuǎn)程連接是否正常,這里的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插件,idea自帶了docker插件。

        IDEA 香是香,關(guān)注公眾號Java技術(shù)棧,回復(fù):IDEA,可以閱讀我分享過的獲取正版 IDEA 激活碼的教程,很多粉絲都反饋說輕松得到了,感興趣的都可以去申請,不能太容易了。


        如果沒有插件可以選擇安裝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







        關(guān)注Java技術(shù)??锤喔韶?/strong>



        戳原文,獲取精選面試題!
        瀏覽 47
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
          
          

            1. 免费黄色成人视频网站 | 欧美亚洲 | 潘金莲一级淫片aaaaaa | 丁香花五月色5566资源网 | 美女大鸡吧 |