1. 程式人生 > >Docker---(5)Docker 部署SpringBoot web專案

Docker---(5)Docker 部署SpringBoot web專案

注:博主系統是ubuntu。

SpringBoot專案釋出到伺服器,是一件很簡單的事情,但是釋出到伺服器上docker啟動的tomcat容器中,有一些坑,需要注意。

下面完整的介紹一下:將SpringBoot web專案釋出到docker啟動的tomcat容器中。

1.pom.xml

將打包方式改為war包

  1. <packaging>war</packaging>  
移除springBoot內建的tomcat,新增servlet-api
  1. <dependency>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-web</artifactId>  
  4.     <!--移除內建的tomcat-->  
  5.     <exclusions>  
  6.         <exclusion>  
  7.             <groupId>org.springframework.boot</groupId>  
  8.             <artifactId>spring-boot-starter-tomcat</artifactId>  
  9.         </exclusion>  
  10.     </exclusions>  
  11. </dependency>  
  12. <!--新增servlet-api-->  
  13. <dependency>  
  14.     <groupId>org.apache.tomcat</groupId>  
  15.     <artifactId>tomcat-servlet-api</artifactId>  
  16.     <version>8.0.36</version>  
  17.     <scope>provided</scope>  
  18. </dependency>  
在build中新增專案訪問路徑
  1. <finalName>tweb</finalName>  

(我第一次釋出時,看了不下30篇文章,沒有提到這一點,釋出了20多次都沒成功)

  1. <build>  
  2.     <!--打包後的專案訪問名稱-->  
  3.     <finalName>tweb</finalName>  
  4.     <plugins>  
  5.         <plugin>  
  6.             <groupId>org.springframework.boot</groupId>  
  7.             <artifactId>spring-boot-maven-plugin</artifactId>  
  8.         </plugin>  
  9.     </plugins>  
  10. </build>  
2.自定義一個Servletinitializer類,繼承SpringBootServletInitializer,用來啟動上下文

(和啟動類目錄同級)

  1. package com.jd;  
  2. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
  3. import org.springframework.boot.builder.SpringApplicationBuilder;  
  4. import org.springframework.boot.web.support.SpringBootServletInitializer;  
  5. import org.springframework.context.annotation.ComponentScan;  
  6. import org.springframework.context.annotation.Configuration;  
  7. /** 
  8.  * Date 2018/1/30 
  9.  * Description:啟動spring的上下文 
  10.  */
  11. publicclass Servletinitializer extends SpringBootServletInitializer{  
  12.     @Override
  13.     protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  
  14.         return builder.sources(TwebApplication.class);  
  15.     }  
  16. }  


3.新增一個測試介面,供測試訪問使用

  1. package com.jd;  
  2. import org.springframework.boot.SpringApplication;  
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  4. import org.springframework.web.bind.annotation.RequestMapping;  
  5. import org.springframework.web.bind.annotation.RequestMethod;  
  6. import org.springframework.web.bind.annotation.RestController;  
  7. /** 
  8.  * 啟動類 
  9.  */
  10. @SpringBootApplication
  11. @RestController
  12. publicclass TwebApplication {  
  13.     publicstaticvoid main(String[] args) {  
  14.         SpringApplication.run(TwebApplication.class, args);  
  15.     }  
  16.     @RequestMapping(value = "hello",method = RequestMethod.GET)  
  17.     public String testGood(String name){  
  18.         return"Welcome to tweb Mr."+ name;  
  19.     }  
  20.     @RequestMapping(value = "test",method = RequestMethod.GET)  
  21.     public String test(){  
  22.         return"Welcome to tweb";  
  23.     }  
  24. }  
然後,maven clean package,打包完成後,專案的target目錄下就會有此war包。

此時,專案就準備好了,接下來,就是伺服器上的docker的使用了。

4.把war包上傳至伺服器

