一、Docker vs 虚拟机
KVM技术的发展,解放了单台服务器物理机的资源过剩的浪费,虚拟机的资源互相独立,部署应用不受影响,但缺点是占用资源多,管理起来比较麻烦,项目部署从测试迁到线上环境时候可能服务器系统不完全一样缺少依赖的包导致服务启动异常 又要耗费时间排错。容器Docker就是为了解决这种困境,在耗费资源低的情况下,又可以方便部署资源和依赖互相独立的应用,从而实现快速部署
正如docker的鲸鱼图上的集装箱一样,docker的容器运行是以沙盒的机制运行,共享底层操作系统,会把应用需要的依赖打包在一起,以沙盒的方式,在同类型的操作系统上,可以自由迁移部署运行,如此就可以极大地解放了部署环境不一致的问题。
二、Docker-Compose 的诞生
容器化的盛行,也带来了新的问题,那就是如何高效地去部署和管理这些镜像呢?因为比较大型的应用服务,往往需要多个组件一起合作才能正常运行,这就给单docker容器部署提出了挑战,Docker-Compose就像下面这只八爪章鱼,可以同时进行多容器的构建以及部署运行。
三、k8s(Kubernetes)的横空出世 vs Docker Swarm
Docker和Docker-Compose的运用,充分地把单物理服务器的性能充分利用起来,并且可以快速地进行持续交付。但是如何把如下图中A机器的容器镜像迁移到其他服务器以及如果遇到高并发,如何进行负载均衡分流呢?
重复地拷贝一下镜像到B服务器再运行?那如何高效地进行监控各个容器的健康运行情况以及崩溃后如何迁移服务呢?集群的管理问题,此时出现了Docker Swarm技术,是docker自家的技术,但是Google接着开源了其内部用了很久的容器治理编排工具Kubernetes,以其高效以及智能自动化的管理机制,吸引了大批开源开发者以及公司的青睐,从此一战成名,Docker Swarm的市场份额进一步低迷。这里只介绍下k8s主要的原理以及解决了哪些痛点的问题。
k8s就像一个领航员,把各种集装箱(container)有条不紊地组装起来,着重提供如下功能: 1.快速部署功能:定义对应的charts,可以方便把大型的应用部署上去。 2.智能的缩扩容机制:部署时候会自动去考虑容器应该部署在哪个服务器上,以及副本的数量可以自定义。 3.自愈功能:某个节点的服务崩溃了,可以自动迁移到另外一个服务器节点来恢复来实现高可用。 4.智能的负载均衡:利用Ingress,可以实现流量通过域名访问进来时候,进行流量的分流到不同服务器上。 5.智能的滚动升降级:升级或者降级时候,会逐个替换,当自定义数量的服务升级后,才会进行其他的升级以及真正销毁旧的服务。
四、三种技术的应用场景及资源占用情况
技术 | 应用场景 | 资源占用情况 |
---|---|---|
Docker | 单机部署简单应用 | 低 |
Docker-Compose | 单机/少数机器部署应用 | 低 |
k8s | 集群部署高可用应用 | 高 |