使用 Docker 启动和拆除环境
我们在探索集成测试和端到端测试时要讨论的最后一个话题是使用流行技术 Docker 进行容器化。它使我们能够在本地和远程环境中以相同的方式启动应用程序。
Docker 给开发人员带来了信心,确保他们的应用程序在不同的环境中表现一致,这对于管理和部署测试环境尤其有用。
Docker 基础
容器是一个软件单元,它将代码及其所有依赖项捆绑在一起,使我们能够在多个环境中运行它。容器的规范称为容器镜像。Docker 引擎解析容器镜像的规范,并将其转化为容器。
容器化与虚拟化的区别
虚拟化是指在单台机器上运行多个操作系统。而容器化是指在单台机器上运行多个在同一操作系统环境中开发的应用程序。 |
图 5.7 描述了在主机环境中运行的容器:

容器是轻量级的,允许多个容器在同一物理硬件上运行。Docker 引擎负责管理这些容器并强制执行隔离级别,确保恶意代码无法逃逸出当前的命名空间,同时也确保测试具有足够的隔离性。实际上,这意味着我们可以下载并运行复杂系统的镜像集,并在共享硬件上运行它们。
例如,我们可以在共享基础设施上运行多个容器:一个 Go web 应用程序、一个数据库、事件总线和队列、监控工具等等。所有这些不同的技术和镜像都可以通过 Docker 引擎这一单一的标准化技术来管理。
使用 Docker
容器化的概念并不专属于 Docker,但我们接下来的讨论将仅限于 Docker 的使用。Docker Engine 可以通过官方文档轻松安装,文档地址为 https://www.docker.com/get-started/。
Docker Engine 配备了一个功能强大的命令行界面(CLI),其中包含两个主要命令:
-
docker 部署和管理单个应用程序或容器。Docker CLI 提供了一个广泛的命令和选项,以下是一些常见的命令:
-
docker pull 从镜像仓库(Docker Hub)下载镜像。下载后,镜像会在本地供容器使用。
-
docker run 从镜像创建容器。如果镜像在本地不可用,Docker 会从镜像仓库下载该镜像,从而延长容器的启动时间。
-
docker ps 列出所有本地运行的容器。此命令通常用于获取每个容器的唯一容器 ID,这些唯一 ID 可以在其他命令中引用特定容器。
-
docker stop 指示容器关闭,允许容器有足够时间优雅地关闭并清理其资源。Docker Engine 使用操作系统信号与容器通信,容器随后可以通过 docker start 命令重启。
-
docker kill 指示容器立即停止执行,而不允许容器优雅地关闭。
-
docker exec 允许我们访问正在运行的容器。由于容器与操作系统其他部分是隔离的,唯一能够访问容器资源和设置的方式是通过 Docker Engine 请求访问。
-
-
docker compose 在同一主机中部署和管理多个容器。通过这个命令,我们可以配置并启动多个容器,一次性完成,而无需分别使用 docker 命令启动每个容器。另一个关键优势是这些容器将在同一组内运行并互相联网,从而使得在不同环境中部署复杂系统变得更加容易。以下是一些常见的 docker compose 命令:
-
docker compose up 启动指定 .yml 文件中的容器。
-
docker compose ps 列出一个 Compose 项目的容器,包括它们的状态和注册端口。当运行 docker ps 命令时,这些容器也会显示,但此命令会输出更多容器信息。
-
docker compose stop 指示正在运行的容器停止,但不会删除它们。然后可以使用 docker compose start 命令重新启动它们。
-
docker compose kill 强制容器立即停止,使用的是 SIGKILL 系统信号。
-
这就是安装 Docker Engine 和执行一些基本 Docker 操作所需了解的基础知识。在第 6 章《为 BookSwap Web 应用进行端到端测试》中,我们将讨论为应用配置自定义 Dockerfile
、对现有实现进行的数据库集成修改,以及如何基于这些易于启动和销毁的容器运行端到端测试。