容器技术简介


容器简介

  1. 容器是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的文件系统,ip地址,主机名等。
  2. 容器是一种轻量级操作系统层面的虚拟机,它为应用软件及其依赖组件提供了一个资源独立的运行环境。
    应用软件所依赖的组件会被打包成一个可重用的镜像,镜像运行环境并不会与主操作系统共享内存、CPU和硬盘空间,由此也保证了容器内部的进程与容器外部进程的独立关系。

容器与虚拟化的区别

  1. 管理程序虚拟化(hypervisor virtualization,HV) 通过中间层将一台或多台独立懂得虚拟机运行于物理硬件之上。
  2. 容器(Containers) 运行在操作系统内核之上的用户空间。
1
2
3
4
5
简单解释,虚拟机运行在操作系统上,而docker是直接运行在应用上。
所以docker无法提供一个像VMware那样完全的隔离,甚至到很多地方都没有进行隔离,比如说用户空间。
这里可以解释一下,如果你用的是centos5版本那你就别想安装docker了,如果是centos6的你可以看一眼。
因为内核版本比较低,但是如果使用乌班图就可以,因为乌班图的内核更新的比较快。
如果公司服务器是centos5和centos6 用docker就需要升级内核,相对比较麻烦.

Docker 和 KVM 的对比

1
2
KVM 和 Docker 的对比:
https://www.qstack.com.cn/archives/148.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1. 虚拟化技术对比:
- KVM全虚拟化,需要模拟各种硬件,跑在宿主机之上。
- Xen, VMware半虚拟化,直接跑在硬件上。
- docker严格来说不算是虚拟化技术(操作系统虚拟化),只是进程隔离和资源限制。

2. 占用内容资源对比:
- KVM虚拟机一般会独占一段内存,即使闲置,其他虚拟机也无法使用。
- 容器可以只有一个内存上限,没有下限。如果它只使用1MB内存,那么它只占用宿主机1MB内存。宿主机可以将富余内存作为他用。

3. 实例的内核对比:
- kvm虚拟机内核 无需与宿主机一致
- docker实例内核和宿主机 内核一致

4. 操作系统支持度对比:
- kvm支持多种操作系统,除了linux,还支持windows,uninx、solaris等
- docker只支持linux

5. 启动一个实例需要的时间对比:
# lxc容器技术将操作系统抽象到了一个新的高度。
# 直接从init启动,省去了硬件自检、grub引导、加载内核、加载驱动等传统启动项目,因此启动飞速。
- docker:秒级
- kvm:分钟级别

6. 镜像模板占用空间对比:
- kvm:占用空间大,G级别
- docker:占用空间小,M级别

综合来说:
- kvm资源隔离比docker更高,kvm支持的操作系统类型更多
- docker比kvm更省资源,可以提供非常接近宿主机的性能

容器更省资源

1
2
3
4
5
6
1. 容器由于省去了操作系统,整个层级更简化,容器可以在单台服务器上运行更多的应用。
2. 虚拟化技术针对每个虚拟机的资源分配是固定的。
- 如下图,三个虚拟机在一台计算机上运行,该计算机配备48 GB内存、12核处理器和3TB磁盘存储空间,
- 每个虚拟机被分配了16 GB内存、4核和1TB存储空间,如果其中一个虚拟机使用的内存从不超过1GB,只存储100MB的文件系统,
- 该虚拟机仍占用4GB内存和整整1TB的存储空间,仍是造成了大量的资源浪费。
- 而容器则是以共享方式使用主机上的内存、处理器和存储空间。

容器实现秒级启动

1
2
3
1. 虚拟机包含了完整的操作系统环境,同时还提供了对操作系统的控制支持。因此,虚拟机的规模较大,通常会达到数个G。
2. 在运行应用前,虚拟机需要预先花费几分钟来引导操作系统,然后才能初始化和运行应用程序。
3. 容器则规模较小,一般只有数个M,容器通常可以实现秒级启动。

Docker 与 OpenStack区别

百花齐放的容器技术

  1. 虽然 docker 把容器技术推向了巅峰,但容器技术却不是从 docker 诞生的。
  2. 实际上,容器技术连新技术都算不上,因为它的诞生和使用确实有些年头了。
  3. 下面的一串名称肯能有的你都没有听说过,但它们的确都是容器技术的应用:
