docker微服务部署之:5、利用DockerMaven插件自动构建镜像html
Rancher是一个开源的企业级容器管理平台。经过Rancher,企业不再必本身使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。mysql
Rancher官网:https://rancher.comsql
#Rancher镜像下载 $ sudo docker pull rancher/server $ sudo docker images | grep rancher/server rancher/server latest aff17b0067db 1 second ago 1.09GB #Rancher安装 docker run -d --name=rancher -p 8080:8080 rancher/server
在浏览器中输入:http://192.168.31.181:8080,若是能打开欢迎页,表示安装成功。(提示:rancher的启动会有点慢,可能须要等一下子)docker
全是英文,看不懂?不要紧,能够点击右下键的English,选择语言为简体中文。数据库
Rancher的做用就是用来管理Docker容器的环境。能够经过Rancher的环境管理,来管理不一样团队的Docker环境。每套Ranhcer环境之间,都是隔离的,相互之间没有影响。centos
点击顶部导航栏的Default,点击环境管理浏览器
进入了环境管理界面,点击添加环境架构
打开了添加环境界面,输入相应名称和描述,并选择环境模板,最后点击建立,完成环境的添加。微服务
在环境列表界面,能够看到已经建立好了一个名为test的环境,而且该环境已经完成了启动。工具
首先切换到刚建立的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 32 hours ago 642MB article latest b80e1550a5ce 32 hours ago 651MB eureka latest 9b410097b49e 34 hours ago 645MB jdk1.8 latest 1f2578d93bd0 2 days ago 598MB centos centos7 9f38484d220f 7 days ago 202MB centos/mysql-57-centos7 latest ee80146ff512 5 weeks ago 453MB rancher/server latest aff17b0067db 7 weeks ago 1.09GB rancher/scheduler v0.8.6 fbedeaddc3e9 8 weeks ago 248MB rancher/agent v1.2.11 1cc7591af4f5 7 months ago 243MB rancher/net v0.13.17 f170c38e3763 8 months ago 311MB rancher/dns v0.17.4 678bde0de4d2 8 months ago 249MB rancher/healthcheck v0.3.8 ce78cf69cc0b 8 months ago 391MB rancher/metadata v0.10.4 02104eb6e270 8 months ago 251MB rancher/network-manager v0.7.22 13381626c510 8 months ago 256MB rancher/net holder 665d9f6e8cc1 23 months ago 267MB
点击关闭以后,可能须要等待一点点时间,就能够看到在主机列表界面,看到连上了咱们刚添加的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状态下,点击右边竖着的...,而后点击查看日志,如图:
若是此时,你把上面的错误:“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-57-centos7 "container-entrypoin…" 3 days ago Exited (0) 31 hours ago mysql
...
# 能够看到myql的STATUS为Exited(0)表示没有启动,下面启动mysql
$ sudo docker start 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服务中止并删除掉。注意:删除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(11) NOT NULL AUTO_INCREMENT, `title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL, `author` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `add_time` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; #插入数据INSERT INTO `tb_article` VALUES (1, 'docker', '部署微服务', 'tom', '2019-03-20 08:00:00');
界面以下图所示:
注意:该命令行模式,不支持中文输入,因此,上面的insert语句中的content字段的内容“部署微服务”,被自动替换为空。以上演示,主要是告诉你们如何在rancher中使用命令行,以及须要注意的地方。
到此,docker数据库已经建立好了,并有了相应数据,此时,咱们再来刷新article服务看看:
好了,到此,把手动建立服务,改形成在rancher中建立服务,已经完成。