Docker---(5)Docker 部署SpringBoot web專案
阿新 • • 發佈:2018-12-26
注:博主系統是ubuntu。
SpringBoot專案釋出到伺服器,是一件很簡單的事情,但是釋出到伺服器上docker啟動的tomcat容器中,有一些坑,需要注意。
下面完整的介紹一下:將SpringBoot web專案釋出到docker啟動的tomcat容器中。
1.pom.xml
將打包方式改為war包
- <packaging>war</packaging>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- <!--移除內建的tomcat-->
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <!--新增servlet-api-->
- <dependency>
- <groupId>org.apache.tomcat</groupId>
- <artifactId>tomcat-servlet-api</artifactId>
- <version>8.0.36</version>
- <scope>provided</scope>
- </dependency>
- <finalName>tweb</finalName>
(我第一次釋出時,看了不下30篇文章,沒有提到這一點,釋出了20多次都沒成功)
- <build>
- <!--打包後的專案訪問名稱-->
- <finalName>tweb</finalName>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
(和啟動類目錄同級)
- package com.jd;
- import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- import org.springframework.boot.builder.SpringApplicationBuilder;
- import org.springframework.boot.web.support.SpringBootServletInitializer;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
- /**
- * Date 2018/1/30
- * Description:啟動spring的上下文
- */
- publicclass Servletinitializer extends SpringBootServletInitializer{
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
- return builder.sources(TwebApplication.class);
- }
- }
3.新增一個測試介面,供測試訪問使用
- package com.jd;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- /**
- * 啟動類
- */
- @SpringBootApplication
- @RestController
- publicclass TwebApplication {
- publicstaticvoid main(String[] args) {
- SpringApplication.run(TwebApplication.class, args);
- }
- @RequestMapping(value = "hello",method = RequestMethod.GET)
- public String testGood(String name){
- return"Welcome to tweb Mr."+ name;
- }
- @RequestMapping(value = "test",method = RequestMethod.GET)
- public String test(){
- return"Welcome to tweb";
- }
- }
此時,專案就準備好了,接下來,就是伺服器上的docker的使用了。
4.把war包上傳至伺服器
看tomcat下有沒有其他專案,有就刪除,沒有就拉倒,我這裡有專案,我先刪除一下
- root@iZuf6axmuekh1n14dwcufmZ:~# docker exec -it tomcat2 /bin/bash
- root@91ebdd8d5c65:/usr/local/tomcat# cd webapps/
- root@91ebdd8d5c65:/usr/local/tomcat/webapps# ls
- ROOT docs examples host-manager manager tweb tweb.war
- root@91ebdd8d5c65:/usr/local/tomcat/webapps# rm tweb.war
- root@91ebdd8d5c65:/usr/local/tomcat/webapps# rm -rf tweb
- root@91ebdd8d5c65:/usr/local/tomcat/webapps# ls
- ROOT docs examples host-manager manager
然後,將war包上傳至伺服器
- root@iZuf6axmuekh1n14dwcufmZ:~# rz
- root@iZuf6axmuekh1n14dwcufmZ:~# ls
- tweb.war
- root@iZuf6axmuekh1n14dwcufmZ:~# docker inspect -f '{{.Id}}' tomcat2
- 91ebdd8d5c652b465cc15f86cdc1c41167e211aaae9f1e42ab1032e7db8d3854
- root@iZuf6axmuekh1n14dwcufmZ:~# docker cp tweb.war 91ebdd8d5c652b465cc15f86cdc1c41167e211aaae9f1e42ab1032e7db8d3854:usr/local/tomcat/webapps
- root@iZuf6axmuekh1n14dwcufmZ:~# docker exec -it tomcat2 /bin/bash
- root@91ebdd8d5c65:/usr/local/tomcat# ls
- LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
- root@91ebdd8d5c65:/usr/local/tomcat# cd webapps/
- root@91ebdd8d5c65:/usr/local/tomcat/webapps# ls
- ROOT docs examples host-manager manager tweb tweb.war
- root@91ebdd8d5c65:/usr/local/tomcat/webapps# exit
- exit
- root@iZuf6axmuekh1n14dwcufmZ:~#
- root@iZuf6axmuekh1n14dwcufmZ:~# docker restart tomcat2
- tomcat2
- root@iZuf6axmuekh1n14dwcufmZ:~# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 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
- 35350de323ca tomcat:latest "catalina.sh run"41 hours ago Up 44 minutes 0.0.0.0:8085->8080/tcp tweb_tomcat
- de67495c8a87 redis:latest "docker-entrypoint..."12 days ago Exited (255) 22 hours ago 0.0.0.0:6379->6379/tcp redis1
- 91ebdd8d5c65 tomcat:latest "catalina.sh run"2 weeks ago Up 28 seconds 0.0.0.0:8083->8080/tcp tomcat2
- f3b0f76293f9 tomcat:latest "catalina.sh run"2 weeks ago Exited (255) 16 hours ago 0.0.0.0:8080->8080/tcp tomcat1
- 4ce1634ce6f1 mysql:latest "docker-entrypoint..."6 weeks ago Exited (255) 16 hours ago 0.0.0.0:3306->3306/tcp mysql1
- root@iZuf6axmuekh1n14dwcufmZ:~# ^C