在上一章, 我完成了將ES部署到Docker的工做. SpringBoot和Docker都具備能快速啓動的特性, 所以SpringBoot+Docker是一對用來部署微服務的黃金搭檔. 在計劃中, 基於SpringBoot的web應用也將部署到Docker之上, 那咱們就開始行動吧.java
將SpringBoot部署到Docker上,須要執行如下步驟:git
保證SpringBoot打包後的可執行jar/war能正常啓動github
在SpringBoot應用中編寫Dockerfile鏡像的生成規則和啓動規則,並部署鏡像web
在Docker中啓動SpringBoot應用spring
個人crawler-search-web工程默認打包出來的war文件, 直接使用java -jar的命令來啓動的話會報錯. 由於war包還不是一個可執行jar/war. 要讓SpringBoot工程打出的包成爲一個可執行jar/war,須要使用spring-boot-maven-plugin插件, 對包的內容進行修改,才能成爲可執行的jar.要使用此插件, 只需在pom.xml添加如下內容:docker
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
驗證SpringBoot能做爲可執行jar正常啓動:shell
mvn clean install java -jar target/crawler-search-web-1.0-SNAPSHOT.war
執行java -jar命令後, 若是控制檯沒有異常, 那說明新打的war包能夠做爲一個可執行war部署到docker了.oracle
多模塊的SpringBoot沒法啓動,提示"No qualifying bean of type ..."dom
多是SpringBoot的bug(版本1.3.5): 經過自動掃描方式構建的bean, 若是沒有處於啓動類所在的包下面, 會沒法構建.
好比個人服務類:MailService 所在的包:org.ybak.crawler.persistence.service 就沒有在啓動類WebApplication所在的包:org.ybak.crawler.web 下面, 啓動時就會報錯.
解決辦法是將WebApplication移動到org.ybak.crawler包下面.maven
這裏使用docker-maven-plugin來進行鏡像的生成規則和啓動規則的設置,並經過這個插件將鏡像部署到本地.docker-maven-plugin的配置以下:
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.10</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <baseImage>frolvlad/alpine-oraclejdk8:slim</baseImage> <cmd>sh -c 'touch /${project.build.finalName}.war'</cmd> <entryPoint>["java","-Djava.security.egd=file:/dev/./urandom","-jar","/${project.build.finalName}.war"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.war</include> </resource> </resources> </configuration> </plugin>
參數說明:
imageName: 生成的Docker鏡像名稱
baseImage: 同Dockerfile的FROM參數
cmd: 同Dockerfile的RUN參數
entryPoint: 同Dockerfile的ENTRYPOINT參數
resources: 生成docker鏡像的資源文件
docker-maven-plugin也支持引入Dockerfile的方式進行鏡像配置.這樣的方式配置靈活性更高.具體方式能夠參見官方文檔.
配置完後, 執行:
mvn package docker:build
便可部署鏡像.
部署完鏡像後,執行如下命令便可啓動應用:
docker run -p 8080:8080 -t ybak/crawler-search-web
參數說明:
-p: 端口映射, 同ES在Docker中部署同樣, SpringBoot應用在Docker中部署後,咱們也不能直接訪問到服務, 須要作Docker容器端口映射到Docker宿主機上的端口
-t: 模擬一個tty窗口, 可中斷程序執行
執行完後, 能夠看到SpringBoot的啓動日誌, 任務完成.