跳至主要内容

Docker Hello World:开始使用并验证一切正常运行

运行 docker run hello-world 是最快的方式,用于确认您的 Docker 安装是否正常、了解执行容器时发生了什么,并在构建真实应用之前排查常见的安装问题。
· 7分钟 阅读

使用 AI 探索

您已经运行了安装程序,完成了设置,Docker 也显示已就绪。但如何真正确认呢?网上的每份 Docker 指南都假设您已验证过环境,却很少有人告诉您这一步该怎么做。

好消息是,Docker 提供了一个名为 hello-world 的内置测试镜像,用于确认一切工作正常。您只需运行一条命令,就能立即得到反馈,判断 Docker 是否配置正确。

本文将向您展示 hello-world 镜像的作用、如何运行、输出意味着什么,以及在出现问题时如何修复常见错误。

运行完 Hello World 示例后,您就可以开始学习 Docker 基础了。我们的 Introduction to Docker 课程可让您在一个下午就上手。

什么是 Docker Hello World?

hello-world 镜像是 Docker 官方用于测试安装情况的诊断工具。

Docker 维护了这个镜像,使其成为可证明 Docker 正常工作的最小容器。它是一个极小的可执行程序,只会打印一条确认消息然后退出。就这么简单。

Docker 提供 hello-world 是因为新用户需要快速验证三件事:

  • Docker 是否已在您的系统上正确安装
  • 您是否拥有运行 Docker 命令的正确权限
  • Docker 守护进程是否可访问并能响应请求

可以把它类比为安装 Python 后运行 python --version。您只是确认工具已可用——还没有开始构建任何东西。

如何运行 Docker Hello World

运行 hello-world 镜像只需一条命令。

docker run hello-world

运行该命令时,Docker 会做两件事:

  • 检查本地是否存在该镜像。Docker 会在本地镜像缓存中查找您是否已下载 hello-world。如果镜像已存在,Docker 会跳过下载,直接运行。

  • 如果本地找不到镜像,Docker 会从 Docker Hub 拉取。Docker Hub 是 Docker 存放官方镜像的默认注册表。hello-world 镜像非常小——只有几 KB,下载很快就能完成。

获取镜像后,Docker 会基于该镜像创建并运行一个容器。容器执行其内置程序,打印确认消息并退出。

运行 Docker Hello World 时会发生什么?

当您运行 docker run hello-world 时,会按以下步骤进行。

首先,Docker 检查本地是否存在该镜像。它会在本地镜像缓存中搜索您是否已下载过 hello-world。如果镜像已存在,Docker 会跳到下一步;否则,Docker 会连接到 Docker Hub 并拉取该镜像。

接着,Docker 基于镜像创建容器。镜像就像模板——包含程序及其运行所需的一切。容器则是该模板的实际运行实例。

容器运行其程序,并在终端打印确认消息。该消息解释了 Docker 刚刚执行的步骤,并确认一切正常。

最后,容器退出。hello-world 程序并非为持续运行而设计。它只会打印消息并立即停止。容器仍保留在您的系统中,但处于停止状态。

整个过程在您运行命令时自动完成;这些步骤都无需您手动操作。

理解 Docker Hello World 的输出

当 hello-world 成功运行时,您会看到多行消息,逐条说明刚刚发生了什么。

Docker 运行 hello-world 的输出

输出首先会确认 Docker 在本地找不到镜像,因此从 Docker Hub 拉取。您会看到类似 "Unable to find image 'hello-world:latest' locally" 的提示,随后是下载进度条。

接下来是确认 Docker 工作正常的主体信息。该消息会带您回顾 Docker 执行的具体步骤。它说明 Docker 守护进程拉取镜像、基于镜像创建容器、运行其中的可执行文件,并将输出流式传输到您的终端。

消息中还包含下一步建议。它会建议您运行更具交互性的容器,例如 Ubuntu,此类容器会保持运行,让您在其中执行命令。这有助于您理解一次性测试容器与开发中实际使用的容器之间的区别。

最后,您会看到容器退出。hello-world 程序的设计就是打印消息并立即停止——它不是长时间运行的服务或应用。一旦确认 Docker 正常工作,容器的任务就完成了。

如果您完整看到这些输出且没有错误,说明您的 Docker 安装工作正常,已经可以运行真实的容器了。

运行 Docker Hello World 时的常见问题

即使是像 hello-world 这样简单的测试,如果 Docker 未正确设置,也可能失败。以下是最常见的问题及其解决方法。

找不到 Docker 命令

如果您看到 "docker: command not found" 或 "docker is not recognized",说明 Docker 未安装,或未加入系统 PATH。

在 Linux 上,检查是否已安装 Docker:

which docker

Image 2 - Docker location

Docker 位置

如果没有任何返回结果,您需要安装 Docker。在 macOS 和 Windows 上,请确保 Docker Desktop 已安装并正在运行。

权限被拒绝错误

您可能会看到 "permission denied while trying to connect to the Docker daemon socket."

当您的用户帐户无权访问 Docker 时会发生这种情况。在 Linux 上,您需要使用 sudo 运行 Docker,或将用户添加到 docker 组:

sudo usermod -aG docker $USER

