一、环境
本文假定:
1、OS是Centos7.4
2、Docker18.01.0
3、Rancher1.6.14
4、私服是Harbor
5、dubbo是dubbo-spring-boot-starter:1.0.0
二、dubbo程序
总共有两个核心项目,base、inf。base是dubbo服务提供者,inf是服务消费者,同时也是springmvc的http接口程序。另外还有api项目是接口类和工具类集合,parent是父项目。完整代码请见,下面列出核心代码。https:///shang7053/base/tree/master/dubbo-docker-parent
RC(restcontroller)
@RestController
@RequestMapping("test")
public class TestRc {
@Reference
private ITestService testService;
@RequestMapping("hello")
@ResponseBody
public String hello() {
return this.testService.test("inf run on " + IPUtil.getIp());
}
}
接口
public interface ITestService {
public String test(String str);
}
实现
@Service
public class TestServiceImpl implements ITestService {
/*
* (非 Javadoc) <p>Title: test</p> <p>Description: </p>
*
* @param str
*
* @return
*
* @see com.scc.dubbo.docker.api.service.ITestService#test(java.lang.String)
*/
@Override
public String test(String str) {
return str + " and base run on " + IPUtil.getIp();
}
}
通过访问http://hostname:port/test/hello,输出一段话,这段话类似
inf run on 10.42.242.44 and base run on 10.42.143.50
另外需要注意的是,配置依赖环境变量,本例中base以及inf依赖三个环境变量,分别是:
server_port=8080
dubbo.port=20880
dubbo.zk.address=172.16.40.4:2181,172.16.40.5:2181
三、创建&发布镜像
首先执行命令,将代码打包成jar包
mvn clean package
然后将base-0.0.1.jar和inf-0.0.1.jar上传到服务器(该服务必须安装Docker以及Harbor私服的证书),比如上传到/opt/soft文件夹下。
首先创建base镜像,在soft文件夹下创建Dockerfile文件,内容如下:
#基于java8镜像构建,该镜像从dockerhub随便找的,生产建议自己创建
FROM gonitro/java8
#切换镜像目录,进入/opt目录
WORKDIR /opt
#在/usr/下创建webapps目录,用来存放程序文件
RUN mkdir webapps
#将宿主机的程序文件拷至镜像的/opt/webapps目录下
ADD base-0.0.1.jar webapps
然后构建镜像
#注意最后一个点,代表Dockerfile的路径
docker build -t base:0.0.1 .
输出如下
docker build -t base:0.0.1 .
Sending build context to Docker daemon 20.45MB
Step 1/4 : FROM gonitro/java8
---> dab560f3e6fa
Step 2/4 : WORKDIR /opt
---> Using cache
---> 57c206f31357
Step 3/4 : RUN mkdir webapps
---> Using cache
---> df3240be3cf1
Step 4/4 : ADD base-0.0.1.jar webapps
---> Using cache
---> 48d8842b848c
Successfully built 48d8842b848c
Successfully tagged base:0.0.1
然后tag base:0.0.1并push到harbor上
docker tag inf:0.0.1 harbor.voole.com/library/base:0.0.1
docker push harbor.voole.com/library/base:0.0.1
在harbor的管理后台上即可看到
按照同样的步骤将inf打包到harbor上。
四、配置Rancher
打开RancherUI,进入Default环境。
首先创建一个应用,名称叫dubbo测试
然后进入应用首页,点击添加服务按钮。名称输入base,镜像输入
harbor.voole.com/library/base:0.0.1
端口映射只输入私有端口20880.然后在第三块,命令处输入
java -jar /opt/webapps/base-0.0.1.jar >/dev/null &
环境变量输入
server_port=8080
dubbo.port=20880
dubbo.zk.address=172.16.40.4:2181,172.16.40.5:2181
最后配置健康检查端口为20880,再点击创建即可。
同样的步骤创建inf服务,但需要注意的是,映射端口要输入8080,而不是20880,因为dubbo消费者不占用20880端口。
创建完base和inf之后,需要创建一个负载均衡,创建过程详见上一遍博文。下面展示最终的效果图
五、升级&验证
应用创建完成后,可能会对单个服务进行更新,比如更新base。
这时,按照第三节的步骤将新的base服务打成镜像并发布到harbor。然后登陆RancherUI找到base服务,点击最后面的升级按钮
升级页面分三块,第一块是优雅升级设置,可以设置一次升级多少个容器,并且可以设置批次的间隔等。第二块、第三块和创建时一样。如果版本号没变,进入升级页面直接点升级即可,如果版本变了,需要修改至对应的版本号,然后点升级。
点击升级后,耐心等待全部升级完成。
若此时发现程序有问题,可以点击回滚,回退到上一个镜像。若没有问题,需要点击一次升级完成,确认此次升级成果。
打开浏览器或者其他能够发送http请求的工具测试安装或升级成果,我这里使用postman,发送http://hostname:port/test/hello,结果如下: