前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下docker制作springboot应用镜像

Linux下docker制作springboot应用镜像

作者头像
jinjunzhu
发布2020-08-20 15:40:43
3.8K0
发布2020-08-20 15:40:43
举报
文章被收录于专栏:个人开发个人开发

本文使用的工程代码地址:https://github.com/jinjunzhu/springboot-rabbitmq.git

之前的一篇文章《springboot研究五:springboot整合rabbitmq》有讲解,下面我分3步来讲解

1.打包工程

工程目录结构如下:web模块是集成模块。

在web目录下,执行打包命令打出jar包

代码语言:javascript
复制
mvn clean -Dmaven.test.skip=true install

因为依赖其他3个模块,所以需要分别在commons 、repository、service下面执行上面的打包命令。

注:mvn命令中package只打包不发布私服,install发布到本地私服,deploy同时发布到本地和远程私服。

2.打出web.jar包后,上传到Linux服务器,编写Dockerfile文件,内容如下:

代码语言:javascript
复制
FROM ascdc/jdk8
VOLUME /tmp
ADD web-1.0-SNAPSHOT.jar springboot-rabbitmq.jar
ENTRYPOINT ["java","-jar","springboot-rabbitmq.jar"]

上面代码中,第一行指定依赖的jdk镜像,docker打包的时候会自动拉取jdk镜像。第二行会在/var/lib/docker创建一个临时目录tmp,这个目录是springboot为Tomcat指定的运行目录。第三行为打出的jar包指定别名。第四行指定执行命令。

编写好Dockerfile文件后,Dockerfile文件和web.jar包放在同一个目录下,在这个目录下执行如下命令:注意,最后有个点

代码语言:javascript
复制
docker build -t jinjunzhu/rabbitmq:1.0 .

等待一段时间后,打包镜像成功,如下图:

执行docker images | grep jinjunzhu

可以看到打好的镜像了,但是镜像文件太大了,原因是jdk的镜像太大。我们换jdk镜像,修改Dockerfile文件第一行,如下所示

代码语言:javascript
复制
#FROM ascdc/jdk8
from openjdk:8-jdk-alpine
VOLUME /tmp
ADD web-1.0-SNAPSHOT.jar springboot-rabbitmq.jar
ENTRYPOINT ["java","-jar","springboot-rabbitmq.jar"]

再次执行 docker build -t jinjunzhu/rabbitmq:1.0 .命令。如下图:这一次的镜像小了很多

启动刚刚创建的镜像:

代码语言:javascript
复制
docker run -itd --name springboot-rabbitmq -p 8082:8082 d170dea75f29

可以看到输出:

b8a65d2eb6c8ff78c49b4aefb9cd453e03d0df80570d3534f275816f84706220

查看启动日志:

代码语言:javascript
复制
docker logs b8a65d2eb6c8ff78c49b4aefb9cd453e03d0df80570d3534f275816f84706220

在浏览器输入:http://192.168.59.131:8082/actuator/health,返回helloworld,可以启动成功。

浏览器输入http://192.168.59.131:8082/mq/direct返回500错误,这个url请求是向rabbitmq发送一条消息,docker logs查询日志:

可见,新构建的容器不能访问宿主机的rabbitmq服务。进入容器内部:

代码语言:javascript
复制
docker exec -it springboot-rabbitmq /bin/bash

telnet rabbitmq地址:telnet 192.168.59.131 5672,不通。网上找到了答案,应用对docker开启了防火墙,执行如下命令,对docker0开放5672端口,再次telnet就可以通了

代码语言:javascript
复制
firewall-cmd --permanent --zone=trusted --change-interface=docker0
firewall-cmd --reload

3.上传镜像到dockerhub

登录docker

代码语言:javascript
复制
docker login

依次输入用户名密码,然后执行如下命令等待上传完成。zjj2006forever是dockerhub用户名,spingboot-rabbitmq:1.0是镜像名称,这个名称跟之前的名称不一样,是我新打了一次镜像,命令在下面。

代码语言:javascript
复制
docker push zjj2006forever/spingboot-rabbitmq:1.0
docker build -t zjj2006forever/spingboot-rabbitmq:1.0 .
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 jinjunzhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档