0
点赞
收藏
分享

微信扫一扫

「Docker入门指北」容器很难理解?带你从头到尾捋一遍(上)

1. 初始虚拟化

🍑 虚拟化概念

在计算机技术中,虚拟化(Virtualization) 是一种资源管理技术。
 
虚拟化的目的是在一台计算机上运行多个系统或应用,从而提高资源的利用率,节约成本。将单台服务器中的各种资源,如网络、CPU及内存等,整合转换为一台或多台虚拟机,用户就可以从多个方面充分利用计算资源。
 
由下图可以看出,一台物理机可以拥有多台虚拟机,而这些虚拟机都是基于物理机运行。
 
其中,物理机又叫作虚拟机的宿主机(可简称为主机),只要它处于正常运行状态,就可以一直承载虚拟机的运行。
 
由于虚拟机基于物理机运行,硬件设备都是共享的,在创建多台虚拟机时,也要考虑到物理机的配置是否能够承载足够数量的虚拟机。
在这里插入图片描述

🍑 硬件虚拟化

硬件虚拟化是对宿主机的硬件进行虚拟化,使硬件对用户隐藏,并将虚拟化的硬件呈现在用户面前,如下图所示。
在这里插入图片描述
图中所示的硬件并非真实的物理硬件,而是通过虚拟化技术虚拟出来的,与虚拟机一样基于物理机硬件。
 
虚拟机的运行需要考虑物理机硬件的配置,例如,将物理机中的网卡取出后,在虚拟机设置中是无法添加网卡的,但只要物理机中有网卡,虚拟机中就可以添加多个网卡。
 
再例如,物理机的内存有 16GB,用户直接给虚拟机配置 16GB 内存,这也是无法实现的,因为物理机的运行也需要消耗内存。

下面是一些硬件虚拟化的例子👇

Inter-VT(Inter Virtualization Technology,Intel公司的虚拟化技术)。
 
为了解决纯软件虚拟化安全、性能等方面的不足,这种技术可以让一个 CPU 看起来像是多个 CPU 在工作一样,从而实现在一台计算机上同时存在多个操作系统。
 
AMD-V(AMD Virtualization,AMD公司的虚拟化技术)。
 
它是针对 x86 处理器系统架构的一组硬件扩展虚拟化技术,可以简化纯软件的虚拟化解决方案,改进 VMM(VirtualMachine Manager,虚拟机监视程序)的设计,更充分地利用硬件资源,提高了服务器和数据中心的虚拟化效率。

2. Docker容器

🍑 Docker技术的诞生

容器(Container) 技术是基于虚拟化技术的,它使应用程序可以从一个计算环境快速可靠地转移到另一个计算环境运行,可以说是一种新型的虚拟化技术。
 
由于容器技术的优越性,越来越多的互联网公司开始开发容器应用。
 
早在1979年,UNIX系统中就出现了一种 chroot 机制,这是容器技术的维形。
 
2000年,FreeBSD Jails技术出现。它基于 FreeBSD 系统,将计算机分为多个独立的小型计算系统。
 
2006年,谷歌推出了Process Containers (过程容器)技术,它不仅可以隔离进程,还可以对隔离空间限制计算资源。
 
2008年,出现了第一个完整的容器管理工具——LXC (Linux Container, Linux容器)。
 
2013年,,LMCTFY (Let Me Contain That For you,我为你的程序打包)作为由谷歌开发的开源容器技术,实现了在 Linux 系统中使用容器技术,,LMCTFY 最终成为 Libcontainer 容器管理的重要组成部分。
 
同年,,Docker 技术问世,容器热度呈爆发式增长,Docker 逐渐成为了容器中的杰出代表,如下图所示👇
在这里插入图片描述
Docker 是一个开源的容器引擎,它可以使开发者打包好的应用程序在 Docker 空间中运行起来。
 
当一台物理机中运行多个 Docker 容器时,就算其中一个容器出故障,也不会影响到整个业务。
 
Docker技术之所以独特,是因为它专注于开发人员和系统操作员的需求,将应用程序依赖项与基础架构分开。目前,容器无处不在,在 Linux、Windows、数据中心、公有云中,都可以看到容器的影子,如下图所示。
 
我们引入集装箱的概念来辅助理解 Docker 容器。集装箱被誉为运输业与世界贸易最重要的发明。
 
早期的货物运输时,设法将不同的货物放在运输机上和因货物规格不同而频繁进行的货物装载与卸载等浪费了大量的人力物力。
 
为此人们发明了集装箱,根据货物的形状、大小,使用不同规格的集装箱进行装载,然后再放在运输机上运输。
 
集装箱密封,只有货物到达目的地才需要拆封,在运输过程中能够在不同的运输机上平滑过渡,避免了资源的浪费。
在这里插入图片描述
Docker 容器就是利用了集装箱的思想,为应用程序提供基于容器的标准化运输系统。
 
Docker可以将任何应用及其依赖包打包进一个轻量级、可移植、自包含的容器。容器几乎可以运行在所有操作系统上。
 