看tomcat下有沒有其他專案,有就刪除,沒有就拉倒,我這裡有專案,我先刪除一下

  1. root@iZuf6axmuekh1n14dwcufmZ:~# docker exec -it tomcat2 /bin/bash  
  2. root@91ebdd8d5c65:/usr/local/tomcat# cd webapps/  
  3. root@91ebdd8d5c65:/usr/local/tomcat/webapps# ls  
  4. ROOT  docs  examples  host-manager  manager  tweb  tweb.war  
  5. root@91ebdd8d5c65:/usr/local/tomcat/webapps# rm tweb.war   
  6. root@91ebdd8d5c65:/usr/local/tomcat/webapps# rm -rf tweb  
  7. root@91ebdd8d5c65:/usr/local/tomcat/webapps# ls  
  8. ROOT  docs  examples  host-manager  manager  

然後,將war包上傳至伺服器

  1. root@iZuf6axmuekh1n14dwcufmZ:~# rz   
  2. root@iZuf6axmuekh1n14dwcufmZ:~# ls  
  3. tweb.war  
獲取tomcat容器的id,我這裡啟動時名字叫tomcat2
  1. root@iZuf6axmuekh1n14dwcufmZ:~# docker inspect -f '{{.Id}}' tomcat2  
  2. 91ebdd8d5c652b465cc15f86cdc1c41167e211aaae9f1e42ab1032e7db8d3854  
複製war包到tomcat容器的webapps下,然後檢視是否複製成功
  1. root@iZuf6axmuekh1n14dwcufmZ:~# docker cp tweb.war 91ebdd8d5c652b465cc15f86cdc1c41167e211aaae9f1e42ab1032e7db8d3854:usr/local/tomcat/webapps  
  2. root@iZuf6axmuekh1n14dwcufmZ:~# docker exec -it tomcat2 /bin/bash  
  3. root@91ebdd8d5c65:/usr/local/tomcat# ls  
  4. LICENSE  NOTICE  RELEASE-NOTES  RUNNING.txt  bin  conf  include  lib  logs  native-jni-lib  temp  webapps  work  
  5. root@91ebdd8d5c65:/usr/local/tomcat# cd webapps/  
  6. root@91ebdd8d5c65:/usr/local/tomcat/webapps# ls  
  7. ROOT  docs  examples  host-manager  manager  tweb  tweb.war  
  8. root@91ebdd8d5c65:/usr/local/tomcat/webapps# exit  
  9. exit  
  10. root@iZuf6axmuekh1n14dwcufmZ:~#   
複製成功後,重啟tomcat即可
  1. root@iZuf6axmuekh1n14dwcufmZ:~# docker restart tomcat2  
  2. tomcat2  
檢視狀態,我這裡啟動時埠對映為8083
  1. root@iZuf6axmuekh1n14dwcufmZ:~# docker ps -a  
  2. CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS                                                                                   NAMES  
  3. 996ff5cc0db6        webcenter/activemq   "/app/run.sh"24 hours ago        Up 16 hours                 1883/tcp, 5672/tcp, 0.0.0.0:8161->8161/tcp, 61613-61614/tcp, 0.0.0.0:61616->61616/tcp   activemq  
  4. 35350de323ca        tomcat:latest        "catalina.sh run"41 hours ago        Up 44 minutes               0.0.0.0:8085->8080/tcp                                                                  tweb_tomcat  
  5. de67495c8a87        redis:latest         "docker-entrypoint..."12 days ago         Exited (25522 hours ago   0.0.0.0:6379->6379/tcp                                                                  redis1  
  6. 91ebdd8d5c65        tomcat:latest        "catalina.sh run"2 weeks ago         Up 28 seconds               0.0.0.0:8083->8080/tcp                                                                  tomcat2  
  7. f3b0f76293f9        tomcat:latest        "catalina.sh run"2 weeks ago         Exited (25516 hours ago   0.0.0.0:8080->8080/tcp                                                                  tomcat1  
  8. 4ce1634ce6f1        mysql:latest         "docker-entrypoint..."6 weeks ago         Exited (25516 hours ago   0.0.0.0:3306->3306/tcp                                                                  mysql1  
  9. root@iZuf6axmuekh1n14dwcufmZ:~# ^C  
去瀏覽器訪問