随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗? k8s 是kubernets的缩写,’8‘代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手,它俩相互依存。Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。 容器化时代来了 虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。 虚拟化技术演进 (1)物理机时代:多个应用程序可能会跑在一台机器上。 物理机时代 (2)虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。 虚拟机时代 (3)容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。 容器化时代 容器化解决了软件开发过程中一个令人非常头疼的问题,用一段对话描述: 测试人员:你这个功能有问题。 开发人员:我本地是好的啊。 开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。 容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。 容器化技术的尖刀武器 容器化技术的特点 可移植性:不依赖具体的操作系统或云平台,比如在阿里云或腾讯云直接随意迁移。 占地小:容器只需要其应用程序以及它需要运行的所有容器和库的依赖清单,不需要将所有的依赖库都打包在一起。 共享 bin 和 lib:不同的容器可以共享 bin 和 lib,进一步节省了空间。 Docker 横空出世 2010年一位年轻小伙子在美国旧金山成立了一家名叫【dotCloud】的公司, 开发了 Docker的核心技术,从此开启了容器技术的时代。 Docker原公司名 后面 dotCloud 公司将自己的容器技术进行了简化和标准化,取名为 Docker,就是大家熟悉的鲸鱼 logo。 Docker新logo 2013年dotCloud 公司宣布将 Docker 开源,随着越来越多的工程师发现了它的优点, Docker 的人气迅速攀升,成为当时最火爆的开源技术之一。 当前有30%以上的企业在其AWS环境中使用Docker,并且这个数字还在继续增长。 Docker使用率越来越高 Docker怎么用? 其实大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。 在运行容器前需要编写Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。 Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。 编排系统的需求催生 k8s 尽管Docker为容器化的应用程序提供了开放标准,但随着容器越来越多出现了一系列新问题: 如何协调和调度这些容器? 如何在升级应用程序时不会中断服务? 如何监视应用程序的运行状况? 如何批量重新启动容器里的程序? 解决这些问题需要容器编排技术,可以将众多机器抽象,对外呈现出一台超大机器。现在业界比较流行的有:k8s、Mesos、Docker Swarm。 在业务发展初期只有几个微服务,这时用 Docker 就足够了,但随着业务规模逐渐扩大,容器越来越多,运维人员的工作越来越复杂,这个时候就需要编排系统解救opers。 应用程序的声明周期 一个成熟的容器编排系统需要具备以下能力: 处理大量的容器和用户 负载均衡 鉴权和安全性 管理服务通信 多平台部署 k8s与Docker Swarm江湖恩怨 k8s VS Docker Swarm 如果你非要拿 Docker 和 k8s 进行比较,其实你更应该拿 Docker Swarm 和 k8s…