虚拟化技术

虚拟化技术从1960年代诞生,到2000年左右成为商业产品开始蓬勃发展,比方驰名的VMWare, VirutalBox, KVM, Docker等。

目前大家熟知的虚拟化技术包含虚拟机(VM)和容器(Container)。

虚拟机技术促成了云计算的倒退,让云计算厂商能够提供大量机器实例给到用户。

容器技术促成了云原生的倒退,让运行在云环境的利用能够更好地享受云的劣势。

从传统的物理机,到进化的虚拟机,各自的逻辑架构如下所示:

虚拟机技术里的Hypervisor有2种类型:

  • 第一种:间接和硬件交互,不通过宿主机操作系统,比方HyperKit(Mac OSX),Hyper-V(WIndows),KVM(Linux)。
  • 第二种:宿主机操作系统上的一个利用,下面虚拟机示意图示意的是这个类型的Hypervisor,比方VirtualBox/VMWare。

Docker是什么

Docker没有严格的定义,Docker实质上是利用容器虚拟化技术,让开发者能够将他们的利用、依赖库和配置文件打包到一个可移植的镜像文件里,而后公布到任何风行的Linux机器上运行。

运行这个镜像文件会生成一个虚构容器,应用程序在这个容器里运行,就如同在实在的物理机上运行一样。

容器化技术和Docker不能划等号,最早的容器技术是2008年公布的LXC(Linux Container),然而不够好用,Docker基于LXC做了很多对利用开发敌对的封装和改良,真正带动了容器化技术的风行。

前面随着Docker本身的技术架构演进,放弃了应用LXC,转而应用自研的libcontainer来和Linux kernel交互,前面libcontainer为了合乎OCI(Open Container Initiative)规范,又封装重构为当初驰名的runC

Docker应用Go语言编写,底层实现上应用Namespace实现容器之间的资源隔离,应用cgroups(Control Groups)做资源限度。

容器技术的逻辑逻辑架构如下所示:


容器是被隔离的过程(isolated process),不要把容器了解为轻量级虚拟机,容器和虚拟机是2种齐全不同的虚拟化技术。

Container Runtime:示意容器运行时,任何满足OCI规范的容器运行时都能够相互替换,就类比虚拟机里的Hypervisor也有VMWare和VirtualBox等不同的实现。目前最风行的容器运行时是由Docker募捐给CNCF的runC

Docker实现的容器技术和传统的虚拟机相比,除了有下面说的架构上的区别,其它区别如下:

个性Docker虚拟机
启动速度秒级分钟级
交付/部署开发,测试,生产环境统一-
性能近似物理机性能损耗大
镜像大小较小,KB-MB较大,GB
迁徙/扩大跨平台,可复制-

以Docker为代表的容器技术和虚拟机都是虚拟化技术,两者并不是相互取代的关系,它们有各自的实用场景,还能够联合在一起应用。

Docker架构

Docker是c/s架构,架构图如下:

Docker daemon:简称dockerd,作为服务端,解决Client发过来的申请,治理Docker镜像、容器、网络和存储。

Docker client: 作为客户端和dockerd服务端交互,应用的是RESTful API。docker命令行工具CLI和带界面的docker客户端都能够称为Docker client。Docker client能够和多个dockerd交互。

Docker Registry:镜像仓库,用来存储Docker镜像,有公共仓库(public registry)和公有仓库(private registry),相似GitHub的Public Repo和Private Repo。应用docker pulldocker run命令时,会从咱们配置的registry仓库拉取镜像。应用docker push命令,会把镜像推送到咱们配置的registry仓库。

Docker images: Docker镜像,是一个只读文件,外面有创立Docker容器的指令。一个镜像能够基于其它镜像来创立,比方咱们能够基于已有的ubuntu镜像,增加Nginx和本人的应用程序来创立一个新的镜像。如果要创立本人的镜像文件,须要创立名为Dockerfile的文件,在该文件里依照指定的语法规定来定义创立和运行镜像文件的步骤。

Docker containers:Docker容器,是镜像的运行实例,一个容器实际上就是一个被隔离的过程(isolated process)。Docker容器的生命周期如下图所示:


Docker Engine:蕴含有Docker daemon, RESTful API, Docker CLI。

Docker装置

装置Desktop即可,Desktop反对Mac, Windows和Linux零碎,蕴含了应用Docker所须要的所有工具集。

装置步骤参考:https://docs.docker.com/get-d...

Docker应用

咱们以官网的教学镜像作为简略示例。启动Desktop后,在电脑的终端上运行如下命令:

docker run -d -p 80:80 docker/getting-started

该命令如果发现本地没有docker/getting-started镜像文件,会从官网的镜像仓库Docker Hub上拉取镜像并运行。

-d: 让容器当前台模式运行。

-p 80:80:把主机的80端口映射到容器里的80端口。

docker/getting-started:镜像名称。

启动后,关上一个浏览器,拜访 http://localhost/ 就能够看到曾经run起来的应用程序的界面了。

开源地址

文章和示例代码开源地址在GitHub: https://github.com/jincheng9/...

公众号:coding进阶

集体网站:https://jincheng9.github.io/

References

  • https://docs.docker.com/
  • https://mp.weixin.qq.com/s/ji...
  • https://www.tutorialworks.com...