背景
我们在技术选型上面选择目前比较流行的设计思想,SOA,微服务,面向服务的设计,程序被拆分成若干小的服务,那么这么多小的服务如何测试呢? 如何部署呢? 目前发现测试环境(也有生产环境)通过使用docker容器,进行快速的测试迭代与发布
docker
好早以前已经了解过docker,学习他的目的主要是快速的搭建开发测试环境,不过运维人员比较喜欢hyper-v,都能达到效果,所以也就搁置了docker的学习研究.
最近看spring-cloud 的一些例子,发现大部分的开发人员还是通过docker-compose.yml 进行开发环境的搭建,确实效果非常好,不用一个一个去启动服务,实在是轻松了很多. 这个时候才选择再来复习下docker的相关知识.
镜像
docker作为一个软件容器,这里的镜像就是很多已经设置好的软件
容器
docker通过镜像可以快速启动一个容器,这个容器运行了相关的软件,比如tomcat ,暴露了8080端口,提供外部访问.
Dockerfile
开发中一般通过构建Dockerfile 创建一个容器,配合maven-docker 插件进行自动部署.基本的指令可以通过资料进行了解,总结下来一般我们不会使用特别复杂的,基本语法已经够用了.
docker-compose.yml
dockerfile 可以创建一个容器,但是微服务中可是有许多的服务,通过docker-compose文件,可以定义所有的服务,并且调用Dockerfile进行构建容器.基本的语法
docker-machine
docker-machine 很多说明上面说是: 快速搭建docker环境,提供了许多集成的(各种vm环境),提供了docker主机的管理,提供了方便的操作接口(ssh),比如windows可以通过hyper-v创建一个docker虚拟主机,通过docker-machine ssh 进行访问,因为我在使用上面也很困惑,使用docker-engine就够用了,干嘛还这么复杂,提供这么多工具,虚拟机管理我可以直接使用hyper-v的界面设置呀? ssh ,我可以通过secureCRT进行访问呀?当然作为一个管理docker主机倒是挺方便的,不仅可以管理本地,也可以管理第三方上面的docker
swarm
我也有一个疑问,我们测试环境好几台电脑呢? 如何才能把两台电脑都作为docker管理?Swarm 提供了集群的功能,1.12以上已经自带了swarm, 所以通过docker swarm init构建一个manager, 然后其他机器配置成worker,这样通过service进行安装就可以了.不用再管安装到哪里了.
swarm ,kubernetes
最近几年容器技术都很火热, 开发测试中接触最多的就是docker, 其他倒是还没有深入接触过,在了解了k8s后,对比了下来了解下目前的几款不容易理解的技术: openstack 主要是一款云操作系统通过UI控制台管理计算,存储,网络,数据等
网上大部分说openstack主要负责管理VM, swarm 主要管理容器,通过docker-api,k8s主要是google15年经验的容器使用经验总结,k8s 和swarm 都负责管理容器. mesos是apache一款适用于成千上百的大规模集群的资源管理.我的理解比较简单一些,因为开发中(以及测试中)一般就几台电脑,所以使用docker也是不错的选择,下一步,了解下google的kubernetes,看看如何
kubernets
很多人看好k8s, 毕竟swarm还很年轻,官网直接说这是人家15年的经验的最佳实践.生产级别的容器编排,哇塞,霸气四射,感觉好像再说其他的容器管理都是小打小闹,除了线下测试测试,您也不敢拿到生产环境.谷歌大爷确实威武.
k8s的基本知识结构
关于k8s更详细的学习需要重新写篇文章了,因为没看懂--!
what is 云计算?
众所纷纭,整体上来说都肯定了这是一种模式,并不是一个算法.就是人家提供了许多基础组件,掏钱拿来用就行了,更多的需要深入聊下IaaS,Paas,Saas,这三个是什么东东.结合自己的理解说明下
- SaaS: 软件即服务. 运行在云计算基础设施上的应用,一般通过网络提供服务,比如浏览器,像谷歌doc,在线就可以使用.并且按需使用,按需付费.
- PaaS: 平台即服务, 客户把自己开发的程序部署到云计算基础设备上,不需要关注网络,数据库,操作系统,等等.
- IaaS: 基础设施即服务, 上面提到的云计算基础设施就是这里了,这里就比较复杂了,CPU,内存,服务器,虚拟机等等的组合,一般包括,公有云,私有云,混合云.
云计算就是从基础设施到对外提供的应用服务.