简介
Docker 是一个用于构建和运行容器的平台。容器会将应用程序及其所需的文件和库打包在一起,使应用程序在不同环境中的行为更加一致。
容器不同于完整的虚拟机。容器会隔离进程和文件系统视图,但与主机共享内核。因此,与虚拟机相比,容器通常启动更快、资源占用更少。
Docker 之所以广受欢迎,是因为开发人员和运维人员经常遇到同一个问题:软件在一台机器上可以运行,在另一台机器上却因为环境不同而失败。容器通过统一应用程序的打包和启动方式,减少了这种环境差异。
在本实验中,你将检查 Docker 环境的运行状况。在正式使用容器之前,需要确认 Docker Engine 已安装、客户端可以与其通信,并且系统能够成功运行测试镜像。
你将完成以下检查:
- 验证已安装的 Docker 版本。
- 运行测试容器,确认系统可以下载并执行镜像。
- 检查容器状态,了解容器的生命周期。
检查 Docker 版本
验证 Docker 环境的第一步,是检查 Docker 命令行界面(CLI)是否可以访问。这可以确认系统的 PATH 中是否包含 docker 命令。
这项检查只能证明客户端工具存在。它还不能证明后台的 Docker Engine 运行正常,也不能证明容器确实可以运行。
打开终端并执行以下命令:
docker --version
示例输出:
Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3
输出会显示已安装的 Docker 版本和构建信息。看到版本号,表示 Docker 客户端已成功安装,并且可以接受命令。
运行测试容器
确认 Docker 客户端可用后,下一步是验证 Docker Daemon(管理容器的后台服务)是否正在运行,以及是否能够启动容器。
客户端与守护进程的分离是 Docker 的核心设计之一。你输入的 docker 命令属于客户端,而守护进程负责实际拉取镜像、创建容器以及管理容器生命周期。
我们将使用官方的 hello-world 镜像完成检查。这个精简镜像专门用于测试安装是否正常。
在终端中运行以下命令:
sudo docker run hello-world
为什么需要使用 sudo?
Docker 守护进程通过 Unix 套接字进行通信。默认情况下,该套接字归 root 用户所有,其他用户只能通过 sudo 访问它。
运行此命令时会发生什么?
- 检查本地镜像: Docker 检查本机是否存在
hello-world镜像。 - 拉取镜像: 如果本地没有找到,Docker 会从 Docker Hub(公共镜像仓库)下载该镜像。
- 运行容器: Docker 使用该镜像创建新容器并执行它。
这个过程也说明了镜像与容器之间的区别。镜像是可重复使用的模板,而容器是根据该模板创建的运行中或已停止的实例。
分析容器输出和状态
在本步骤中,你将分析上一条命令的输出,以确认容器已成功运行。
运行 sudo docker run hello-world 后,你应该会看到类似以下内容的消息:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
这条消息确认 Docker 的完整流程——客户端、守护进程、镜像仓库和容器——都在正常工作。
hello-world 容器的设计目的就是输出这条消息,然后立即退出。虽然它已经停止运行,但该容器仍然存在于系统中。你可以列出所有容器,包括已停止的容器,以验证这一点。
这是学习容器生命周期的第一个重要概念:容器可以处于已退出状态。在 Docker 中,「正在运行」和「存在」相关,但并不是同一个概念。
运行以下命令:
sudo docker ps -a
ps:列出容器。-a(或--all):显示所有容器,而不仅是正在运行的容器。
你应该会在输出中看到 hello-world,其状态为 Exited。这表示容器已创建、运行并成功完成任务。
总结
在本实验中,你已成功验证 Docker 安装。你学会了如何:
- 检查 Docker 版本,以确认 CLI 工具已安装。
- 运行
hello-world容器,以测试与 Docker 守护进程的连接,以及拉取镜像的能力。 - 检查输出并列出容器历史记录,以验证容器是否执行成功。
完成这些检查后,你可以确认当前环境已准备好执行更高级的 Docker 操作。



