引言
Docker 是一款强大的工具,极大地简化了应用程序容器(Container)的管理。容器允许您在资源隔离的进程中运行应用程序,它们类似于传统的虚拟机(VM),但更加轻量、便携,并且与宿主操作系统(Host OS)共享内核。本教程将详尽指导您如何在 Ubuntu 系统上安装 Docker Community Edition (CE),并逐步学习其核心概念,包括容器(Containers)、镜像(Images)的使用,以及如何将您构建的镜像推送到 Docker Hub。
先决条件
在开始安装 Docker 之前,请确保满足以下条件:
- 一台已按照 Ubuntu 服务器初始设置指南 配置好的 Ubuntu 服务器,其中包含一个具备
sudo
权限的非root
用户并已配置防火墙。 - 如果您计划创建并将自己的 Docker 镜像推送到 Docker Hub(即本文的第 7 和第 8 步),您需要拥有一个 Docker Hub 账户。
1. 安装 Docker
为了确保获取最新版本的 Docker,我们将从官方 Docker 仓库进行安装。
- 首先,更新您当前系统的软件包列表:
sudo apt update
- 安装允许
apt
通过 HTTPS 使用软件包的必要组件:sudo apt install apt-transport-https ca-certificates curl software-properties-common
- 将官方 Docker 仓库的 GPG 密钥添加到您的系统,以验证下载的软件包的真实性:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 将 Docker 仓库添加到 APT 源列表:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
- 通过
apt-cache policy
命令验证docker-ce
将从 Docker 的 Ubuntu 仓库安装:输出结果应显示apt-cache policy docker-ce
docker-ce
的候选版本(Candidate)来自 Docker Ubuntu 仓库。 - 执行安装 Docker Engine 的命令:
sudo apt install docker-ce
- 检查 Docker 服务是否已成功启动并正在运行:
输出应显示服务状态为
sudo systemctl status docker
active (running)
,表明 Docker 守护进程(Daemon)已正常工作。
2. 无需 Sudo 执行 Docker 命令(可选)
默认情况下,docker
命令只能由 root
用户或 docker
用户组中的用户运行。为了避免每次运行 docker
命令时都输入 sudo
,您可以将当前用户添加到 docker
用户组中:
sudo usermod -aG docker ${USER}
要使新的组成员资格生效,您需要注销并重新登录当前会话,或者执行以下命令:
su - ${USER}
系统会提示您输入用户密码。登录后,可以通过 groups
命令验证您是否已成功添加到 docker
用户组:
groups
重要提示: 将用户添加到 docker
组会授予其对 Docker 守护进程(Docker Daemon)的 root
级别访问权限。因此,请务必仅将您信任的用户添加到此组中。
3. Docker 命令基础
docker
命令的基本语法结构是:docker [选项] [命令] [参数]
。
- 要查看所有可用的子命令,可以直接运行:
docker
- 要了解特定
docker
命令的可用选项和用法,可以使用--help
标志:例如,docker docker-subcommand --help
docker run --help
将显示run
命令的详细帮助信息。 - 要查看当前系统范围内的 Docker 相关信息,包括客户端和服务端版本、存储驱动、运行时等:
docker info
4. 使用 Docker 镜像(Images)
Docker 容器(Containers)都是基于 Docker 镜像(Images)构建的。默认情况下,Docker 会从官方的 Docker Hub 拉取这些镜像。
- 通过运行
hello-world
镜像来测试 Docker 是否正常工作:如果docker run hello-world
hello-world
镜像不存在,Docker 会首先从 Docker Hub 下载该镜像,然后运行一个容器并显示一条测试消息,表明安装成功。 - 在 Docker Hub 上搜索您感兴趣的镜像,例如搜索 Ubuntu 镜像:
docker search ubuntu
- 下载官方的
ubuntu
基础镜像到您的本地计算机:docker pull ubuntu
- 查看所有已下载到您本地计算机的 Docker 镜像:
docker images
5. 运行 Docker 容器(Containers)
Docker 容器可以以交互模式运行。例如,使用最新的 ubuntu
镜像运行一个容器,并获取一个交互式的 Shell 访问:
docker run -it ubuntu
一旦容器启动,您的命令提示符(Prompt)会发生变化,表明您已进入容器内部工作环境(例如 root@d9b100f2f636:/#
)。
在容器内部,您可以像在常规 Linux 系统中一样运行任何命令,通常无需 sudo
。例如,更新软件包数据库并安装 Node.js:
apt update
apt install nodejs
node -v
请注意:您在容器内部所做的任何更改仅适用于该容器实例。要退出容器并返回到宿主机的 Shell,只需在容器的提示符处输入 exit
。
6. 管理 Docker 容器
随着您的使用,您的计算机上可能会有许多活动的和非活动的 Docker 容器。
- 查看当前正在运行的活动容器:
docker ps
- 查看所有容器(包括活动的和已停止的):
docker ps -a
- 查看您最近创建的最新容器:
docker ps -l
- 启动一个已停止的容器(可以使用容器 ID 或其自动分配的名称):
docker start 1c08a7a0d0e4
- 停止一个正在运行的容器(同样使用容器 ID 或名称):
docker stop quizzical_mcnulty
- 删除一个不再需要的容器:
在创建新容器时,您可以使用
docker rm youthful_curie
--name
选项为容器指定一个易于记忆的名称,或者使用--rm
选项在容器停止时自动删除它,避免产生大量无用容器。
7. 将容器中的更改提交到 Docker 镜像
当您启动一个 Docker 镜像并进入其容器实例后,您可以在其中创建、修改和删除文件,就像操作一台虚拟机一样。然而,这些更改默认只存在于该容器实例中。若要将容器的当前状态保存为新的 Docker 镜像,您可以使用 docker commit
命令:
docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name
-m
选项用于添加提交信息(Commit Message),说明您对镜像所做的更改。-a
选项用于指定作者信息。container_id
是您之前启动交互式 Docker 会话时获得的容器 ID。repository
通常是您的 Docker Hub 用户名,用于标识镜像的归属。
例如,如果您在容器 d9b100f2f636
中安装了 Node.js,并希望将其保存为新镜像:
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs
这个新的镜像将被保存到您的本地计算机上。再次执行 docker images
命令时,您将看到这个新的镜像及其派生的旧镜像。
8. 将 Docker 镜像推送到 Docker 仓库
在本地创建或修改了新的 Docker 镜像后,您可以将其推送到 Docker Hub 或其他兼容的 Docker 注册表(Registry),以便与他人共享或进行云端部署。
- 首先,登录到 Docker Hub:
系统会提示您输入您的 Docker Hub 密码。
docker login -u docker-registry-username
- 如果您的 Docker Hub 用户名与您创建镜像时使用的本地
repository
名称(例如sammy
)不同,您需要使用docker tag
命令为您的镜像打上正确的标签(Tag):这会将本地镜像docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs
sammy/ubuntu-nodejs
标记为docker-registry-username/ubuntu-nodejs
,使其符合您 Docker Hub 仓库的命名规范。 - 最后,使用
docker push
命令推送您的镜像到 Docker Hub:例如:docker push docker-registry-username/docker-image-name
推送完成后,该镜像应该会列在您的 Docker Hub 账户仪表板上。现在,其他用户就可以通过docker push sammy/ubuntu-nodejs
docker pull sammy/ubuntu-nodejs
命令来拉取并使用您的镜像了。
Docker 与 Docker Compose 的区别
尽管 Docker 允许您构建和运行单个容器,但当您需要管理由多个服务(如 Web 服务器、数据库、缓存等)组成的多容器应用程序时,手动操作会变得非常繁琐。Docker Compose 正是为了解决这一问题而设计的。
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个 YAML 文件(通常命名为 docker-compose.yml
)来配置应用程序的所有服务。您只需在该文件中定义各个服务及其相互依赖关系,然后使用 docker-compose up
命令即可一键启动整个应用程序栈。
下表对比了 Docker CLI 和 Docker Compose 的主要区别:
功能 | Docker CLI | Docker Compose |
---|---|---|
主要用途 | 单容器(Single Container)操作 | 多容器(Multi-Container)编排 |
配置方式 | 命令行参数(CLI Commands) | YAML 配置文件 (docker-compose.yml ) |
依赖处理 | 手动管理服务启动顺序和依赖 | 自动处理关联服务的启动和停止顺序 |
最佳用例 | 测试隔离容器、执行一次性任务 | 本地开发环境、多服务应用集成测试 |
常见 Docker 安装问题排查
在使用 Docker 的过程中,您可能会遇到一些常见问题。以下是针对这些问题的一些排查与修复建议:
- 问题:
docker: command not found
- 修复: 这通常意味着 Docker CLI 工具不在您的系统
$PATH
环境变量中,或者 Docker 安装不完整。您可以尝试重新安装 Docker 或确保/usr/bin
路径已包含在您的$PATH
中。
sudo apt install docker-ce docker-ce-cli containerd.io
- 修复: 这通常意味着 Docker CLI 工具不在您的系统
- 问题:
Cannot connect to the Docker daemon
- 修复: 出现此错误通常是因为 Docker 守护进程(Docker Daemon)未运行,或者当前用户不在
docker
用户组中,没有足够的权限连接到守护进程。
执行第二条命令后,请务必注销(Logout)并重新登录(Login)您的会话,以使新的用户组权限生效。sudo systemctl start docker # 启动 Docker 服务 sudo usermod -aG docker $USER # 将当前用户添加到 docker 组
- 修复: 出现此错误通常是因为 Docker 守护进程(Docker Daemon)未运行,或者当前用户不在
- 问题:GPG 密钥或仓库错误
- 修复: 如果 Docker GPG 密钥服务器或密钥本身发生了变化,您在添加仓库时可能会遇到问题。遇到此类情况,请务必参考 Docker 官方文档 获取最新的 GPG 密钥和仓库添加步骤。官方文档始终是解决这类问题的最权威来源。
Ubuntu 上的 Docker Desktop (Beta)
Docker Desktop 是一款包含 GUI 界面、捆绑的 Docker Engine 和 Kubernetes 支持的桌面应用程序。目前,它也已在 Linux 发行版(包括 Ubuntu)上推出测试版。
安装 Docker Desktop:
sudo apt install ./docker-desktop-<version>-<arch>.deb
重要提示: Docker Desktop 主要设计用于开发环境,不推荐在生产服务器上使用。对于服务器端或无头(headless)环境,强烈建议您继续使用传统的 Docker CE(Community Edition)。
使用 Dockerfile 自动化安装 Docker
对于自动化部署或需要定制化环境的场景,您可以使用 Dockerfile
来定义和构建一个包含 Docker 本身的镜像。这在 CI/CD 流程中非常有用。以下是一个示例 Dockerfile
,用于在 Ubuntu 20.04 基础镜像上安装 Docker:
FROM ubuntu:20.04
RUN apt-get update && \
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \
apt-get update && \
apt-get install -y docker-ce docker-ce-cli containerd.io
如何在 Ubuntu 上卸载 Docker
如果您需要从系统中完全移除 Docker 及其相关组件,请按照以下步骤操作:
sudo apt purge docker-ce docker-ce-cli containerd.io # 卸载 Docker 软件包
sudo rm -rf /var/lib/docker # 删除 Docker 的数据目录
sudo rm -rf /var/lib/containerd # 删除 containerd 的数据目录
如果您之前已将用户添加到 docker
用户组,可能还需要删除该组:
sudo groupdel docker
结论
本教程详细介绍了在 Ubuntu 系统上安装和使用 Docker 的完整过程,涵盖了从 Docker Engine 的安装、基本的容器管理、镜像操作到与 Docker Hub 集成的核心知识。此外,文章还探讨了 Docker CLI 与 Docker Compose 的不同应用场景,并提供了常见的故障排查指南。掌握这些技能将为您基于容器(Container-based)的应用开发、部署和管理奠定坚实的基础。
关于
关注我获取更多资讯

