之前做的一个SpringBoot项目,在本地电脑上,将其打包成jar包后,仅需启动Redis服务端,该项目就可正常运行起来。
下面,利用Docker将它部署起来,并运行,看看效果。
需要做的工作:
- 下载Redis3.2.10版本的镜像
- 自制SpringBoot项目镜像
(1)指令详情
# 1、拉取redis3.2.10镜像 docker pull redis:3.2.10 # 2、创建redis的挂载目录 mkdir /usr/local/redis/conf mkdir /usr/local/redis/data # 3、在/usr/local/redis/conf下新建配置文件redis.conf vim redis.conf # redis.conf文件内容参考以下地址 https://blog.csdn.net/qq_20156289/article/details/109465873 # 4、运行redis镜像,启动容器,端口设置为6379 docker run -d -p 6379:6379 -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/etc/redis/data --name redis-for-springboot redis:3.2.10 redis-server /etc/redis/redis.conf --appendonly yes
(2)执行过程
3. 自制SpringBoot项目镜像(1)步 骤
# 1、新建一个目录存放jar包及Dockerfile文件 mkdir /usr/local/springboot # 2、将jar包上传到上面的目录中 使用xftp将打包好的jar包上传至/usr/local/springboot # 3、编写Dockerfile文件 vim Dockerfile # 文件内容 # base jdk11 # base jdk11 FROM openjdk:11 MAINTAINER yuhuofei2021<*****@qq.com> VOLUME /tmp ADD spring-boot-weather-0.0.1-SNAPSHOT.jar /usr/local/springboot/app.jar ENTRYPOINT ["nohup","java","-jar","/usr/local/springboot/app.jar","&"] EXPOSE 8080 # 4、docker build创建镜像 docker build -t spring-boot-weather .
(2)构建过程及结果
(3)运行spring-boot-weather镜像,启动容器
# 运行指令 docker run -d -p 8088:8080 --name weather-report spring-boot-weather4. 测试项目
(1)访问测试
在浏览器中访问地址:http://192.168.125.128:8088/report/cityId/101280601,结果页面报错
(2)排查问题
报的是500,说明能访问到SpringBoot项目所在的容器,但是处理出错了。猜测原因可能是,因为Redis部署在一个容器,而SpringBoot项目部署在另外一个容器,SpringBoot项目无法访问到Redis导致。
我们ping一下两个容器之间的连通性。
# 进入到SpringBoot容器中,ping一下Redis的ip ping 172.17.0.2
# 进入到Redis容器中,ping一下SpirngBoot项目的ip ping 172.17.0.3
可以看到,两个容器之间的连通性是没有问题的,都处在同一个网段,都能互相连通,说明前面的猜测不成立。
接下来查看一下日志,看看具体报错详情。
# 查看日志指令 docker logs -f -t 1a4a7fda0da1
日志的结果表明,SpringBoot项目访问的Redis地址是localhost:6379,而在Redis容器的/etc/hosts文件中,localhost绑定的ip的是127.0.0.1,所以自然无法访问成功。
(3)问题整改
我们把SpringBoot项目中关于Redis的ip配置从localhost改为当前Redis容器所在ip:172.17.0.2,重新打包SpringBoot镜像,再运行,下面是效果图
Docker部署SpringBoot项目整个流程,大体就是上面这样!



