docker微服务部署之:五、利用DockerMaven插件自动构建镜像
Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
Rancher官网: https://rancher.com
在浏览器中输入:http://192.168.31.181:8080,如果能打开欢迎页,表示安装成功。(提示:rancher的启动会有点慢,可能需要等一会儿)
全是英文,看不懂?没关系,可以点击右下键的English,选择语言为简体中文。
Rancher的作用就是用来管理Docker容器的环境。可以通过Rancher的环境管理,来管理不同团队的Docker环境。每套Ranhcer环境之间,都是隔离的,相互之间没有影响。
点击顶部导航栏的Default,点击环境管理
进入了环境管理界面,点击添加环境
打开了添加环境界面,输入相应名称和描述,并选择环境模板,最后点击创建,完成环境的添加。
在环境列表界面,可以看到已经创建好了一个名为test的环境,并且该环境已经完成了启动。
首先切换到刚创建的test环境。点击顶部导航栏的Default,点击test
打开了test中的用户应用管理界面
切换到了test环境,那个该环境,rancher需要管理哪台主机docker中的微服务呢?这就是这一步需要做的事情。
点击顶部导航栏中的基础架构,点击主机
进入了主机列表界面,点击添加主机
进入添加主机界面,(如果是新安装的rancher,没有进行过配置,可能会出现类似如下界面,看看当前站点地址是否为需要被管理的docker的主机的ip地址,如果是,直接点击下面的保存即可。)
进入了添加主机界面,在4处输入需要管理的docker的主机IP地址,然后点击5处的复制按钮,把复制之后的代码脚本,在填入的主机中执行,执行完成之后,点击关闭按钮,完成主机的添加操作。
复制的代码脚本是干嘛的呢?其实就是在docker主机中,安装rancher的代理,以便让rancher可以管理docker。
附上执行上面复制的代码脚本过程
点击关闭之后,可能需要等待一点点时间,就可以看到在主机列表界面,看到连上了我们刚添加的192.168.31.181主机。
可以看到主机已经出去可用状态(ACTIVE),并且可以看到主机的一些信息,如操作系统,ip地址,内存一级硬盘等等,还有容器中的服务,以及这些服务的状态。
上面已经做了这么多,那么如何把自己的服务部署到docker中。
服务都是放在应用中,所以需要先创建一个应用。
创建应用的步骤如下:
首先,点击顶部导航栏中的应用,点击全部
打开应用列表管理界面,可以看到有4个应用,就是刚刚执行复制的代码脚本,在docker中运行了这4个应用。并且该4个应用最前面的图标都是绿色的,表示处于运行状态。
点击添加应用,给应用取个名字,并添加描述,然后点击创建,完成应用的添加操作
进入microservice服务管理界面
把自己的微服务都部署到相应的应用中,便于管理。下面演示如何添加服务到应用中。
=================================================================
提示:
由于下面要演示添加docker微服务部署前面的章节中的eureka、article、zuul服务,如果是按照前面章节一章一章操作的同学,可能现在docker中已经有正在运行的eureka、article和zuul服务。为了和下面要演示的内容有冲突,故需要把这三个服务停止掉,并删除,只保留镜像。 删除的步骤为:
=================================================================
添加第一个服务:eureka服务。
在上面的最后一个界面,也就是microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入eureka,因为名为eureka的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个7000位主机公开端口,第二个7000位私有容器端口。
最后滚动到页面最下面,点击创建,完成eureka服务的创建。
回到microservice应用的服务列表管理界面,可以看到eureka已经启动。可点击最右边竖着的...,然后进行升级镜像,重启、停止、删除服务操作等。
可在浏览器中访问http://192.168.31.181:7000/访问eureka服务
在microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入article,因为名为article的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个9001位主机公开端口,第二个9001位私有容器端口。
最后滚动到页面最下面,点击创建,完成article服务的创建。
回到microservice应用的服务列表管理界面,可以看到article已经启动。(因为article中需要访问mysql,如果mysql服务没有部署,或者mysql中没有相应的数据库等,出启动报错,然后一直循环启动,如下图所示)
可点击服务名article,进入article服务详情页面,点击article的容器标签,在article的状态为Running状态下,点击右边竖着的...,然后点击查看日志,如图:
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server”,拿去百度一下,发现都是一堆让你修改Mysql的连接时间之类的,这些答案简直就是瞎扯。
原因很简单,就是因为mysql服务没有启动。(以上是为了演示当添加服务启动失败时,如何查看日志)。
此时再来microservice应用的服务列表管理界面,可以看到article已经启动成功了。
看看eureka管理界面中,article服务是否已经注册上来
也可通过浏览器访问article服务
在microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入zuul,应为名为zuul的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个9001位主机公开端口,第二个9001位私有容器端口。
最后滚动到页面最下面,点击创建,完成zuul服务的创建。
回到microservice应用的服务列表管理界面,可以看到zuul已经启动。
看看eureka管理界面中,zuul服务是否已经注册上来
也可通过zuul的网关代理,来访问article服务
上面我们已经把eureka、article、zuul三个服务,都移植到了通过rancher来管理。唯独剩下一个mysql服务,然后也在被rancher管理,但是没有放到rancher的某个应用中,如果是多数据源系统,则不同的应用需要不同的数据库。
刚说了mysql也被rancher管理,怎么没看到呢?其实就是在主机里,下面的独立容器中,可以看到mysql服务,该mysql服务,和应用中的服务是一样的,都可方便的进行操作,和查看日志等等。
那么如何把mysql也放到应用中呢?(目的是为了演示如何在添加服务时,配置环境变量)
注意:删除mysql之前,记得把mysql中的数据先导出来,备份一下(可使用Navicat工具,连接数据库,导出结构和数据)。
可通过点击上图中mysql后面竖着的三点来选择停止和删除,也可通过如下命令进行停止和删除。
然后点击顶部导航栏中的应用,选择全部,回到全部应用列表管理界面
可点击添加服务,(和点击microservice进入microservice应用的服务列表管理界面,再点击添加服务,效果是一样的)
进入添加服务界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入centos/mysql-57-centos7,因为我pull下来的不是名为mysql的镜像,而是pull的一个名为centos/mysql-57-centos7的mysql镜像。而且该centos/mysql-57-centos7的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个3306位主机公开端口,第二个3306位私有容器端口。
在命令标签页,环境变量处,点击添加环境变量,把MYSQL_ROOT_PASSWORD=123456粘贴进去。
最后点击创建,完成mysql服务的创建。
回到microservice应用的服务列表管理界面,可以看到mysql已经启动。
如果我们此时再访问article服务,会发现访问不了,出现500错误。
我们点击article进入article服务,查看article运行日志,可以看到原来是无法连接docker数据库
通过Naticat软件,是可以连接到该mysql服务的,但是该数据库里,却没了我们的数据库docker,以及相关的表和数据(这也就是为什么让大家在删除前先备份的原因)。
推荐使用这种外部工具导入的方式,回复数据库中数据。
除上诉方式外,也可通过点击mysql服务,选择容器标签,然后点击后面竖着的三点,点击执行命令行(该中方式会有问题,具体什么问题,接着往下看)
然后在打开的黑乎乎的命令行界面,执行如下命令:
界面如下图所示:
注意:该命令行模式,不支持中文输入,所以,上面的insert语句中的content字段的内容“部署微服务”,被自动替换为空。以上演示,主要是告诉大家如何在rancher中使用命令行,以及需要注意的地方。
到此,docker数据库已经创建好了,并有了相应数据,此时,我们再来刷新article服务看看:
好了,到此,把手动创建服务,改造成在rancher中创建服务,已经完成。
docker微服务部署之:七、Rancher进行微服务扩容和缩容