第1章 初始dokcer与容器
虚拟机既可以通过 硬件模拟
来实现,也可以通过 操作系统软件
来实现。而容器技术则更为优雅,它充分利用了操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。因此,有人甚至把它称为“新一代的虚拟化”技术,并将基于容器打造的云平台亲切地称为"容器云”。
什么是docker
docker开源项目背景
Docker 是基于 Go 语言
实现的开源容器项目。它诞生于 2013 年年初
,最初发起者是 dotCloud 公司。
在 2013 年年底直接改名为 Docker Inc, 并专注于 Docker 相关技术和产品的开发,目前巳经成为全球最大的 Docker 容器服务提供商。官方网 站为 https://www.docker.com/,
Docker 项目已加入 Linux 基金会,并遵循 Apache 2.0 协议
,全部开源代码均在https:// github.com/docker 项目仓库进行维护。
现在主流的操作系统包括 Linux 各大发行版、 macOS Windows 等都已经支持 Docker
Docker 的构想是要实现 “Build, Ship and Run Any App, Anywhere" ,即通过对应用的封 (Packaging) 、分发 (Distribution) 、部署 (Deployment) 、运行 (Runtime) 生命周期进行管 理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件,既可以是一个 Web 用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。
基于 Linux 平台上的多项开源技术, Docker 提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流云平台。可以说, Docker 首次为应用的开发、运行和部署提 供了“一站式”
的实用解决方案。
Linux 容器技术一一巨人的肩膀
与大部分新兴技术的诞生一样, Docker 也并非“从石头缝里蹦出来的",而是站在前人的肩膀上。其中最重要的就是 Linux 容器 (Linux Containers, · LXC) 技术
。 IBMDeveloper Works 网站关于容器技术的描述十分准确: "容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化 (para-virtualization) 和系统调用替换中的复杂性。"
意思是:
Linux容器技术可以让多个独立的应用程序在同一台服务器上的同一个操作系统实例上运行,每个应用都以为自己独占整个服务器资源。这种技术有效地将由单一操作系统管理的资源划分为独立的组别,从而在不同的应用程序之间进行更好的资源分配和平衡。 相比于传统的虚拟化技术(例如VMware),容器技术的优势在于:
- 不需要指令级模拟或即时编译:因为容器与宿主机共享同一内核,所以可以直接执行原生指令;
- 避免了准虚拟化和系统调用替换的复杂性:容器只需要少量的修改就可以运行在宿主机之上,这使得容器更加轻量级,启动更快,效率更高。同时,这也简化了管理和维护的工作量。
从 Linux 容器到 Docker
在LXC 的基础上, Docker 进一步优化了容器的使用体验,让它进入寻常百姓家。首先, Docker 提供了各种容器管理工具(如分发、版本、移植等),让用户无须关注底层的操作,更 加简单明了地管理和使用容器;其次, Docker 通过引入分层文件系统构建和高效的镜像机 制,降低了迁移难度,极大地改善了用户体验。用户操作 Docker 容器就像操作应用自身一 样简单。
可以将 Docker 容器
理解为一种轻量级的沙盒 (sandbox)
。每个容器内 运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和 停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机
为什么要使用 Docker
Docker 容器虚拟化的好处
Docker 是一种新型的应用部署方式,它允许开发人员将应用程序及其所有依赖项打包到一个轻量级容器中。这个容器可以轻松地在网络上分发并在任何支持 Docker 的平台上运行,无需关心底层操作系统的差异。这种方式极大地提高了开发者的效率,减少了繁琐的配置和迁移问题,并且有助于确保应用在不同环境下的一致行为。
Docker 在开发和运维中的优势
对开发和运维 (DevOps) 人员来说,最梦寐以求的效果可能就是一次创建或配置,之后 可以在任意地方、任意时间让应用正常运行,而Docker 恰恰是可以实现这一终极目标的“瑞 士军刀"。具体说来,在开发和运维过程中, Docker 具有如下几个方面的优势:
Docker是一种新型的应用部署方式,具有以下优点:
- 更快的交付和部署:开发人员可以通过使用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。
- 更高的资源利用率:运行Docker容器不需要额外的虚拟化管理程序的支持,可以实现更高的性能,同时对资源的需求更低。
- 更轻松的迁移和扩展:Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,同时支持主流的操作系统发行版本。
- 更简单的更新管理:使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
总的来说,Docker提供了一种更加灵活和高效的方式来部署和管理应用,大大提升了开发和运维的效率。
Docker 与虚拟机比较
作为一种轻量级的虚拟化方式, Docker 在运行应用上跟传统的虚拟机方式相比具有如下 显著优势:
docker与虚拟化
虚拟化 (virtualization) 技术是一个通用的概念,在不同领域有不同的理解。在计算领 域,一般指的是计算虚拟化 (computing virtualization) ,或通常说的服务器虚拟化。维基百科 上的定义如下:
”在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资 源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结 构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。”
虚拟化的核心是对资源的抽象
,目标往往是为了在同一个主机上同时运行多个系 统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。
基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的 虚拟机技术即属于这个范畴)。前者一般指的是一些模拟设备或诸如 Wine 这样的软件,后者 又可以细分为儿个子类:
Docker 以及其他容器技术都属于操作系统虚拟化
这个范畴,操作系统虚拟化最大 的特点就是不需要额外的 supervisor 支持。
传统方式是在硬件层面实现虚拟化
,需要有额外的虚拟机管理应用和虚拟机操作系统 层。 Docker 容器是在操作系统层面上实现虚拟化
,直接复用本地主机的操作系统,因此更加 轻量级。复用本地的操作系统,不需要单独的虚拟机操作系统
总结
虚拟机是一种通过硬件模拟或操作系统软件实现的虚拟化技术,而容器技术则更为轻量级和灵活,充分利用操作系统本身的机制和特性进行虚拟化。Docker是一个基于Go语言开发的开源容器项目,提供了高效、敏捷和轻量级的容器方案,可以快速创建、分发和部署应用。相比于传统的虚拟机方式,Docker具有更快的启动速度、更高的资源利用率、更方便的迁移和扩展以及更简化的更新管理。虚拟化的核心是对资源的抽象,通过虚拟化技术可以提高系统资源利用率、降低成本、方便管理和容错容灾。与传统虚拟化方式相比,Docker容器在操作系统层面实现虚拟化,复用本地主机的操作系统,更加轻量级。