I. 卸载旧版本

查看是否已安装

1
docker --version

你的 Linux 发行版可能提供非官方的 Docker 软件包,它们可能与 Docker 提供的官方软件包冲突。 在安装官方版本的 Docker Engine 之前,必须卸载这些软件包。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc

卸载 Docker 时,存储在 /var/lib/docker/ 中的映像、容器、卷和网络不会自动移除。

II. 安装 docker

2.1 在 RHEL 上安装 Docker

2.1.1 设置存储库

安装 dnf-plugins-core 软件包(它提供了管理 DNF 资源库的命令)并设置资源库。

1
2
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

2.1.2 国内源替换

1、阿里云源

1
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

2、清华源

1
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

3、中科大源

1
sudo sed -i 's+download.docker.com+mirrors.ustc.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

2.1.3 更新包管理器缓存

1、确认存储库已正确添加

1
sudo dnf repolist

2、清理包管理器缓存

1
dnf clean packages

3、更新软件包管理器缓存

1
dnf makecache

2.1.4 安装 Docker 引擎

1、要安装最新版本,请运行:

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

如果提示接受 GPG 密钥,请验证指纹是否匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果匹配,则接受。

这条命令会安装 Docker,但不会启动 Docker。 它还会创建一个 docker 组,但默认情况下不会向该组添加任何用户。

2、启动 Docker 引擎

1
sudo systemctl enable --now docker

这将配置 Docker systemd 服务在启动系统时自动启动。 如果不想让 Docker 自动启动,请使用 sudo systemctl start docker 代替。

3、运行 hello-world 映像,验证安装是否成功:

1
sudo docker run hello-world

III. 基础配置

参考文档:Docker daemon configuration overview
Docker 守护进程将所有数据保存在一个目录中。这会跟踪与 Docker 相关的所有内容,包括容器、图像、卷、服务定义和机密。
默认情况下,此目录为:

  • 在 Linux 上 /var/lib/docker
  • 在 Windows 上 C:\ProgramData\docker

3.1 更改默认存储目录

创建一个 JSON 文件:

1
/etc/docker/daemon.json

内容指向新的存储位置:

1
2
3
{
  "data-root": "/mnt/docker-data"
}

3.2 添加第三方加速镜像

三方镜像加速(参考:GitHub

1
2
3
4
5
6
7
8
9
{
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.1ms.run",
    "https://hub.mirrorify.net/",
    "https://docker.xuanyuan.me",
    "https://hub.fast360.xyz/"
  ]
}

3.3 应用更改

综合配置参考:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "data-root": "/mnt/docker-data",
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.1ms.run",
    "https://hub.mirrorify.net/",
    "https://docker.xuanyuan.me",
    "https://hub.fast360.xyz/"
  ]
}

重启 Docker 或重启系统:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

如果在重启过程中出现任何错误,请注意 daemon.json 中的空格。 JSON 文件对缩进很敏感,多余或缺少空格都可能导致错误。如果 Docker 重新启动正常,这个新设置将使 Docker 将所有新容器放置到新位置。但是,旧容器将保留在 /etc/default/docker 中。建议删除所有旧容器:

1
docker system prune -a

检查三方加速器是否生效

1
docker info

如果从结果中看到了如下内容,说明配置成功。

1
2
3
Registry Mirrors:
 [...]
 https://docker.1panel.live

并再次下载它们:

1
docker pull <container-name>

IV. 报错解决

4.1 报错 1

1
2
3
4
5
6
问题 1: 安装的软件包的问题 podman-4:4.9.4-23.module+el8.10.0+2064+309a12a4.x86_64
  - package podman-4:4.9.4-23.module+el8.10.0+2064+309a12a4.x86_64 from @System requires runc >= 1.0.0-57, but none of the providers can be installed
  ....
  - package containerd.io-1.7.28-1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-6.module+el8.10.0+2001+6a33db9f.x86_64 from @System
  问题 2: package podman-4:4.9.4-1.module+el8.10.0+1815+5fe7415e.x86_64 from appstream requires runc >= 1.0.0-57, but none of the providers can be installed
  - package containerd.io-1.7.27-3.1.el8.x86_64 from docker-ce-stable conflicts with runc provided by runc-1:1.1.12-1.module+el8.10.0+1815+5fe7415e.x86_64 from appstream

问题原因:因为 Rocky 8 中已经安装了 podman 容器,再安装 docker 的时候会报以上错误。

查看是否已安装 Podman

1
rpm -q podman

卸载 Podman

1
2
dnf remove podman
dnf remove buildah

V. 参考文档

Docker 官方文档:https://docs.docker.com/

Ubuntu 安装文档:https://docs.docker.com/engine/install/ubuntu/

CentOS 官方文档:https://docs.docker.com/engine/install/centos/

Docker 历史版本:https://docs.docker.com/engine/release-notes/

Docker 阿里云源:docker-ce镜像 (aliyun.com)

Docker 清华源:docker-ce 清华大学开源软件镜像站

Docker 中科大源:Docker CE - USTC Mirror Help