1
2
3
4
5
6
7
8
9
10
11
Chroot Jail
FreeBSD Jails
Linux VServer
Solaris Containers
OpenVZ
Process Containers
LXC
Warden
LMCTFY
Docker
RKT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1、Chroot Jail
就是我们常见的 chroot 命令的用法。它在 1979 年的时候就出现了,被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。

2、The FreeBSD Jail
Freebsd Jail 实现了操作系统级别的虚拟化,它是操作系统级别虚拟化技术的先驱之一。

3、Linux VServer
使用添加到 Linux 内核的系统级别的虚拟化功能实现的专用虚拟服务器。

4、Solaris Containers
它也是操作系统级别的虚拟化技术,专为 X86 和 SPARC 系统设计。Solaris 容器是系统资源控制和通过 "区域" 提供边界隔离的组合。

5、OpenVZ
OpenVZ 是一种 Linux 中操作系统级别的虚拟化技术。 它允许创建多个安全隔离的 Linux 容器,即 VPS。

6、Process Containers
Process 容器由 Google 的工程师开发,一般被称为 cgroups。

7、LXC
LXC 又叫 Linux 容器,这也是一种操作系统级别的虚拟化技术,允许使用单个 Linux 内核在宿主机上运行多个独立的系统。

8、Warden
在最初阶段,Warden 使用 LXC 作为容器运行时。 如今已被 CloudFoundy 取代。

9、LMCTFY
LMCTY 是 Let me contain that for you 的缩写。它是 Google 的容器技术栈的开源版本。
Google 的工程师一直在与 docker 的 libertainer 团队合作,并将 libertainer 的核心概念进行抽象并移植到此项目中。
该项目的进展不明,估计会被 libcontainer 取代。

10、Docker
Docker 是一个可以将应用程序及其依赖打包到几乎可以在任何服务器上运行的容器的工具。

11、RKT
RKT 是 Rocket 的缩写,它是一个专注于安全和开放标准的应用程序容器引擎。

在什么场景需要容器

  1. 如果你遇到以下场景,推荐使用容器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. 部署无状态服务,同虚拟机互补使用,实现隔离性

2. 如果要部署有状态服务,需要对里面的应用十分的了解

3. 作为持续集成的重要工具,可以顺利在开发,测试,生产之间迁移

4. 适合部署跨云,跨Region,跨数据中心,混合云场景下的应用部署和弹性伸缩

5. 以容器作为应用的交付物,保持环境一致性,树立不可变更基础设施的理念

6. 运行进程基本的任务类型的程序

7. 用于管理变更,变更频繁的应用使用容器镜像和版本号,轻量级方便的多

8. 使用容器一定要管理好应用,进行health check和容错的设计

容器有哪些优点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 敏捷开发:容器技术最大的优势在于其快速的生成效率,轻量级的打包方式使其具有更好的性能和更小的规模。

2. 快速开发:容器解决了应用程序的平台依赖和平台冲突问题,从而帮助开发人员更快地开发程序。
每个容器可被看作为一个微服务,因而可以单独进行升级,而不必担心同步问题。

3. 版本管理:容器中的镜像可被单独管理,由此可以追踪、记录、生成不同的容器版本,进而分析容器版本的差异。

4. 计算环境可移植:容器封装了与应用相关的依赖组件及操作系统信息,由此减轻了应用在不同计算环境下的配置需求。
例如,同一个镜像可应用于Windows或Linux环境,并适用于开发、测试、部署等阶段。

5. 标准化:容器通常基于开放标准而设计,因而容器在主流Linux系统及Windows系统上都是适用的。

6. 安全性:容器间的进程以及容器内外的进程是相互独立的。因此,每个容器的升级或修改对其它容器都是没有影响的。

7. 弹性伸缩:由于容器单元间相互独立,由统一的编排工具管理,且编排工具具备发现容器节点的功能,
所以容器的弹性扩容可以在短时间内自动完成;
同时,由于每个容器均为独立的个体,容器调用的资源和容器的使用由编排工具管理,所以减少某一容器节点不影响整个容器系统的使用。

8. 高可用:与弹性伸缩类似,在某一容器节点出现故障时,容器编排工具能够及时发现节点的变化,并根据外部请求情况及时作出调整,
不影响整个容器系统的使用,实现系统的高可用。

9. 管理便利:容器技术可通过简单的命令行,完成对单一容器的管理,完成对镜像的快速打包和迁移;
同时也能通过Kubernetes、Swarm等工具,实现对大规模容器集群的管理。