在 Ubuntu 上安装 Docker:从零到第一个容器

本教程为初学者提供了一份详尽的指南,从准备 Ubuntu 系统开始,一步步教你如何安装和配置 Docker,并成功运行你的第一个容器化应用。

阅读时长: 9 分钟
共 4211字
作者: eimoon.com

如果你想告别“我电脑上明明是好的” / “我本地没问题” / “在我这儿能跑”这些经典甩锅台词,那么容器化(containerization)技术就是你的不二之选。

简单来说,容器化技术允许你将应用程序打包到轻量级、隔离的环境中,这些环境被称为容器 (containers)。这些容器包含了运行应用程序所需的一切,如代码和依赖项,但剔除了所有不必要的组件。一个容器化的应用无论是在你的笔记本电脑、测试服务器还是生产环境中,都能保证一致的运行表现。

Docker 至今仍然是 2025 年容器化应用的首选平台。它可以在任何操作系统上运行,但与大多数开发工具一样,基于 UNIX 的系统是首选。

在本文中,你将学习如何在 Ubuntu 上安装 Docker,启动你的第一个容器,以及管理和监控正在运行的容器。整个过程虽然简单,但涉及几个关键步骤。让我们开始吧!

准备 Ubuntu 系统

在 Ubuntu 上安装 Docker 之前,需要先完成一些准备工作。本节将涵盖所有这些任务。

首先,请确保你正在运行一个 Ubuntu 系统,无论是桌面版(Desktop)还是服务器版(Server)。我使用的环境是 Ubuntu Server 24.04

确认你的操作系统版本后,就可以继续下一步了。

检查系统要求

在安装 Docker 之前,请确保你的系统有足够的资源来运行它。

虽然 Docker 官网没有明确指定最低要求(除了兼容的 CPU 架构),但我们发现以下配置足以运行 Docker 本身:

  • 操作系统 (Operating system): Ubuntu Desktop/Server 20.04 或更高版本
  • CPU 架构 (CPU architecture): 64-位 (x86_64 或 arm64)
  • 内存 (Memory): 512 MB RAM
  • 存储 (Storage): 5 GB

具备这些规格的机器可以运行 Docker,但可能无法支持更复杂的任务。不要期望用它来运行复杂的容器或多容器应用。

如果你计划进行更深入的开发,建议至少配备 2 GB 内存 (RAM)25 GB 存储空间以及一个现代 CPU

更新你的 Ubuntu 系统

我们将在一台全新的 Ubuntu Server 实例上运行 Docker,因此我们会提供设置 Docker 先决条件的所有必要命令。

首先,通过运行以下命令更新系统的软件包列表并升级现有软件包:

sudo apt update && sudo apt upgrade -y

这个过程可能需要几分钟,但它能确保你的包管理器获取到最新的软件包版本和安全更新。

安装必备依赖

Docker 的安装和正常运行需要一些依赖包。运行此命令来安装它们:

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

简而言之,上述命令启用了通过 HTTPS 下载软件包的功能,并安装了获取 Docker GPG 密钥所需的工具(我们稍后会讨论)。

至此,你的系统已经为安装 Docker 做好了准备!

在 Ubuntu 上安装 Docker

系统准备工作完成后,在 Ubuntu 上安装 Docker 是一个四步过程。

第 1 步:添加 Docker 的官方 GPG 密钥

Docker 的 GPG (GNU Privacy Guard) 密钥用于签署 Docker 的软件包和仓库,以确保 Docker 镜像和软件包的完整性和真实性。

首先,运行下面的 Shell 命令来下载密钥,并将其转换为 APT 兼容的格式存储在 /usr/share/keyrings 目录下。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

第 2 步:添加 Docker 的官方 APT 仓库

现在,将 Docker 官方仓库添加到你的系统中。

下一个命令会使用先前存储的 GPG 密钥来验证仓库的真实性,然后将其添加到系统软件包源中:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

之后,更新你的系统软件包列表以包含这个新仓库:

sudo apt update

第 3 步:安装 Docker

仓库配置完成后,你就可以在 Ubuntu 上安装 Docker 了。

安装命令将安装核心的 Docker 引擎、其命令行接口 (CLI) 以及用于管理容器执行的运行时:

sudo apt install -y docker-ce docker-ce-cli containerd.io

第 4 步:验证 Docker 安装

Docker 现在应该已经安装在你的系统上了。

为了验证,请在控制台打印 Docker 版本。如果安装成功,你应该能看到一个版本号:

docker --version

输出应类似于: Docker version 27.5.1, build ...

截至 2025 年初,Docker 27.5.1 是最新版本,我们已成功在 Ubuntu Server 上运行它。

