Docker 安装教程
检查系统版本
在安装 Docker 之前,首先确认你的 Alibaba Cloud Linux 版本:
cat /etc/os-release | grep VERSION_ID根据输出结果判断:
- 如果显示
VERSION_ID="2",则为 Alibaba Cloud Linux 2 系列 - 如果显示
VERSION_ID="3",则为 Alibaba Cloud Linux 3 系列
卸载旧版本
在安装官方版本的 Docker 之前,需要先卸载系统可能自带的旧版本 Docker 包:
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine注意:如果系统提示这些包未安装,可以忽略该提示,直接进行下一步。
yum 与 dnf 的区别
在 Alibaba Cloud Linux 等基于 RPM 的系统中,包管理器经历了从 yum 到 dnf 的演进。
yum(Yellowdog Updater Modified)是早期 Red Hat 系 Linux 发行版的默认包管理器,用于安装、更新、删除和管理 RPM 软件包。
dnf(Dandified YUM)是 yum 的下一代版本,从 Fedora 18 开始引入,并在 RHEL 8 / CentOS 8 及之后版本中成为默认包管理器。
两者的关系
dnf 是 yum 的重构升级版,保持与 yum 命令的高度兼容:
- yum 命令可以直接用 dnf 替代
- 命令参数和用法基本一致
- 在新系统中,
yum实际上是dnf的软链接
为什么推荐使用 dnf?
| 对比项 | yum | dnf |
|---|---|---|
| 依赖解析 | 使用外部依赖解析库,效率低 | 内置 libsolv 库,解析更快更准确 |
| 内存占用 | 内存占用较高 | 内存占用更低 |
| 性能 | 元数据处理较慢 | 性能显著提升 |
| 依赖问题 | 可能产生依赖冲突 | 更智能的依赖解决机制 |
| API | Python 2.x | 支持 Python 3.x |
总结:dnf 解决了 yum 长期存在的性能问题和依赖解析缺陷,是现代 RHEL 系系统的标准选择。Alibaba Cloud Linux 2/3 推荐使用 dnf。
安装 dnf 插件并添加 Docker 仓库
在安装 Docker 之前,需要先配置 Docker 的官方软件源:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo命令解释
第一条命令:sudo dnf -y install dnf-plugins-core
这个命令安装 dnf 的核心插件包。简单来说:
dnf-plugins-core是 dnf 的功能扩展包- 安装后,dnf 就能使用
config-manager等额外命令 -y参数表示自动确认安装,无需手动输入y
打个比方:就像手机需要先安装「应用商店」App,才能从商店里下载其他应用。这个插件包就是让 dnf 拥有「管理软件源」的能力。
第二条命令:sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
这个命令添加 Docker 官方的软件仓库。简单来说:
config-manager是 dnf 的仓库管理工具--add-repo表示添加一个新的软件源- 后面的 URL 是 Docker 官方提供的仓库地址
打个比方:就像告诉系统「以后去 Docker 官方商店买东西」,系统就知道去哪里下载 Docker 软件了。
为什么要这样做?
默认情况下,系统只知道去系统自带的软件仓库下载软件。但 Docker 官方版本不在系统默认仓库中,所以需要先告诉系统 Docker 官方仓库的地址,后续才能安装最新版本的 Docker。
常见问题:SSL 连接错误
SSL 连接错误
如果执行添加仓库命令时出现以下错误:
Curl error (35): SSL connect error for https://download.docker.com/linux/centos/docker-ce.repo
[OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to download.docker.com:443]
Error: Configuration of repo failed这表示添加仓库失败,原因是无法建立 SSL 安全连接。常见原因:
- 国内网络访问 Docker 官方源不稳定
- SSL 证书问题或系统时间不正确
解决方案:使用阿里云镜像源
Alibaba Cloud Linux 用户推荐使用阿里云提供的 Docker 镜像源,访问更稳定:
sudo dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装 Docker
添加仓库后,执行以下命令安装 Docker 及相关组件:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin常见问题:版本识别错误
如果安装时报错:
Status code: 404 for https://mirrors.aliyun.com/docker-ce/linux/centos/3/x86_64/stable/repodata/repomd.xml
Error: Failed to download metadata for repo 'docker-ce-stable': Cannot download repomd.xml这是因为 Docker 仓库无法识别 Alibaba Cloud Linux 的版本号($releasever 为 2 或 3),但镜像源中不存在 centos/2 或 centos/3 路径。
解决方案:修改仓库配置文件
需要将 $releasever 替换为兼容的 CentOS 版本:
- Alibaba Cloud Linux 3 → 替换为
8 - Alibaba Cloud Linux 2 → 替换为
7
# 修改仓库配置,将 $releasever 替换为 8
sudo sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo修改后重新安装:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin验证安装
安装完成后,使用以下命令验证 Docker 是否安装成功:
docker -v如果安装成功,会输出类似以下内容:
Docker version 26.1.3, build b72abbb这表示 Docker 已正确安装。还可以查看 Docker Compose 版本:
docker compose version输出示例:
Docker Compose version v2.27.0启动 Docker
安装完成后,需要启动 Docker 服务。执行以下命令:
sudo systemctl enable --now docker命令参数解释
什么是 systemctl?
systemctl 是 Linux 系统中用于管理 systemd 服务的命令行工具。systemd 是现代 Linux 发行版(包括 Alibaba Cloud Linux)的初始化系统和服务管理器,负责启动和管理系统服务。
简单理解:systemctl 就像是服务的「遥控器」,你可以用它来启动、停止、重启、查看状态等。
这个命令包含两个参数:
| 参数 | 含义 |
|---|---|
enable | 设置 Docker 服务开机自启动 |
--now | 立即启动服务(不用单独执行 start 命令) |
简单理解:enable --now 相当于同时执行了两条命令:
sudo systemctl enable docker- 设置开机自启sudo systemctl start docker- 立即启动服务
Docker 服务常用命令
| 命令 | 作用 |
|---|---|
sudo systemctl start docker | 启动 Docker 服务 |
sudo systemctl stop docker | 停止 Docker 服务 |
sudo systemctl restart docker | 重启 Docker 服务 |
sudo systemctl status docker | 查看 Docker 服务状态 |
sudo systemctl enable docker | 设置开机自启 |
sudo systemctl disable docker | 取消开机自启 |
运行测试镜像
启动 Docker 后,运行 hello-world 镜像验证安装是否成功:
sudo docker run hello-world常见问题:镜像拉取超时
如果出现以下错误:
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/":
net/http: request canceled while waiting for connection
(Client.Timeout exceeded while awaiting headers).这是因为国内无法正常访问 Docker Hub(registry-1.docker.io),需要配置国内镜像加速器。
配置镜像加速器
创建或编辑 Docker 配置文件:
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json添加以下内容:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerhub.icu"
]
}保存后重启 Docker 服务使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker命令解释:
systemctl daemon-reload- 重新加载 systemd 管理器的配置文件
简单理解:systemd 是 Linux 系统的服务管理器。当你修改了服务配置文件(如新增了 daemon.json),systemd 并不知道配置发生了变化。daemon-reload 就是告诉 systemd:「配置文件有变动,请重新读取一下」,这样 systemd 才能正确识别和应用新配置。
打个比方:就像你修改了手机的设置,如果不点击「保存」或「应用」,手机是不会生效的。daemon-reload 就是点击「应用」的那一步。
systemctl restart docker- 重启 Docker 服务,使新配置生效
再次运行测试镜像:
sudo docker run hello-world看到以下输出表示安装成功:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
CodeVortex