docker微服务部署之:六、Rancher管理部署微服务
docker微服务部署之:五、利用DockerMaven插件自动构建镜像
一、 什么是Rancher
Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
Rancher官网:https://rancher.com
二、Docker中下载Rancher镜像并运行
- #Rancher镜像下载
- $ sudo docker pull rancher/server
- $ sudo docker images | grep rancher/server
- rancher/server latest aff17b0067db second ago .09GB
- #Rancher安装
- docker run -d --name=rancher -p : rancher/server
在浏览器中输入:http://192.168.31.181:8080,如果能打开欢迎页,表示安装成功。(提示:rancher的启动会有点慢,可能需要等一会儿)
全是英文,看不懂?没关系,可以点击右下键的English,选择语言为简体中文。
三、Rancher环境管理
Rancher的作用就是用来管理Docker容器的环境。可以通过Rancher的环境管理,来管理不同团队的Docker环境。每套Ranhcer环境之间,都是隔离的,相互之间没有影响。
3.1. 添加环境
点击顶部导航栏的Default,点击环境管理
进入了环境管理界面,点击添加环境
打开了添加环境界面,输入相应名称和描述,并选择环境模板,最后点击创建,完成环境的添加。
在环境列表界面,可以看到已经创建好了一个名为test的环境,并且该环境已经完成了启动。
3.2.在环境中,管理docker中的微服务
首先切换到刚创建的test环境。点击顶部导航栏的Default,点击test
打开了test中的用户应用管理界面
四、配置主机
切换到了test环境,那个该环境,rancher需要管理哪台主机docker中的微服务呢?这就是这一步需要做的事情。
点击顶部导航栏中的基础架构,点击主机
进入了主机列表界面,点击添加主机
进入添加主机界面,(如果是新安装的rancher,没有进行过配置,可能会出现类似如下界面,看看当前站点地址是否为需要被管理的docker的主机的ip地址,如果是,直接点击下面的保存即可。)
进入了添加主机界面,在4处输入需要管理的docker的主机IP地址,然后点击5处的复制按钮,把复制之后的代码脚本,在填入的主机中执行,执行完成之后,点击关闭按钮,完成主机的添加操作。
复制的代码脚本是干嘛的呢?其实就是在docker主机中,安装rancher的代理,以便让rancher可以管理docker。
附上执行上面复制的代码脚本过程
- $ sudo docker run -e CATTLE_AGENT_IP="192.168.31.181" --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.31.181:8080/v1/scripts/41FD60E2D772FF772A69:1546214400000:Z2mxv2DC4Id5S34xJIgZaokUpoY
- INFO: Running Agent Registration Process, CATTLE_URL=http://192.168.31.181:8080/v1
- INFO: Attempting to connect to: http://192.168.31.181:8080/v1
- INFO: http://192.168.31.181:8080/v1 is accessible
- INFO: Configured Host Registration URL info: CATTLE_URL=http://192.168.31.181:8080/v1 ENV_URL=http://192.168.31.181:8080/v1
- INFO: Inspecting host capabilities
- INFO: Boot2Docker: false
- INFO: Host writable: true
- INFO: Token: xxxxxxxx
- INFO: Running registration
- INFO: Printing Environment
- INFO: ENV: CATTLE_ACCESS_KEY=A2ED98628633A662C191
- INFO: ENV: CATTLE_AGENT_IP=192.168.31.181
- INFO: ENV: CATTLE_HOME=/var/lib/cattle
- INFO: ENV: CATTLE_REGISTRATION_ACCESS_KEY=registrationToken
- INFO: ENV: CATTLE_REGISTRATION_SECRET_KEY=xxxxxxx
- INFO: ENV: CATTLE_SECRET_KEY=xxxxxxx
- INFO: ENV: CATTLE_URL=http://192.168.31.181:8080/v1
- INFO: ENV: DETECTED_CATTLE_AGENT_IP=172.17.0.1
- INFO: ENV: RANCHER_AGENT_IMAGE=rancher/agent:v1.2.11
- INFO: Launched Rancher Agent: fea792c5f8413fece7c635f4feaf7127f62911cfb1ef44b38fe0aa5323aba473
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- zuul latest ffed513f7188 hours ago 642MB
- article latest b80e1550a5ce hours ago 651MB
- eureka latest 9b410097b49e hours ago 645MB
- jdk1. latest 1f2578d93bd0 days ago 598MB
- centos centos7 9f38484d220f days ago 202MB
- centos/mysql--centos7 latest ee80146ff512 weeks ago 453MB
- rancher/server latest aff17b0067db weeks ago .09GB
- rancher/scheduler v0.8.6 fbedeaddc3e9 weeks ago 248MB
- rancher/agent v1.2.11 1cc7591af4f5 months ago 243MB
- rancher/net v0.13.17 f170c38e3763 months ago 311MB
- rancher/dns v0.17.4 678bde0de4d2 months ago 249MB
- rancher/healthcheck v0.3.8 ce78cf69cc0b months ago 391MB
- rancher/metadata v0.10.4 02104eb6e270 months ago 251MB
- rancher/network-manager v0.7.22 13381626c510 months ago 256MB
- rancher/net holder 665d9f6e8cc1 months ago 267MB
点击关闭之后,可能需要等待一点点时间,就可以看到在主机列表界面,看到连上了我们刚添加的192.168.31.181主机。
可以看到主机已经出去可用状态(ACTIVE),并且可以看到主机的一些信息,如操作系统,ip地址,内存一级硬盘等等,还有容器中的服务,以及这些服务的状态。
五、往Docker主机中添加应用
上面已经做了这么多,那么如何把自己的服务部署到docker中。
服务都是放在应用中,所以需要先创建一个应用。
创建应用的步骤如下:
首先,点击顶部导航栏中的应用,点击全部
打开应用列表管理界面,可以看到有4个应用,就是刚刚执行复制的代码脚本,在docker中运行了这4个应用。并且该4个应用最前面的图标都是绿色的,表示处于运行状态。
点击添加应用,给应用取个名字,并添加描述,然后点击创建,完成应用的添加操作
进入microservice服务管理界面
六、添加服务
把自己的微服务都部署到相应的应用中,便于管理。下面演示如何添加服务到应用中。
=================================================================
提示:
由于下面要演示添加docker微服务部署前面的章节中的eureka、article、zuul服务,如果是按照前面章节一章一章操作的同学,可能现在docker中已经有正在运行的eureka、article和zuul服务。为了和下面要演示的内容有冲突,故需要把这三个服务停止掉,并删除,只保留镜像。 删除的步骤为:
- 先通过docker ps -a查看容器中的所有服务,在NAMES下查看是否有eureka等服务,STATUS为该服务对应的状态(UP为正在运行,Exited为已经停止)
- 通过docker stop xx(xx为上一步中NAMES中的名称),停止正在运行的服务。
- 最后通过docker rm xx(xx为第1步中NAMES的名称),删除服务。
=================================================================
6.1 添加eureka服务
添加第一个服务:eureka服务。
在上面的最后一个界面,也就是microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入eureka,因为名为eureka的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个7000位主机公开端口,第二个7000位私有容器端口。
最后滚动到页面最下面,点击创建,完成eureka服务的创建。
回到microservice应用的服务列表管理界面,可以看到eureka已经启动。可点击最右边竖着的...,然后进行升级镜像,重启、停止、删除服务操作等。
可在浏览器中访问http://192.168.31.181:7000/访问eureka服务
6.2 添加aritcle服务
在microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入article,因为名为article的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个9001位主机公开端口,第二个9001位私有容器端口。
最后滚动到页面最下面,点击创建,完成article服务的创建。
回到microservice应用的服务列表管理界面,可以看到article已经启动。(因为article中需要访问mysql,如果mysql服务没有部署,或者mysql中没有相应的数据库等,出启动报错,然后一直循环启动,如下图所示)
可点击服务名article,进入article服务详情页面,点击article的容器标签,在article的状态为Running状态下,点击右边竖着的...,然后点击查看日志,如图:
如果此时,你把上面的错误:“Communications link failure”和“The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server”,拿去百度一下,发现都是一堆让你修改Mysql的连接时间之类的,这些答案简直就是瞎扯。
原因很简单,就是因为mysql服务没有启动。(以上是为了演示当添加服务启动失败时,如何查看日志)。
- $ sudo docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- ...
- 652a36962b86 centos/mysql--centos7 "container-entrypoin…" days ago Exited () hours ago mysql
...
# 可以看到myql的STATUS为Exited(0)表示没有启动,下面启动mysql
$ sudo docker start mysql
mysql
此时再来microservice应用的服务列表管理界面,可以看到article已经启动成功了。
看看eureka管理界面中,article服务是否已经注册上来
也可通过浏览器访问article服务
6.3 添加zuul服务
在microservice应用的服务列表管理界面,点击添加服务,打开服务编辑界面
配置详解:
名称、描述,都是rancher中标识用的。
选择镜像输入zuul,应为名为zuul的镜像,已经在镜像本地仓库(docker images中可以查看到),所以取消创建前总是拉去镜像的勾选。
点击添加映射端口,第一个9001位主机公开端口,第二个9001位私有容器端口。
最后滚动到页面最下面,点击创建,完成zuul服务的创建。
回到microservice应用的服务列表管理界面,可以看到zuul已经启动。
看看eureka管理界面中,zuul服务是否已经注册上来
也可通过zuul的网关代理,来访问article服务
6.4 添加mysql服务(可选步骤,但推荐观看,学习下rancher中,添加服务时,如何配置环境变量,以及在容器中执行命令行)
上面我们已经把eureka、article、zuul三个服务,都移植到了通过rancher来管理。唯独剩下一个mysql服务,然后也在被rancher管理,但是没有放到rancher的某个应用中,如果是多数据源系统,则不同的应用需要不同的数据库。
刚说了mysql也被rancher管理,怎么没看到呢?其实就是在主机里,下面的独立容器中,可以看到mysql服务,该mysql服务,和应用中的服务是一样的,都可方便的进行操作,和查看日志等等。
那么如何把mysql也放到应用中呢?(目的是为了演示如何在添加服务时,配置环境变量)
可以看到mysql当前处于启动状态,首先我们需要把该mysql服务停止并删除掉。注意:删除mysql之前,记得把mysql中的数据先导出来,备份一下(可使用Navicat工具,连接数据库,导出结构和数据)。
可通过点击上图中mysql后面竖着的三点来选择停止和删除,也可通过如下命令进行停止和删除。
- $ sudo docker stop mysql
- $ sudo docker rm 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,以及相关的表和数据(这也就是为什么让大家在删除前先备份的原因)。
我们通过Naticat新建一个数据库docker,字符集为utf8,排序规则为utf8_general_ci,创建好数据库之后。在数据库docker下,在表上右键,选择运行SQL文件,在打开的窗口中,选择前面备份的docker.sql文件,然后点击开始即可。推荐使用这种外部工具导入的方式,回复数据库中数据。
除上诉方式外,也可通过点击mysql服务,选择容器标签,然后点击后面竖着的三点,点击执行命令行(该中方式会有问题,具体什么问题,接着往下看)
然后在打开的黑乎乎的命令行界面,执行如下命令:
- mysql -u root -p
- #在出现Enter password:时,按回车,连接mysql数据库,进入mysql>命令行模式
- #查看当前所有数据库,发现并没有一个名为docker的数据库
- show databases;
- #创建docker数据库,指定字符集和排序规则
- create database docker default character set utf8 collate utf8_general_ci;
- #选择docker数据库
- use docker;
- #创建tb_article表
- CREATE TABLE `tb_article` (
- `id` int() NOT NULL AUTO_INCREMENT,
- `title` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
- `author` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
- `add_time` datetime() NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE
- ) ENGINE = MyISAM AUTO_INCREMENT = CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- #插入数据INSERT INTO `tb_article` VALUES (, 'docker', '部署微服务', 'tom', '2019-03-20 08:00:00');
界面如下图所示:
注意:该命令行模式,不支持中文输入,所以,上面的insert语句中的content字段的内容“部署微服务”,被自动替换为空。以上演示,主要是告诉大家如何在rancher中使用命令行,以及需要注意的地方。
到此,docker数据库已经创建好了,并有了相应数据,此时,我们再来刷新article服务看看:
好了,到此,把手动创建服务,改造成在rancher中创建服务,已经完成。
docker微服务部署之:七、Rancher进行微服务扩容和缩容
docker微服务部署之:六、Rancher管理部署微服务的更多相关文章
- openstack(Pike 版)集群部署(六)--- Horizon 部署
一.介绍 参照官网部署:https://docs.openstack.org/horizon/pike/install/ 继续上一博客进行部署:http://www.cnblogs.com/we ...
- 微服务实战(六):选择微服务部署策略 - DockOne.io
原文:微服务实战(六):选择微服务部署策略 - DockOne.io [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同 ...
- 微服务架构下分布式Session管理
转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...
- Docker 入门 第六部分:部署app
目录 Docker 入门 第六部分:部署app 先决条件 介绍 选择一个选项 Docker CE(Cloud provider) Enterprise(Cloud provider)这里不做介绍 En ...
- 安装配置Rancher管理docker
原文:安装配置Rancher管理docker 版权声明:本文为博主原创文章,转载请注明地址http://blog.csdn.net/tianyaleixiaowu. https://blog.csdn ...
- Docker学习笔记_04 Rancher的部署安装(编排选用K8S)
原文地址:http://dbase.cc/2018/01/12/docker/04_rancher的部署安装/ 为什么要使用Rancher Rancher是一个开源的企业级容器管理平台.通过Ranch ...
- 庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署
庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署 一.简介 从今天开始,不出意外的话,以后所写的文章中所介绍项目的部署环境都应该会迁移到Linux环境上,而且是 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护
dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关 ...
- Docker_使用Rancher管理docker(7)
一.简介 Rancher是一个开源的企业级全栈化容器部署及管理平台.Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务.存储服务.主机管理.负载均衡.防护墙--Rancher让上述服务跨 ...
随机推荐
- system v消息队列demo(未编译)
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> ...
- div和span元素的区别
2个都是用来划分区间但是没有实际语义的标签,差别就在于div是块级元素,不会其他元素在同一行;span是内联元素,可以与其他元素位于同一行. DIV 和 SPAN 元素最大的特点是默认都没有对元素内的 ...
- 2018.08.04 洛谷P3380 【模板】二逼平衡树(树套树)
传送门 技不如人,写的权值线段树套线段树在bzoj上无论如何都卡不过空间. 这是一道树套树简单题,感觉没什么好说的. 直接权值线段树套平衡树就行了. 代码: #include<bits/stdc ...
- S4 exercise -- 模块
写一个用户登录验证程序,文件如下1234.json {"expire_date": "2021-01-01", "id": 1234, &q ...
- 端口模式(IN,OUT,INOUT,BUFFER)
in: OUT: INOUT: BUFFER:缓冲模式,与OUT类似可作为输出使用,但也可把输出的信号作为输入使用.
- spring mvc与mybatis整合错误提示
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L ...
- IFNULL函数
MySQL函数里有一个很有用的函数IFNULL,它的形式是IFNULL(fieldA,fieldB),意义是当字段fieldA是NULL时取fieldB,不是NULL时取fieldA的值. 这个函数与 ...
- Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
http://blog.csdn.net/DelphiTeacher/article/details/8923481 在FireMonkey iOS应用程序中的按钮 FireMoneky定义了不同类型 ...
- 将Heap RID转换成RID格式
使用DBCC PAGE命令查看索引叶子层中的索引键(最后一个参数为3才会显示索引键对应的HEAP RID)时,可以使用下面的SQL将HEAP RID转换成 FileId:PageId:SlotNo的格 ...
- CSS2.1SPEC:视觉格式化模型之包含块
原汁原味的才是最有味道的,在阅读CSS标准时对这一点的体会更加深刻了,阅读文档后的一大感觉就是很多看上去理所应当的样式表现也都有了对应的支持机制.本文首先从包含块写起,一方面总结标准中相应的阐述,并且 ...