Docker 安装后配置

现在你已经安装了 Docker,并准备好开始容器化你的应用。但在那之前,我们建议你完成三个额外的配置步骤,以获得最佳体验。如果你希望 Docker 在系统启动时自动运行作为非 root 用户管理镜像和容器,本节内容不容错过。

第 1 步:启动并启用 Docker 服务

Docker 服务当前正在你的系统上运行,但它在重启后不会自动启动。

为了确保 Docker 在启动时自动运行,使用 systemctl 来启用该服务:

sudo systemctl enable docker

如果看到类似 Created symlink ... 的输出,说明设置成功。

将来,如果你看到任何指示 Docker 未运行的消息(正常情况下不应发生),你可以使用以下命令手动启动 Docker

sudo systemctl start docker

第 2 步:检查 Docker 状态

还有一些额外的 systemctl 命令可以用来管理 Docker 服务。

例如,status 命令显示服务的状态,最常见的状态是 active(活动)、inactive(非活动)或 failed(失败)。

sudo systemctl status docker

如果你的 Docker 服务处于活动状态,说明一切正常。如果看到其他状态,重启服务通常可以解决问题:

sudo systemctl restart docker

重启后,你可以再次检查状态以确认服务正在运行。

第 3 步:作为非 root 用户管理 Docker

默认情况下,运行 Docker 命令需要 sudo,这可能很不方便。这意味着你必须在每个 docker 命令前都输入 sudo

幸运的是,有一个简单的方法可以让非 root 用户运行 Docker 命令——将当前用户添加到 docker 用户组

sudo usermod -aG docker $USER

运行上述命令后,请退出并重新登录,以使更改生效。现在你应该能够不使用 sudo 就运行 Docker 命令了。

测试 Docker 安装

Docker 现已安装和配置完毕。它会在启动时自动运行,并允许你的用户直接运行命令。

在本节中,我们将运行两个容器来完成测试——一个是简单的 “Hello, World!” 示例,另一个是 Python 脚本。

第 1 步:运行一个测试 Docker 容器

Docker 提供了一个名为 hello-world 的简单测试镜像,专门用于确认 Docker 是否正常工作。

运行以下命令来启动该镜像:

docker run hello-world

由于本地没有找到该镜像,Docker 会自动从网上下载它。稍等片刻,你应该会看到类似以下的输出,确认 Docker 已正确安装,Docker 守护进程正在运行,并且你的系统可以从 Docker Hub 拉取镜像。

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

第 2 步:运行你的第一个“真实”容器

如果你想从头开始构建镜像,本节适合你。我们将构建一个运行 Python 3.9 的简单镜像,当启动时,它会执行一个自定义的 Python 脚本。

首先,创建一个专用文件夹和一个将要执行的 app.py 文件:

mkdir python-docker-test && cd python-docker-test
nano app.py

文件中只包含一个简单的 print() 命令,但你当然可以扩展它以包含更复杂的逻辑:

print("Hello from Docker running on Ubuntu!")

在同一文件夹中,创建一个 Dockerfile,它会告诉 Docker 如何一步步构建镜像:

nano Dockerfile

你只需要这三行内容:

FROM python:3.9-slim
COPY app.py /app.py
CMD ["python", "/app.py"]

简单来说,这指示 Docker 从 Docker Hub 获取 python:3.9-slim 镜像,将 app.py 脚本复制到容器中,然后运行该脚本。

现在,你的工作目录中应该有两个文件:app.pyDockerfile

构建镜像,运行以下命令:

docker build -t python-hello .

上述命令会在当前目录(.)下创建一个新镜像,并为其分配标签 python-hello

运行该镜像,使用 docker run 命令后跟镜像标签。可选的 --rm 标志可确保容器在退出后被移除,这在 Python 脚本执行完毕后会立即发生:

docker run --rm python-hello

输出将会是: Hello from Docker running on Ubuntu!

就这样,你已成功在 Ubuntu 上运行的 Docker 中容器化了你的第一个 Python 应用!

Docker 的更新与卸载

在自己的环境中运行 Docker 意味着你拥有完全的控制权,但同时也需要负责跟上最新的更新、新功能和安全补丁。

本节将解释如何执行基本任务,如更新 Docker 和将其从系统中完全移除。

更新 Docker

更新 Docker 主要分为两个步骤:

  1. 更新软件包列表以获取最新的 Docker 版本。
  2. 将 Docker(核心、CLI 和容器管理运行时)升级到最新版本。

在终端中运行以下命令来更新 Ubuntu 上的 Docker:

sudo apt update
sudo apt upgrade -y docker-ce docker-ce-cli containerd.io
docker --version

