本篇文章将总结如何使用Docker部署SpingCloud项目,这里的内容也是之前学习Docker时候自己花了不少时间一点一点摸索出来的,小伙伴们可以参考着自己操作一遍,期间肯定会踩坑,然后一个一个解决就学会了。
主要涉及到的服务有:
【a】 拉取java8镜像
docker pull java:8u11
docker images
【b】创建目录
sudo mkdir -p /myapp/eurekaserver
cd /myapp/eurekaserver/
【c】使用maven插件将项目打包成jar包
打包完成后,在项目根目录下target目录将刚刚打包的jar包拷贝到桌面备用,以此类推,将其他服务的jar也准备好. 如下图:
【d】将jar包上传到/myapp/eurekaserver目录中,使用xftp6将本地文件上传到服务器中内
【e】创建Dockerfile文件
vim Dockerfile
具体内容如下:
FROM java:8u111
MAINTAINER [email protected]
COPY ./eureka-server-0.0.1-SNAPSHOT.jar /eureka-server/eureka-server-0.0.1-SNAPSHOT.jar
COPY ./appstartup.sh /
RUN chmod +x /appstartup.sh
EXPOSE 1111
ENTRYPOINT ["/appstartup.sh"]
【f】创建可执行shell脚本appstartup.sh
vim appstartup.sh
输入执行脚本的内容:
#!/bin/bash
java -jar /eureka-server/eureka-server-0.0.1-SNAPSHOT.jar
【g】构建镜像
docker build -f ./Dockerfile -t eureka-server:1.0.0 .
【h】查看构建好的镜像
docker images;
【i】运行镜像容器实例
docker run --name eureka-server -p 1111:1111 eureka-server:1.0.0
【j】浏览器访问:http://192.168.72.128:1111/
可以看到成功运行了eurekaserver服务注册中心服务。
总体步骤跟上面部署服务注册中心的类似。
【a】首先,我们需要修改config-server服务的配置文件,将一些参数设置为可动态配置的。
【b】使用maven打包jar包
【c】在/myapp下新建configserver目录
进入configserver目录,拷贝打包之后的jar包进去。
【d】创建Dockerfile,具体文件内容:
FROM java:8u111
MAINTAINER [email protected]
COPY ./config-server-0.0.1-SNAPSHOT.jar /config-server/config-server-0.0.1-SNAPSHOT.jar
COPY ./appstartup.sh /
RUN chmod +x /appstartup.sh
ENTRYPOINT ["/appstartup.sh"]
【e】创建可执行脚本appstartup.sh
#!/bin/bash
java -jar -Dport=$PORT -DgitRepositoryUrl=$GIT_URL -DeurekaServerUrl=$EUREKA_SERVER_URL -DipAddress=$IPADDRESS /config-server/config-server-0.0.1-SNAPSHOT.jar
【f】构建镜像
docker build -f ./Dockerfile -t config-server:1.0.0 .
【g】运行容器
docker run --name config-server -p 4444:4444 -e PORT=4444 -e GIT_URL=https://gitee.com/weixiaohuai/config-server.git -e EUREKA_SERVER_URL=http://192.168.72.128:1111/eureka/ -e IPADDRESS=192.168.72.128 config-server:1.0.0
查看日志:
可见,配置服务也运行成功.
【h】浏览器访问http://192.168.72.128:1111/
可见config-server已经成功注册到服务注册中心。然后浏览器访问http://192.168.72.128:4444/apigateway-dev.yml,可见配置中心已经成功部署。
以相同的方式部署api-gateway网关服务、punishment-service服务、student-service服务。
(1)、部署api-gateway网关服务
【a】bootstrap.yml配置文件
【b】创建相关目录
mkdir api-gateway
cd /api-gateway
【c】将jar传输到服务器对应的目录
【d】创建Dockerfile,文件内容如下
FROM java:8u111
MAINTAINER [email protected]
COPY ./api-gateway-0.0.1-SNAPSHOT.jar /api-gateway/api-gateway-0.0.1-SNAPSHOT.jar
COPY ./appstartup.sh /
RUN chmod +x /appstartup.sh
ENTRYPOINT ["/appstartup.sh"]
【e】创建启动脚本appstartup.sh
#!/bin/bash
java -jar -Dport=$PORT -DeurekaServerUrl=$EUREKA_SERVER_URL -DipAddress=$IPADDRESS /api-gateway/api-gateway-0.0.1-SNAPSHOT.jar
【f】构建对应的镜像
docker build -f ./Dockerfile -t api-gateway:1.0.0 .
【g】运行对应的镜像
docker run --name api-gateway -p 5555:5555 -e PORT=5555 -e EUREKA_SERVER_URL=http://192.168.72.128:1111/eureka/ -e IPADDRESS=192.168.72.128 api-gateway:1.0.0
启动日志:
【h】访问Eureka服务注册中心http://192.168.72.128:1111/
可见,网关服务也成功注册到Eureka上。
(2)、部署pinishment-service业务服务
【a】bootstrap.yml配置文件
【b】创建对应的目录
【c】将对应的jar传输到服务器对应目录中
【d】创建Dockerfile
FROM java:8u111
MAINTAINER [email protected]
COPY ./punishment-service-0.0.1-SNAPSHOT.jar /punishment-service/punishment-service-0.0.1-SNAPSHOT.jar
COPY ./appstartup.sh /
RUN chmod +x /appstartup.sh
ENTRYPOINT ["/appstartup.sh"]
【e】创建启动脚本appstartup.sh
#!/bin/bash
java -jar -Dport=$PORT -DeurekaServerUrl=$EUREKA_SERVER_URL -DipAddress=$IPADDRESS /punishment-service/punishment-service-0.0.1-SNAPSHOT.jar
【f】构建镜像
docker build -f ./Dockerfile -t punishment-service:1.0.0 .
【g】运行容器
docker run --name punishment-service -p 2222:2222 -e PORT=2222 -e EUREKA_SERVER_URL=http://192.168.72.128:1111/eureka/ -e IPADDRESS=192.168.72.128 punishment-service:1.0.0
启动日志:
访问 Eureka服务注册中心:http://192.168.72.128:1111/,如下图:
可见,punishmentService也成功注册到Eureka中。
(3)、部署student-service业务服务
【a】bootstrap.yml配置文件
【b】打包jar
【c】上传jar到服务器中
【d】创建Dockerfile
FROM java:8u111
MAINTAINER [email protected]
COPY ./student-service-0.0.1-SNAPSHOT.jar /student-service/student-service-0.0.1-SNAPSHOT.jar
COPY ./appstartup.sh /
RUN chmod +x /appstartup.sh
ENTRYPOINT ["/appstartup.sh"]
【e】创建启动脚本appstartup.sh
#!/bin/bash
java -jar -Dport=$PORT -DeurekaServerUrl=$EUREKA_SERVER_URL -DipAddress=$IPADDRESS /student-service/student-service-0.0.1-SNAPSHOT.jar
【f】构建镜像
docker build -f ./Dockerfile -t student-service:1.0.0 .
【g】运行容器
docker run --name student-service -p 3333:3333 -e PORT=3333 -e EUREKA_SERVER_URL=http://192.168.72.128:1111/eureka/ -e IPADDRESS=192.168.72.128 student-service:1.0.0
启动日志:
访问 Eureka服务注册中心:http://192.168.72.128:1111/,如下图:
可见,student-service对外提供服务的服务也成功注册上Eureka。
至此,五个相关的服务都部署成功了,所有服务都成功注册上Eureka中,如下图:
下面我们进行测试,浏览器访问,
http://192.168.72.128:5555/punishment/getViolationDetail/1
访问结果:
可见,接口通过网关请求转发到后端具体的服务中,并且请求时成功的。
接着我们尝试直接请求对应后端接口:
http://192.168.72.128:2222/getViolationDetail/1
访问结果:
http://192.168.72.128:3333/getStudentDetail/1
访问结果:
可见,studentService调用接口也是成功的,自此我们通过Docker部署了一个比较简单的SpringCloud微服务环境,实际项目中大体流程也是类似的。
本文是之前笔者学习Docker时弄的一个小练习,小伙伴们一定要亲自自己动手去实现,期间肯定会遇到很多问题,就像笔者一样,当时遇到很多问题,但都一个一个解决完了,最终才成功的,这个小案例能有效地加深我们对Docker知识的应用和实践。