迄今为止,我们已经了解了 DevOps 实践和持续集成。但是,最近,容器成为了一个流行词,每个人都希望有第一手的经验,主要原因是为了高效地利用资源。Docker 是用于操作系统虚拟化的一个开源产品,可以自动化应用程序在软件容器中的部署。在 Dev 或者 QA 环境中,运用容器以得到更高的资源利用率,是极其实用的。
在本章中,我们将尝试安装和创建一个样板容器,目标是熟悉 Docker 容器,对容器在应用部署中的用途有所感觉。
本章提供容器的简单概述。我们将聚焦于如下主题:
Docker 容器概述;
理解虚拟机和容器之间的差别;
Docker 的安装与配置;
创建一个 Tomcat 容器。
Docker 容器概述
Docker 提供隔离的用户控件,从而提供基于用户的进程、控件和文件系统。在后台,Docker 共享 Linux 主机内核。图 3-1 说明了 Docker 容器的工作机制:
图 3-1
Docker 有两个主要组件,采用客户端—服务器架构:
Docker Host。
Docker Hub。
下面我们更详细地了解一下它们。
Docker Host:Docker Host 包含 Docker 守护进程、容器和映像。Docker 引擎是提供 Docker 核心技术的重要组件。这种核心技术实现了映像和容器。当我们成功安装 Docker,可以运行一条简单的命令。我们将考虑使用 CentOS 作为容器。使用 docker 命令 run -i -t /bin/bash,在 CentOS 映像中运行交互式命令行解释器:
-i 标志启动交互式容器。
-t 标志创建一个连接到 stdin 和 stdout 的伪终端。
image 是一个 CentOS 映像。
/bin/bash 启动命令行解释器。
运行这个命令时,系统将验证本地有无可用的 CentOS 映像。如果不可用,将从 Docker Hub 下载映像。
映像具有一个文件系统和可在运行时使用的参数,而容器是映像的一个有状态实例。很容易理解,容器是变化的,而映像是不变的。
Docker Hub:Docker Hub 是一个用于 Docker 容器共享和管理的软件即服务(SaaS)产品,是由 Docker 提供的集中注册表服务。作为用户,我们可以用它构建和交付应用程序。这使我们可以创建一个流水线,集成代码存储库,进行协作、映像发现和自动化。
理解虚拟机和容器之间的差别
在我们开始 Docker 安装和容器创建之前,理解容器的不同之处以及与虚拟机的差异是很有帮助的。
我们先来了解一下虚拟机和容器的根本差别。
虚拟机
在虚拟机(VM)中,我们必须安装一个操作系统和相关的设备驱动程序;因此虚拟机的空间占用或者规模是巨大的。安装 Tisheng8 和 Java 的常规 VM 可能占据多达 10GB 的硬盘空间,如图 3-2 所示。
图 3-2
内存管理和设备驱动程序有一定的开销。虚拟机具备常规物理机器运营所需的所有组件。
在虚拟机中,虚拟化管理器(Hypervisor)抽象资源。它不仅包含应用程序,还有必要的二进制文件和程序库,以及整个客户操作系统,如 CentOS 6.7 和 Windows 2003。
云服务提供商使用虚拟化管理器为 VM 提供标准运行时环境。Hypervisors 分为 1 类和 2 类。
容器
容器共享主机的操作系统和设备驱动程序,并从映像中创建,安装了 Tomcat 的容器尺寸小于 500MB,如图 3-3 所示。
图 3-3
容器在规模上较小,因此能够有效地提供更快的速度和更好的性能。它们抽象操作系统。
容器作为相互隔离的用户空间运行。用户空间中的过程和文件系统在主操作系统上,与其他容器共享内核。容器最优秀的方面是共享和资源利用率,由于开销较小,可用资源也更多。容器工作所需的资源很少。
Docker 使不同环境之间的应用程序移植更高效、更简便。
在 CentOS 中安装 Docker 的细节可以阅读「DevOps for web development」:packtpub/networking-and-servers/devops-web-development。
小结
我们在本章中学到了如何在 Windows 10 中安装 Docker 容器,如何使用 Docker Hub 寻找公共领域中可用的镜像。
我们执行了「你好,世界」容器,验证 Docker 是否已经成功安装。验证 Docker 安装之后,我们使用 Docker hub 获取 Tomcat 映像,成功创建了一个 Tomcat 8 容器,并通过浏览器访问。
我们还使用 Jenkins 在 Tomcat 容器中部署了应用程序,目标是利用 docker 容器进行应用部署。