虚拟机技术和容器技术对比
- 相比之下,虚拟机(VM)运行具有虚拟机软件的的操作系统上,通过管理程序虚拟访问主机资源。虚拟机会产生比应用程序逻辑所消耗的更多的开销,启动时间更慢
-
容器在装有容器引擎的(如Docker引擎)Linux上本地运行,并与其他容器共享主机的内核,Docker引擎可以完全利用宿主机的硬件和网络资源。 它运行在一个独立进程中,不占用任何其他可执行文件更多的内存,从而使其轻巧,启动时间也更快。
注
:Hypervisor是硬件虚拟化
(Hardware Virtualization)--将硬件物理资源划分为虚拟资源。容器是操作系统虚拟化
(OS Virtualization)--容器将系统资源划分为虚拟资源
容器和镜像
-
镜像包括运行应用程序所需的所有内容:代码或二进制文件,和运行时依赖关系以及所需的任何其他文件系统对象。也可以说镜像等同与未运行的容器
-
从根本上说,一个容器不过是一个正在运行的进程,并对其应用了一些附加的封装功能,使其与主机和其他容器隔离。
容器隔离的最重要方面之一是每个容器都与自己的专用文件系统进行交互。该文件系统由Docker镜像
提供。
Docker 引擎
-
server
是一个运行在服务器上的后台进程,也称为Docker Daemon
一种长期运行的程序,称为守护程序进程(dockerd命令) -
REST API
可以用来与server
进行通信,并指示其操作的接口 -
Client
Docker客户端,命令行界面(CLI)客户端(docker命令)
注
:CLI使用REST API
通过脚本或直接CLI命令控制或与Docker守护程序交互。许多其他Docker应用程序都使用基础API和CLI。
Docker架构
Docker使用CS架构。Docker客户端与Docker守护进程进行通信,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护进程可以在同一系统上运行,也可以远程连接到Docker守护进程。
-
DOCKER_HOST
表示运行Docker引擎的宿主机,其中包括Docker daemon
、Images
和Containers
- Docker守护进程
Docker守护进程
(dockerd)监听Docker API
请求并管理Docker对象,如图像、容器、网络和卷。守护进程还可以与其他守护进程通信来管理Docker服务。 - 镜像
镜像是一个只读模板,带有创建Docker容器的指令。映像通常基于另一个映像,还需要进行一些额外的定制。
要构建自己的映像,需要创建一个Dockerfile
,用于定义创建和运行镜像所需的步骤。Dockerfile
中的每条指令都会在图像中创建一个图层。当改变Dockerfile并重建图像时,只有那些已经改变的图层才会重建。这是使映像与其他虚拟化技术相比如此轻量级、小巧和快速的部分原因。 - 容器
容器是镜像的可运行实例。可以使用Docker API
或CLI
创建、启动、停止、移动或删除容器。
容器是由它的镜像在创建或启动时提供给的配置选项定义的。当容器被删除后,未存储在永久性存储中的状态更改将消失。
- Docker守护进程
-
Docker客户端
Docker客户端(docker)是用户与Docker交互的主要方式 -
Docker镜像注册中心
Docker官方提供了一个Docker Hub的镜像注册中心,用于存放公开和私有的Docker镜像,可以随时上传和下载Docker镜像
底层技术
Docker守护进程通过一个“执行驱动程序”(execution driver)来创建容器。默认情况下他是Docker项目自行开发的runc驱动程序,但仍支持旧有的LXC。runc与下面的内核功能密不可分
-
cgroups
cgroups
负责管理容器使用的资源(CPU和内存等)。它还负责冻结
和解冻
容器这两个docker pause命令所需要的功能 -
Namespace(命名空间)
Namespace
负责容器之间的隔离。确保系统的其他部分与容器的文件系统、主机名、用户、网络和进程都是分开的 -
Linux Security Modules(linux安全模块)
docker利用其中的SELinux
和AppArmor
,给容器更稳固的安全保障 -
UnionFS(联合文件系统)
Docker其中一个主要的底层技术就是UFS
,它负责储存容器的镜像层。UFS有数个存储驱动中的其中之一提供,可以是AUFS
、devicemapper
、BTRFS
或Overlay
网友评论