虚拟化技术
虚拟化技术从 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 pull
或docker 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…