在现代软件开发和运维领域,容器化技术已经成为不可或缺的一部分,而 Docker 正是其中的佼佼者,它通过将应用程序及其依赖项打包到一个轻量级、可移植的容器中,极大地简化了应用的部署、扩展和管理流程,对于广泛使用的服务器操作系统 CentOS 安装 Docker 是开启容器化之旅的第一步,本文将详细介绍在 CentOS 系统上安装 Docker 的完整流程,并提供一些后续配置建议。

准备工作:系统要求与旧版本清理
在开始安装之前,请确保您的系统满足以下基本条件:您需要一台运行 CentOS 7 或 CentOS 8 及以上版本的 64 位服务器,并且拥有具备 sudo 权限的用户账户,稳定的互联网连接是必须的,以便从官方仓库下载所需的软件包。
为了防止潜在的冲突,一个良好的实践是首先检查并卸载系统中可能存在的旧版本 Docker,旧版本可能被称为 docker 或 docker-engine,您可以使用以下命令来移除它们:
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
执行此命令后,yum 会提示您确认是否卸载,旧版本卸载后,/var/lib/docker/ 目录中的镜像、容器、卷和网络等会被保留,但新版本的 Docker 通常可以继续使用这些数据。
安装 Docker Engine:一步步操作指南
Docker 官方推荐通过其提供的仓库来安装 Docker Engine,这样可以确保获得最新版本并简化未来的升级过程。
第一步:安装必要的依赖
在添加 Docker 仓库之前,我们需要安装 yum-utils 软件包,它提供了 yum-config-manager 工具。device-mapper-persistent-data 和 lvm2 是 Docker 的存储驱动程序所需的依赖项。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
第二步:添加 Docker 官方仓库
使用 yum-config-manager 来设置稳定的 Docker 官方仓库,这个仓库包含了 Docker 社区版(Docker CE)的软件包。
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
执行成功后,Docker 仓库的配置文件就会被添加到 /etc/yum.repos.d/ 目录中。

第三步:安装 Docker Engine
我们可以安装 Docker Engine、命令行界面(CLI)和容器运行时了,运行以下命令,yum 会自动从我们刚刚添加的仓库中获取最新版本的软件包。
sudo yum install -y docker-ce docker-ce-cli containerd.io
此命令会安装 Docker 社区版(docker-ce)、其客户端(docker-ce-cli)以及底层的容器运行时 containerd。
第四步:启动并启用 Docker 服务
安装过程不会自动启动 Docker 守护进程,我们需要手动启动它,并设置其为开机自启,以确保服务器重启后 Docker 服务能自动运行。
sudo systemctl start docker sudo systemctl enable docker
第五步:验证安装是否成功
为了验证 Docker 是否已正确安装并运行,可以执行一个经典的测试命令,这个命令会下载一个 hello-world 测试镜像并在容器中运行它。
sudo docker run hello-world
如果看到一段包含 "Hello from Docker!" 的欢迎信息,那么恭喜您,Docker 已经在您的 CentOS 系统上成功安装并运行了,这个信息表明 Docker 守护进程从 Docker Hub 拉取了镜像,创建了一个新容器,并在其中执行了应用程序。
安装后配置:免 sudo 使用 Docker
默认情况下,docker 命令需要使用 sudo 权限来运行,因为 Docker 守护进程绑定到了一个 Unix socket 而不是 TCP 端口,这个 socket 默认只属于 root 用户和 docker 用户组,为了避免每次运行 docker 命令都输入 sudo,您可以将当前用户添加到 docker 用户组中。
sudo usermod -aG docker $USER
请注意:执行此命令后,您需要注销并重新登录,或者使用 newgrp docker 命令刷新用户组权限,更改才能生效,此后,您就可以直接运行 docker 命令而无需 sudo。

为了方便查阅,以下是核心安装步骤的命令汇总:
| 步骤 | 命令 | 说明 | 
|---|---|---|
| 安装依赖 | sudo yum install -y yum-utils device-mapper-persistent-data lvm2 | 
安装配置仓库和存储驱动所需的工具 | 
| 添加仓库 | sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo | 
添加 Docker 官方稳定版仓库 | 
| 安装 Docker | sudo yum install -y docker-ce docker-ce-cli containerd.io | 
安装 Docker Engine 及其组件 | 
| 启动服务 | sudo systemctl start docker && sudo systemctl enable docker | 
启动 Docker 并设置开机自启 | 
| 验证安装 | sudo docker run hello-world | 
运行测试容器以确认安装成功 | 
相关问答 FAQs
为什么我每次运行 Docker 命令都需要使用 sudo?如何解决?
解答:这是因为 Docker 守护进程绑定到了一个需要 root 权限的 Unix socket (/var/run/docker.sock),默认情况下,只有 root 用户和 docker 用户组的成员才有权限访问这个 socket,要解决这个问题,您可以将您的用户账户添加到 docker 用户组中,执行命令 sudo usermod -aG docker $USER,然后务必注销系统并重新登录,使权限更改生效,之后,您就可以在不使用 sudo 的情况下直接运行 docker 命令了。
从 Docker Hub 拉取镜像时速度非常慢,我该怎么办?
解答:由于网络原因,在中国大陆地区从 Docker Hub 官方仓库拉取镜像可能会比较慢,一个有效的解决方案是配置国内镜像加速器,许多云服务商(如阿里云、腾讯云、网易云等)都提供了免费的 Docker 镜像加速服务,您需要登录相应云服务商的控制台获取专属的加速器地址,创建或编辑 /etc/docker/daemon.json 文件,添加如下内容(以阿里云为例):
{
  "registry-mirrors": ["https://your-mirror-address.mirror.aliyuncs.com"]
}
将 your-mirror-address 替换为您自己的加速器地址,保存文件后,执行 sudo systemctl daemon-reload 和 sudo systemctl restart docker 命令重启 Docker 服务即可生效,这样,在拉取镜像时,Docker 会优先从您配置的国内镜像源下载,从而显著提升速度。