首先,什么是 Docker?
Docker 是一种软件工具,它通过使用(大部分)www 包(称为容器),能够实现操作系统级虚拟化。这与更加传统的虚拟机不同,后者使用硬件虚拟化。了解 Docker 需要了解硬件虚拟化和操作系统级虚拟化。
操作系统与硬件虚拟化的比较
硬件虚拟化(即虚拟机)通过在物理服务器上运行软件来实现,物理服务器被称为管理程序,可实现服务器物理硬件的虚拟化。此款管理程序能够在单个服务器上同时运行多个不同类型的操作系统。
操作系统虚拟化(即容器)是通过在物理服务器上运行完整的操作系统,然后在该操作系统中运行容器引擎来实现的。该容器引擎支持操作系统内核(操作系统的核心)与容器内运行的应用程序共享。通过与容器共享操作系统的核心功能,这些容器的大小比传统虚拟机要小得多。
Docker 简史
Docker 最初是一家名为 dotCloud 的平台即服务 (PaaS) 公司,由 Solomon Hykes 和 Sebastien Pahl 于 2011 年创立。这款软件一开始只是一个内部项目,最终于 2013 年在 PyCon 上面向公众首次亮相,同年 3 月作为开源项目发布。此后 Docker 迅速流行起来,由 RedHat(2013 年)和亚马逊云计算服务(2014 年)等公司提供 Docker 商业服务,2014 年与 Stratoscale 和 IBM 建立合作关系。
截至 2018 年,Docker 提供了以下有关其服务全球使用情况的统计数据:
Docker 对你来说意味着什么?
与独立的应用程序和虚拟机相比,Docker 有几个主要的技术优势,其中包括:
- 与操作系统无关的镜像 ── Docker 容器是从 Docker 镜像构建的,与操作系统无关,因此可以部署在 Docker 引擎能够运行的任何平台上。这意味着,例如,你可以简单有效地将可能在 Linux 服务器上运行的应用程序堆栈(在 Docker 中运行)迁移到 Windows 服务器,反之亦然。
- 简单的服务器升级 ── 由于 Docker 容器是从操作系统中分离出来的,因此可以应用主机服务器升级,无需考虑应用程序堆栈是否会受到影响。
- 简单快照 ── Docker 容器可以在你运行应用程序的某个时间点进行映像以创建快照。这提供了创建简单快照的能力,类似于正在运行的容器,其大小比传统虚拟机映像要小得多。
- 版本控制 ── 利用快照特性并使用版本详细信息标记创建的映像可以对应用程序堆栈进行版本控制。此外,创建镜像的基础数据库 Dockerfile 可以在版本控制系统 (VCS) 中维护,因为它们只是为创建镜像设定环境而指定命令的文本文件。
- 生态系统 ── Docker 提供 Docker 中心,这是全球 Docker 映像库,其中包含 100,000 多个预先创建的跨软件各领域的映像。大多数知名软件供应商(如微软、甲骨文和 Atlassian)都为该库做出了贡献,为全球一些最常用的应用程序提供官方镜像和完整文档记录。
- 中央文件访问 ── Docker 提供在容器和主机服务器之间映射存储卷的能力。这提供了在单台机器上管理应用程序堆栈文件系统的能力,而传统中文件系统会跨多个虚拟机。
- 简单的应用程序升级 ── Docker 容器可通过停止当前容器、移除当前容器并运行与更高版本相关的容器来进行简单的升级。为了保留用户数据,任何文件都应该映射到位于主机上的连接的 Docker 卷。
- 简单的应用程序配置变更 ── 关键应用程序设置可作为 Docker 环境变量提供,在初始 Docker 运行命令中传递给应用程序。这实现了更改设置的能力,例如应用程序的堆栈大小,只需使用相关环境变量的新值重新启动容器即可。
- 基础设施即代码 (IaC) ── Docker 提供了在单个文件(Docker Compose 文件)中定义应用程序堆栈以及相关网络连接和存储的能力。这本质上是你的 IaC,使用 YAML 文件格式,因此它可以存储在 VCS 中并进行适当的版本控制。
在业务层面,已证明在机构内使用 Docker 可以提高以下关键领域的绩效:
Docker 入门
要初步了解 Docker,你需要考虑 Docker 引擎的位置。你可以选择在你的物理或云端提供商的服务器或虚拟机上运行你自己的 Docker 引擎。
或者,还有许多容器即服务 (CaaS) 产品,例如:
在配置了容器运行的基础设施之后,你需要为你的应用程序堆栈创建或识别相关镜像。你可以从三种方法中进行选择:
- 创建你自己的 Dockerfile
- 扩展当前的 Dockerfile
- 使用现有的 Dockerfile/镜像
最后,配置基础设施并且创建或识别镜像之后,你需要从镜像运行 Docker 容器,确保配置相关的环境变量、网络连接和存储卷。
Docker 和 Kubernetes 是否相同?
简短的回答:不相同。
然而,Kubernetes 使用 Docker 容器,因此两者是紧密相连的。Kubernetes 是一个容器编排系统,提供管理、布置、扩展和路由的能力。相似地,Docker 提供 Docker Swarm 作为替代的编排系统。
想要了解更多信息?请密切关注我们即将发布的关于 Kubernetes 的下一篇博客!