本文使用的工程代码地址: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 .