Skip to content

Docker 安装教程

检查系统版本

在安装 Docker 之前,首先确认你的 Alibaba Cloud Linux 版本:

bash
cat /etc/os-release | grep VERSION_ID

根据输出结果判断:

  • 如果显示 VERSION_ID="2",则为 Alibaba Cloud Linux 2 系列
  • 如果显示 VERSION_ID="3",则为 Alibaba Cloud Linux 3 系列

卸载旧版本

在安装官方版本的 Docker 之前,需要先卸载系统可能自带的旧版本 Docker 包:

bash
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?

对比项yumdnf
依赖解析使用外部依赖解析库,效率低内置 libsolv 库,解析更快更准确
内存占用内存占用较高内存占用更低
性能元数据处理较慢性能显著提升
依赖问题可能产生依赖冲突更智能的依赖解决机制
APIPython 2.x支持 Python 3.x

总结:dnf 解决了 yum 长期存在的性能问题和依赖解析缺陷,是现代 RHEL 系系统的标准选择。Alibaba Cloud Linux 2/3 推荐使用 dnf。

安装 dnf 插件并添加 Docker 仓库

在安装 Docker 之前,需要先配置 Docker 的官方软件源:

bash
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 镜像源,访问更稳定:

bash
sudo dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 Docker

添加仓库后,执行以下命令安装 Docker 及相关组件:

bash
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/2centos/3 路径。

解决方案:修改仓库配置文件

需要将 $releasever 替换为兼容的 CentOS 版本:

  • Alibaba Cloud Linux 3 → 替换为 8
  • Alibaba Cloud Linux 2 → 替换为 7
bash
# 修改仓库配置,将 $releasever 替换为 8
sudo sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

修改后重新安装:

bash
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装

安装完成后,使用以下命令验证 Docker 是否安装成功:

bash
docker -v

如果安装成功,会输出类似以下内容:

Docker version 26.1.3, build b72abbb

这表示 Docker 已正确安装。还可以查看 Docker Compose 版本:

bash
docker compose version

输出示例:

Docker Compose version v2.27.0

启动 Docker

安装完成后,需要启动 Docker 服务。执行以下命令:

bash
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 镜像验证安装是否成功:

bash
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 配置文件:

bash
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

添加以下内容:

json
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.icu"
  ]
}

保存后重启 Docker 服务使配置生效:

bash
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 服务,使新配置生效

再次运行测试镜像:

bash
sudo docker run hello-world

看到以下输出表示安装成功:

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

Released under the MIT License.