资讯专栏INFORMATION COLUMN

市长信箱邮件查询服务: 将SpringBoot应用部署到Docker

SKYZACK / 1540人阅读

摘要:市长信箱邮件查询服务将应用部署到在上一章我完成了将部署到的工作和都具有能快速启动的特性因此是一对用来部署微服务的黄金搭档在计划中基于的应用也将部署到之上那我们就开始行动吧将部署到上需要执行以下步骤保证打包后的可执行能正常启动在应用中编写镜像

市长信箱邮件查询服务: 将SpringBoot应用部署到Docker

在上一章, 我完成了将ES部署到Docker的工作. SpringBoot和Docker都具有能快速启动的特性, 因此SpringBoot+Docker是一对用来部署微服务的黄金搭档. 在计划中, 基于SpringBoot的web应用也将部署到Docker之上, 那我们就开始行动吧.


将SpringBoot部署到Docker上,需要执行以下步骤:

保证SpringBoot打包后的可执行jar/war能正常启动

在SpringBoot应用中编写Dockerfile镜像的生成规则和启动规则,并部署镜像

在Docker中启动SpringBoot应用

保证SpringBoot打包后的可执行jar/war能正常启动

我的crawler-search-web工程默认打包出来的war文件, 直接使用java -jar的命令来启动的话会报错. 因为war包还不是一个可执行jar/war. 要让SpringBoot工程打出的包成为一个可执行jar/war,需要使用spring-boot-maven-plugin插件, 对包的内容进行修改,才能成为可执行的jar.要使用此插件, 只需在pom.xml添加以下内容:


    org.springframework.boot
    spring-boot-maven-plugin

验证SpringBoot能作为可执行jar正常启动:

mvn clean install
java -jar target/crawler-search-web-1.0-SNAPSHOT.war

执行java -jar命令后, 如果控制台没有异常, 那说明新打的war包可以作为一个可执行war部署到docker了.

异常情况

多模块的SpringBoot无法启动,提示"No qualifying bean of type ..."

可能是SpringBoot的bug(版本1.3.5): 通过自动扫描方式构建的bean, 如果没有处于启动类所在的包下面, 会无法构建.
比如我的服务类:MailService 所在的包:org.ybak.crawler.persistence.service 就没有在启动类WebApplication所在的包:org.ybak.crawler.web 下面, 启动时就会报错.
解决办法是将WebApplication移动到org.ybak.crawler包下面.

在SpringBoot应用中编写Dockerfile镜像的生成规则和启动规则,并部署镜像

这里使用docker-maven-plugin来进行镜像的生成规则和启动规则的设置,并通过这个插件将镜像部署到本地.docker-maven-plugin的配置如下:


    com.spotify
    docker-maven-plugin
    0.4.10
    
        ${docker.image.prefix}/${project.artifactId}
        frolvlad/alpine-oraclejdk8:slim
        sh -c "touch /${project.build.finalName}.war"
        ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/${project.build.finalName}.war"]
        
            
                /
                ${project.build.directory}
                ${project.build.finalName}.war
            
        
    

参数说明:
imageName: 生成的Docker镜像名称
baseImage: 同Dockerfile的FROM参数
cmd: 同Dockerfile的RUN参数
entryPoint: 同Dockerfile的ENTRYPOINT参数
resources: 生成docker镜像的资源文件

docker-maven-plugin也支持引入Dockerfile的方式进行镜像配置.这样的方式配置灵活性更高.具体方式可以参见官方文档.
配置完后, 执行:

mvn package docker:build

即可部署镜像.

在Docker中启动SpringBoot应用

部署完镜像后,执行以下命令即可启动应用:

docker run -p 8080:8080 -t ybak/crawler-search-web

参数说明:
-p: 端口映射, 同ES在Docker中部署一样, SpringBoot应用在Docker中部署后,我们也不能直接访问到服务, 需要做Docker容器端口映射到Docker宿主机上的端口
-t: 模拟一个tty窗口, 可中断程序执行

执行完后, 可以看到SpringBoot的启动日志, 任务完成.

参考:
https://spring.io/guides/gs/spring-boot-docker/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26593.html

相关文章

  • 市长信箱邮件查询服务: SpringBoot集成Docker上Redis服务

    摘要:集成上服务在我的应用中希望能使用一些的特性比如这样的数据结构如果能方便的在开发环境中使用起来就好了如何集成呢这里依然使用和来帮忙通过使用我们就能快速的部署好服务而通过使用我们能快速的把集成进我们的服务并能使用提供的模板方法方便的调用的使用快 SpringBoot集成Docker上Redis服务 在我的应用中, 希望能使用一些redis的特性:比如zset这样的数据结构,如果能方便的在开...

    lanffy 评论0 收藏0
  • 市长信箱邮件查询服务: 使用SpringBoot构建工程

    摘要:市长信箱邮件查询服务使用构建工程一直想用做个微服务练练手为后续部署到打下基础今天比较空闲就开始把部分想法落地了概览用来练手的应用是一个市长信箱的内容抓取与检索页面鉴于我的八卦特质总想了解下周边的一些投诉信息而成都的市长信箱是一个绝好的信息来 市长信箱邮件查询服务: 使用SpringBoot构建工程 一直想用SpringBoot做个微服务,练练手, 为后续部署到docker打下基础. 今...

    supernavy 评论0 收藏0
  • 市长信箱邮件查询服务: 在Docker上安装Elasticsearch集群作为服务

    摘要:市长信箱邮件查询服务在上安装作为一个服务在上一章我完成了替换的工作按照之前的计划现在是该把迁移到的时候了为什么要迁移到为后续展示的弹性做准备使用可以方便的部署多节点很火我开发机是要在上使用需要安装的原理就是在上安装一台虚拟机作为容器的宿 市长信箱邮件查询服务: 在Docker上安装Elasticsearch作为一个服务 在上一章,我完成了Elasticsearch替换Mysql的工作....

    why_rookie 评论0 收藏0

发表评论

0条评论

SKYZACK

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<