Linux下docker制作springboot应用镜像

时间:2022-07-23
本文章向大家介绍Linux下docker制作springboot应用镜像,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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

1.打包工程

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

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

mvn clean -Dmaven.test.skip=true install

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

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

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

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包放在同一个目录下,在这个目录下执行如下命令:注意,最后有个点

docker build -t jinjunzhu/rabbitmq:1.0 .

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

执行docker images | grep jinjunzhu

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

#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 .命令。如下图:这一次的镜像小了很多

启动刚刚创建的镜像:

docker run -itd --name springboot-rabbitmq -p 8082:8082 d170dea75f29

可以看到输出:

b8a65d2eb6c8ff78c49b4aefb9cd453e03d0df80570d3534f275816f84706220

查看启动日志:

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服务。进入容器内部:

docker exec -it springboot-rabbitmq /bin/bash

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

firewall-cmd --permanent --zone=trusted --change-interface=docker0
firewall-cmd --reload

3.上传镜像到dockerhub

登录docker

docker login

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

docker push zjj2006forever/spingboot-rabbitmq:1.0
docker build -t zjj2006forever/spingboot-rabbitmq:1.0 .