相信很多人和我开始时一样,听过Docker,听过Kubernetes,听过容器也听过集群,貌似很多高大上的技术都耳熟能详,但自己其实却并不了解,甚至不知道他们是什么?能干什么?
最初,我以为Docker以及k8s等技术只能用在大数据以及云等的场景,甚至学习上也需要专门的环境,但是,我发现我错了,而且错的很彻底,不知道你是否也这么认为过,觉得这些技术在平时的开发中根本用不到。如果是这样的,那我现在就告诉你,其实并不是这样的,下面就跟我一起来了解一下Docker吧。
Docker的发展
Docker是由美国旧金山一家名叫“dotCloud”---主要提供基于PaaS的云计算技术服务的公司研发的,Docker是该公司将自己的容器技术进行了简化和标准化之后才得到的名称。
2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。
之后的Docker,成为了行业里人气最火爆的开源技术,没有之一。更是得到像Google、微软、Amazon这样的巨头的全力支持。
那么Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻”。
Docker是什么
Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等这有助于实现灵活性和便携性,。
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件地速度。
Docker容器 与虚拟机类似,但原理上,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。
Docker的优点
- 标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
- 节约时间,快速部署和启动,一般是秒级;
- 方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
- 节约成本,docker容器需要的磁盘空间可以减少到MB级;
- 方便持续集成,通过与代码进行关联使持续集成非常方便;
- 可以作为集群系统的轻量主机或节点。
Kubernetes
虽然Docker容器技术被炒得热火朝天,但是其自身也有很多的限制,比如想要将Docker应用于具体的业务实现,容器的编排、管理和调度等都是比较困难的。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。这时,K8S应运而生。K8S,全称是kubernetes,是基于容器的集群管理平台。
而且,k8s自身有很多优点可以完美的解决硬件对应用的限制。
- 易部署:K8S部署任何应用都是小菜一碟。只要应用可以打包进容器,K8S就一定能启动它。K8S都可以在任何环境中安全的启动不管什么语言什么框架写的应用,物 理服务器、虚拟机、云环境。
- 易迁移:Kubernetes 完全兼容各种云服务提供商,可以满足切换供应商的需求,比如从 Google到 AWS。
- 高效的资源利用:K8S如果发现有节点工作不饱和,便会重新分配 pod,帮助我们节省开销,高效的利用内存、处理器等资源。如果一个节点宕机了,K8S会自动重新创建之前运行在此节点上的 pod,在其他节点上运行。
- 超强的自动缩放能力:网络、负载均衡、复制等特性,对于 Kubernetes 都是开箱即用的。pod 是无状态运行的,任何时候有 pod 宕了,立马会有其他 pod 接替它的工作,用户完全感觉不到。如果用户量突然暴增,现有的 pod 规模不足了,那么会自动创建出一批新的 pod,以适应当前的需求。反之亦然,当负载降下来的时候,K8S也会自动缩减 pod 的数量。
- 易操作:只需 写个简单的CI 服务脚本然后运行它,就会使用你的代码创建一个新的 pod,并部署到 Kubernetes 集群里面。应用打包在容器中使其可以安全的运行在任何地方,例如你的 PC、一个云服务器,使得测试极其简单。
Docker基础架构
Docker其实有2个含义:一是指整个Docker项目,一是指Docker引擎。
Docker引擎(Docker Engine)
Docker Engine是一个服务端-客户端结构的应用,主要有这些部分:Docker守护进程、Docker Engine AP、Docker客户端。
- Docker守护进程(Docker daemons),也叫 dockerd ,是一个持久化的进程,用户管理容器。守护进程会监听Docker Engine API的请求。
- Docker Engine API是用于与Docker守护进程交互用的的API。它是一个RESTful API,因此它不仅可以被Docker客户端调用,也可以被wget 和 curl等命令调用。
- Docker客户端,也叫docker,是大部分用户与Docker交互的主要方式。用户通过客户端将命令发送给守护进程。命令会遵循Docker Engine API。
Docker注册中心(Docker registry)
Docker registry是用于存储Docker的镜像。Docker Hub 是一个公共的注册中心,任何人都可以使用,默认配置下,Docker将会在这里寻找镜像。我们在下一节安装Docker时下载软件时会从这里注册账号并拉取(pull)Docker镜像。
另外,用户可以自行构建私有注册中心。
Docker对象
Docker的对象是指Images、Containers、Networks、Volumes、Plugins等等。
- 容器(Containers)是镜像的可运行的实例。容器可通过API或CLI(命令行)进行操控。
- 镜像(Images)是一个只读模板,用于指示创建容器。 镜像分层(layers)构建的,而定义这些层次的文件叫Dockerfile。
- 服务(Services)允许用户跨越不同的Docker守护进程(Docker daemons)的情况下增加容器,并将这些容器分为管理者(managers)和工作者(workers),让他们为swarm共同工作。
除了Docker基础架构之外,还有Docker的扩展架构,其中包括Docker Compose、Swarm Mode等
以及Docker的两种文件格式,Dockerfile和Compose file。Dockerfile定义了单个容器的内容和启动时候的行为。Compose file定义了一个多容器应用。
还有Docker的网络模式及插件等,这些除基础架构之外的东西,本机就暂时不探讨了,一是本来本节就是为了了解Docker,没必要把全部的大而全的东西都完全搞懂,二是,怕给零基础的同学造成压力;三是本人文笔有限,怕你们读的枯燥,哈哈,因此,我宣布本节内容到此结束啦。。。。。。。。下一节,我们来学习Docker Desktop及k8s的安装。