摘自
https://mp.weixin.qq.com/s/mcIMBMNMrFD9OE56iujhXQ
一、容器和虚拟机的比较
1、虚拟机
对于以前熟悉的虚拟机,我们需要模拟操作系统和硬件。虚拟机一旦被开启,预先分配的资源就会被耗尽。
2、容器
容器共享资源和操作系统。可以实现动态分配资源。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。这篇文章里写的是将运行的进程外面套一个保护层,这个保护层是虚拟分配的资源,就像真实的资源一样。
3、Docker相比较于传统的虚拟化方法
- 启动快速,属于秒级别
- docker需要的资源更少,于内核交互几乎没有性能损耗
- docker轻量,因为共享一个内核
- 隔离型没有虚拟机的强。虚拟机是系统间的隔离,但是docker是进程间的隔离。
- 安全性弱。Docker的租户root权限和宿主机的一样。虚拟机是分开的
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
二、Docker的基本概念
1、Images(镜像)
提供运行时所需要的程序、库、资源、配置等文件,还包括运行时候的参数。镜像不包含动态数据,在创建后也不会改变。
2、Repository(仓库)
仓库是存放镜像的地方。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务, DockerRegistry
(仓库注册服务器)就是这样的服务。Docker
仓库的概念跟 Git
类似,注册服务器可以理解为 GitHub
这样的托管服务。一个 DockerRegistry
中可以包含多个仓库 (Repository)
,每个仓库可以包含多个标签 (Tag)
,每个标签对应着一个镜像。一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。
3、Container
容器 (container)
的定义和镜像 (image)
几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。容器层是可读可写的。由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。