注销并重新登录以使更改生效。在使用 Docker Desktop 的 macOS 和 Windows 上通常不会遇到此问题。

Docker 守护进程未运行

如果您收到 "Cannot connect to the Docker daemon",说明 Docker 服务未在运行。

在 Linux 上,启动 Docker 服务:

sudo systemctl start docker

在 macOS 和 Windows 上,打开 Docker Desktop。应用程序运行时会自动启动守护进程。就绪后,您会在系统托盘看到 Docker 图标。

拉取镜像的网络问题

有时 Docker 无法从 Docker Hub 下载 hello-world 镜像。您会看到有关拉取失败或连接超时的错误。

请先检查您的网络连接。如果处于公司防火墙或代理之后,可能需要为 Docker 配置代理。在 Linux 上,可在 /etc/systemd/system/docker.service.d/http-proxy.conf 中配置;在 Docker Desktop 中,可在设置里配置代理。

如果这些方法仍无效,错误消息通常会指明方向——请仔细阅读。

运行 Docker Hello World 之后该做什么

既然已确认 Docker 正常工作,接下来可以这样做。

运行一个真正的容器,带有交互式 Shell。尝试拉取并运行一个 Ubuntu 容器:

docker run -it ubuntu bash

Image 3 - Ubuntu bash

Ubuntu bash

-it 标志会在容器内为您提供一个交互式终端。您可以运行命令、安装软件包并探索容器的工作方式。输入 exit 以退出容器。

探索可用镜像 于 Docker Hub。您会发现诸如 PostgreSQL、MySQL 等数据库的官方镜像,Python、Node.js 等编程语言的镜像,以及 Redis、Nginx 等工具的镜像。访问 hub.docker.com 浏览,或直接在命令行中搜索:

docker search python

可用的 Python 镜像。

使用 Dockerfile 构建您自己的镜像。从简单开始:创建一个名为 Dockerfile 的文件,将您的应用代码复制到容器中,并定义如何运行它。即便是只有几行的基础 Dockerfile,也能让您了解镜像如何由指令构建而成。

结语

docker run hello-world 命令只有一个作用:证明您的 Docker 安装可用。

它并不是真实应用,也不会教您如何构建容器或部署生产服务。但它能让您放心,确认 Docker 安装本身没有问题。

如果 hello-world 运行无误并打印出确认消息,说明您的 Docker 环境已正确设置,可以开始使用真实容器。

接下来怎么做?参加我们的 Introduction to Docker 课程,掌握团队协作所需的基础知识。之后,参考我们的 10 个 Docker 项目灵感 一文,动手构建实用项目。

Dario Radečić

作者

Dario Radečić

常驻克罗地亚的高级数据科学家。顶级科技写作者,已发表 700 多篇文章,累计获得超过 1,000 万次阅读。著有《使用 TPOT 实现机器学习自动化》。

FAQs

如何优化 Docker 镜像体积?

从较小的基础镜像(如 Alpine Linux)开始,而不是完整的 Ubuntu 或 Debian 镜像。使用多阶段构建将构建依赖与运行时依赖分离——这样可以通过排除编译器和构建工具来保持最终镜像精简。此外,将 Dockerfile 中的 RUN 命令合并以减少层数,并使用 .dockerignore 防止不必要的文件被复制进镜像。

在生产环境中使用 Docker 的最佳实践有哪些?

切勿以 root 身份运行容器——在 Dockerfile 中创建非 root 用户并切换到该用户。使用特定镜像标签而不是 latest,以确保跨环境的一致部署。为容器设置资源限制(CPU 与内存),防止单个容器耗尽宿主机资源。健康检查同样重要——在 Dockerfile 中定义它们,以便编排工具能检测并重启不健康的容器。

如何将 Docker 集成到 CI/CD 流水线?

大多数 CI/CD 平台(如 GitHub Actions、GitLab CI、Jenkins)都内置 Docker 支持。通常您会在流水线中构建 Docker 镜像,用提交的 SHA 或版本号为其打标签,将其推送到容器注册表(如 Docker Hub 或 AWS ECR),然后部署到目标环境。关键在于自动化构建-打标-推送-部署的流程,使每次代码变更都产出经测试、带版本的容器镜像。

在 Docker 中使用多阶段构建有什么优势?

多阶段构建允许您使用一套工具来构建应用,再用另一套更小的工具来运行它。比如,您可以在包含 Go 编译器的阶段编译 Go 应用,然后仅将编译后的二进制复制到最终阶段的精简 Alpine 镜像中。这能显著减少镜像体积——编译时可能需要 1GB 的构建工具,但运行时只需 20MB。更小的镜像意味着更快的部署和更低的存储成本。

如何确保我的 Docker 容器安全运行?

在部署前使用 Docker Scout 或 Trivy 等工具扫描镜像漏洞。不要在 Dockerfile 或环境变量中存储机密——请使用 Docker secrets 或外部机密管理工具。保持基础镜像更新以获取安全补丁,并使用 --cap-drop 标志移除不必要的 Linux 权限以限制容器能力。此外,在可行的情况下使用只读文件系统,除非绝对必要,切勿在容器内暴露 Docker 套接字。

主题