因此才有了那句话 “Build Once,Run Anywhere(生成一次,到处运行)”。Docker的思想从其Logo中也不难看出——一堆可移动的集装箱,如下图所示。
在这里插入图片描述

🍑 容器与虚拟化

传统的虚拟机技术是模拟出一套硬件,在其上运行一套完整的操作系统,拥有自己独立的内核。
 
虚拟机包含应用程序、必需的库或二进制文件,以及一个完整的 Guest 操作系统。
 
而容器没有进行硬件虚拟,容器包含应用程序和它所有的依赖,容器中的应用进程直接运行在宿主机的内核上,与宿主机共享内核,因此容器比传统的虚拟机更加轻便。
 
容器技术与虚拟化技术都对需要运行的东西进行隔离,形成一个独立的运行空间,与宿主机系统互不干扰。虚拟化技术是基于系统的隔离,它对物理层面的资源进行隔离,如下图所示。
在这里插入图片描述
而容器技术与之不同,容器的隔离空间中运行的是应用程序,隔离是基于程序的,不需要将系统隔离,如下图所示。
在这里插入图片描述
相较于虚拟化,容器是更加快捷方便的技术,它的部署与迁移都十分快速,结构更加精简,运行速率更高。
 
而虚拟化技术需要系统隔离,结构腑肿,无论是部署还是迁移都要消耗大量时间,每次创建都要新建系统,为用户的操作带来不便。

🍑 性能差别

虚拟化与容器还有着性能上的区别,如下表所示。
在这里插入图片描述
Docker容器的操作系统是共享的,虚拟化的操作系统是独立的,所以后者的隔离性更强,但也注定结构复杂,无法被广泛应用到企业中。
 
如今,容器技术已进入成熟阶段,为开发人员与运维人员提供了更大的灵活性。容器可以快速部署,提供不变的基础架构。它们还取代了传统的修补过程,使组织可以更快地响应问题,并使应用程序更易于维护。
 
容器化之后,应用程序可以部署在任何基础架构上,如虚拟机、服务器以及运行不同虚拟机管理程序的各种公共云。许多企业从在虚拟化基础架构上运行容器开始,发现无须更改代码即可轻松地将其迁移到云。
 
容器本身具有固有的安全性。Docker容器在应用程序之间以及应用程序与主机之间创建隔离层,并通过限制对主机的访问来减少主机对外暴露的面积,从而保护主机与主机上的其他容器。
 
在服务器上运行的Docker容器具有与在虚拟机上运行时相同的高级限制,来保证业务的安全性。
 
Docker容器还可以通过保护虚拟机本身并为主机提供深度防御来与虚拟化技术完美结合。
目前,大多数企业都有成熟的虚拟化环境,包括备份、监视、自动化工具以及与之相关的人员和流程。

🍑 Docker优势

目前,Docker 发展趋势十分乐观,在企业中得到了广泛应用。接下来,我们将对 Docker 的优势进行详细介绍。

编排有序

在以往的项目交付过程中,常常出现在开发人员这里能够正常运行,到了运维人员那里却无法正常运行的情况,使业务不能在第一时间完成上线,导致交付过程效率低下。
 
Docker 提供了一种全新的发布机制。这种发布机制使用Docker镜像作为统一的软件制品载体,以Docker 容器作为统一运行环境,通过 Docker Hub 提供镜像统一协作,最重要的是使用Dockerfile 定义容器内部行为和容器关键属性来做支撑,从而使整个开发交付周期中软件环境保持统一,大大提高了产品交付效率。
 
Dockerfile 处于整个机制的核心位置。因为在 Dockerfile 中,不仅能够定义使用者要在容器中进行的操作,而且能够定义容器中的软件运行需要的配置,实现了软件开发和运维在配置文件上达成统一。运维人员能够使用 Dockerfile 在不同场合下部署出与开发环境一模一样的 Docker 容器。

高效易迁移

Docker 容器基于开放式标准,几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机、服务器等。这种兼容性可以让用户轻松地把一个应用程序从一个平台直接迁移到另外一个平台。
 
Docker 是一款轻量级应用,在一台机器上运行的多个 Docker 容器可以共享这台机器的操作系统内核,能够做到快速启动,只需占用很少的服务器资源。镜像是通过文件系统层进行构造的,并共享一些公共文件,这样就能有效降低磁盘用量,使用户能够更快地下载镜像。

快速部署

公司进行业务迁移的时候(例如,公司的 IDC 机房要进行搬迁,业务要迁移到云服务器上),通常需要将所有应用在云服务器上重新部署,这些烦琐的工作极大地浪费了人力,并降低了工作效率。
 
利用Docker容器可以简化这项工作,实现快速部署。人们只需要在云服务器上运行相应的容器,无须考虑环境因素。
 
Docker 赋予应用的隔离性还独立于底层的基础设施。Docker 默认提供最强的隔离,因此应用出现间题也只是单个容器的问题,不会影响到整台机器。

举报

相关推荐

0 条评论