<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 部署 Spring Boot 項(xiàng)目的 2 種方式!

          共 28807字,需瀏覽 58分鐘

           ·

          2021-02-27 12:01

          作者:LemonSquash

          出處:https://www.cnblogs.com/npeng/p/14267007.html

          1.手工方式

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

          將項(xiàng)目打包成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ǔ)鏡像,即運(yùn)行環(huán)境 

          VOLUME /tmp創(chuàng)建/tmp目錄并持久化到Docker數(shù)據(jù)文件夾,因?yàn)镾pring 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ā)布端口,這個(gè)只是容器部署人員與建立image的人員之間的交流,即建立image的人員告訴容器布署人員容器應(yīng)該映射哪個(gè)端口給外界 

          ENTRYPOINT:容器啟動時(shí)運(yùn)行的命令,相當(dāng)于我們在命令行中輸入java -jar xxxx.jar,為了縮短 Tomcat 的啟動時(shí)間,添加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.運(yùn)行容器

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

          其中-d表示后臺運(yùn)行容器,這也就自然地解決的Spring Boot不支持后臺運(yùn)行應(yīng)用程序的問題。-p 8080:8080表示將容器內(nèi)部的8080端口映射到宿主機(jī)器的8080端口,這樣就可以通過宿主機(jī)器直接訪問應(yīng) 用。--name 給容器取一個(gè)容易記住的名字方便日后管理。

          [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.查看運(yùn)行日志

          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<java.util.Map<java.lang.String, java.lang.Object>> 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插件,idea2019自帶了docker插件。如果沒有插件可以選擇安裝docker插件

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

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

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

          配置阿里云鏡像加速器:

          2.3.docker-maven-plugin 介紹

          在我們持續(xù)集成過程中,項(xiàng)目工程一般使用 Maven 編譯打包,然后生成鏡像,通過鏡像上線,能夠大大提供上線效率,同時(shí)能夠快速動態(tài)擴(kuò)容,快速回滾,著實(shí)很方便。docker-maven-plugin 插件就是為了幫助我們在Maven工程中,通過簡單的配置,自動生成鏡像并推送到倉庫中。

          pom.xml:

          <build>

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

                  <plugins>

                      <plugin>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-maven-plugin</artifactId>
                          <configuration>
                              <fork>true</fork>
                          </configuration>
                      </plugin>
                      <!-- 跳過單元測試 -->
                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-surefire-plugin</artifactId>
                          <configuration>
                              <skipTests>true</skipTests>
                          </configuration>
                      </plugin>

                      <!--使用docker-maven-plugin插件-->
                      <plugin>
                          <groupId>com.spotify</groupId>
                          <artifactId>docker-maven-plugin</artifactId>
                          <version>1.0.0</version>
                          <!--將插件綁定在某個(gè)phase執(zhí)行-->
                          <executions>
                              <execution>
                                  <id>build-image</id>
                                  <!--用戶只需執(zhí)行mvn package ,就會自動執(zhí)行mvn docker:build-->
                                  <phase>package</phase>
                                  <goals>
                                      <goal>build</goal>
                                  </goals>
                              </execution>
                          </executions>
                          <configuration>
                              <!--指定生成的鏡像名-->
                              <imageName>bruceliu/${project.artifactId}</imageName>
                              <!--指定標(biāo)簽-->
                              <imageTags>
                                  <imageTag>latest</imageTag>
                              </imageTags>
                              <!--指定基礎(chǔ)鏡像jdk1.8-->
                              <baseImage>java</baseImage>
                              <!--鏡像制作人本人信息-->
                              <maintainer>[email protected]</maintainer>
                              <!--切換到ROOT目錄-->
                              <workdir>/ROOT</workdir>
                              <cmd>["java", "-version"]</cmd>
                              <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                              <!--指定遠(yuǎn)程 docker api地址-->
                              <dockerHost>http://122.51.50.249:2375</dockerHost>
                              <!-- 這里是復(fù)制 jar 包到 docker 容器指定目錄配置 -->
                              <resources>
                                  <resource>
                                      <targetPath>/</targetPath>
                                      <!--jar 包所在的路徑  此處配置的 即對應(yīng) target 目錄-->
                                      <directory>${project.build.directory}</directory>
                                      <!--用于指定需要復(fù)制的文件 需要包含的 jar包 ,這里對應(yīng)的是 Dockerfile中添加的文件名 -->
                                      <include>${project.build.finalName}.jar</include>
                                  </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] -------------------< com.bruceliu.elk.demo:elk-web >--------------------
          [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 : MAINTAINER [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

          1. 舒服!一個(gè)注解,搞定 SpringBoot 操作日志

          2. 這四種情況下,才是考慮分庫分表的時(shí)候!

          3. 一文搞定 Spring Bean 的創(chuàng)建全過程!

          4. Dubbo 是如何控制并發(fā)數(shù)和限流的?

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 47
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  影音先锋日夜av在线 | 欧美黄色免费观看 | 欧美成人免费在线视频 | 欧美草比视频 | 伊人色色影院 |