docker --version 命令会显示当前安装的版本,这是验证 Docker 是否已成功更新的最简单方法。

卸载 Docker

如果你需要从系统中移除 Docker,应首先卸载 Docker 及相关软件包,并删除所有剩余的 Docker 相关文件和配置。

以下四个命令将从你的 Ubuntu 系统中卸载 Docker,请注意,只有前三个是必需的:

# 卸载软件包
sudo apt remove -y docker-ce docker-ce-cli containerd.io
# 删除所有Docker数据
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# 可选:删除Docker仓库源
sudo rm /etc/apt/sources.list.d/docker.list

运行这些命令后,执行 docker --version 应该会返回一个错误,表明 Docker 已不再安装。

Ubuntu 上使用 Docker 的最佳实践

管理 Docker 需要持续的维护,因为你有责任移除未使用的资源并监控性能。

定期清理 Docker 资源

随着时间的推移,未使用的 Docker 镜像、容器、网络和卷会累积起来,占用大量磁盘空间。清理这些资源被称为修剪 (pruning)

记住这个命令——它将一次性移除所有未使用的容器、镜像、卷和网络:

docker system prune -a -f

在一个更“严肃”的环境中,这个命令通常可以释放数十 GB 的磁盘空间。

保护你的 Docker 安装

除了保持 Docker 更新和管理超级用户权限外,以下是增强 Ubuntu 上 Docker 安全性的几个步骤:

  • 限制容器权限: 尽可能避免使用 --privileged 标志运行容器,因为它会禁用许多将容器与主机系统隔离的安全检查。
  • 仅使用官方和受信任的镜像: 不要从未经证实的第三方仓库拉取镜像。坚持使用如 Docker Hub 和私有仓库等可信来源。
  • 启用 Docker 内容信任 (DCT): 设置此环境变量可确保只使用经过签名和验证的镜像。

监控 Docker 性能

Docker CLI 包含了强大的工具,可帮助你监控容器性能并识别潜在问题。

为了演示,我们先修改 app.py 文件,让它在容器启动后保持运行:

import time

time.sleep(10000)
print("Hello from Docker running on Ubuntu!")

重新构建并运行镜像,这次不加 --rm 参数,以便它在后台保持运行。

列出运行中的容器 (docker ps) ps 命令列出所有当前正在运行的容器:

docker ps

实时监控资源使用 (docker stats) stats 命令实时显示所有运行中容器的资源使用情况,包括 CPU、内存和网络消耗:

docker stats

获取容器详细信息 (docker inspect) 如果你需要容器资源使用和配置的详细分类,请使用 inspect 命令,并提供容器 ID:

docker inspect <container_id>

查看容器日志 (docker logs) logs 命令可以帮助诊断问题并可能确定其原因,它也需要容器 ID:

docker logs <container_id>

进入容器内部 (docker exec) 有时,你可能需要直接连接到正在运行的容器。如果你知道容器 ID,这很简单:

docker exec -it <container_id> bash

该命令会在指定的 Docker 容器内打开一个 shell,允许你直接访问或修改文件。

总结

今天,你学习了如何在 Ubuntu 上安装、配置和管理 Docker。如果你遵循了每一步,你的系统上现在应该运行着一个配置好的 Docker,它会在系统启动时自动运行,并且不需要超级用户权限来管理容器。你还学会了如何验证 Docker 安装、运行测试容器,甚至构建了你的第一个自定义 Python 容器化应用。

这仅仅是个开始。容器化的世界远不止于此,我们强烈建议你探索更多资源来精通 Docker。

常见问题 (FAQs)

Docker 是用来做什么的? Docker 用于自动化将应用程序部署到轻量级容器中。这些容器将应用及其依赖项打包到一个与主机环境隔离的可复现环境中。

Ubuntu 适合运行 Docker 吗? Ubuntu 是运行 Docker 的绝佳选择,无论是桌面版还是服务器版。它是一个广受开发者喜爱的流行且稳定的 Linux 发行版。当然,你也可以在其他 Linux 发行版上运行 Docker。

我为什么要使用 Docker? Docker 提供了在开发/测试/生产环境中保持一致性的好处,加快了应用部署速度,简化了扩展,同时使应用在不同环境和系统间的迁移变得容易。

Docker 和虚拟机有什么区别? Docker 容器共享主机的操作系统内核和资源,这使它们比虚拟机更轻量、更快。而虚拟机运行独立的操作系统,需要更多的系统资源。

我如何知道 Docker 是否正常工作? 你可以通过运行 docker --version 命令来检查 Docker 是否已安装。此外,运行一个像 hello-world 这样的简单测试容器将验证 Docker 是否功能正常。

关于

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计