CentOS 安装 Docker 详细步骤 – wiki基地


CentOS 系统下 Docker 的安装与配置:一份详尽的操作指南

引言

在当今的软件开发与运维领域,容器化技术已经成为提升效率、确保应用一致性和简化部署的基石。Docker 作为容器技术的领军者,以其轻量、可移植和易用的特性,赢得了全球开发者的青睐。在企业级服务器操作系统 CentOS 上部署 Docker,是许多 IT 专业人士的常见操作。本文旨在提供一份在 CentOS 系统上详细安装 Docker 的操作指南,涵盖从环境准备、安装步骤、基础配置到常见问题解决的全过程,确保您能顺利地在 CentOS 上搭建起强大的 Docker 环境。

无论您是刚接触容器技术的新手,还是希望规范化部署流程的资深工程师,本文都将为您提供清晰、详尽的指导。我们将重点介绍使用 Docker 官方仓库进行安装的标准方法,并兼顾在中国大陆地区访问 Docker 仓库可能遇到的网络问题,提供相应的解决方案。

一、环境准备与先决条件

在开始安装 Docker 之前,请确保您的 CentOS 系统满足以下条件:

  1. 操作系统版本: Docker 支持 64 位架构的 CentOS 7 或 CentOS 8。对于 CentOS 7,需要内核版本在 3.10 以上;对于 CentOS 8,需要内核版本在 4.18 以上。通常情况下,最新版的 CentOS 系统都满足此要求。您可以通过 cat /etc/redhat-releaseuname -r 命令查看系统版本和内核版本。
  2. 架构支持: Docker Engine 支持 x86_64, armhf, arm64, s390x, ppc64le 等多种架构。本文主要针对最常见的 x86_64 架构进行说明。
  3. Root 权限或具备 sudo 权限的用户: 安装和管理 Docker 服务需要系统管理员权限。请确保您当前登录的用户具有执行 sudo 命令的权限,或者直接使用 root 用户进行操作。
  4. 稳定的互联网连接: 安装过程需要从 Docker 官方仓库或镜像站点下载软件包。请确保您的服务器能够稳定地访问外部网络。
  5. 移除旧版本(如果存在): 如果您的系统上曾经安装过旧版本的 Docker(如 docker 或 docker-engine),为了避免冲突,强烈建议在安装新版本之前将其完全卸载。

检查与清理旧版本:

打开终端,执行以下命令检查并卸载可能的旧版本:

bash
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

这个命令会尝试移除所有与 Docker 相关的旧软件包。执行后,系统可能会提示您确认卸载,输入 y 并回车即可。请注意,移除旧版本不会删除您已有的镜像、容器、卷或网络配置。这些数据通常保存在 /var/lib/docker 目录下。如果您希望进行全新的安装,可能还需要手动备份或删除此目录(请务必谨慎操作)。

二、安装前的准备:设置 Docker 仓库

Docker 官方建议从其官方仓库安装 Docker Engine,因为这样可以确保您获得最新版本的 Docker,并且方便后续的更新。在 CentOS 上,我们使用 yum 包管理器来完成这一过程。

步骤 1:安装必要的软件包

安装 yum-utils 工具,它提供了 yum-config-manager,可以帮助您管理仓库。同时,安装一些存储驱动所需的工具(虽然新版本Docker默认使用 overlay2 驱动,但安装这些包不会有坏处,且是官方文档推荐的步骤):

bash
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

  • yum-utils: 提供 yum-config-manager 工具。
  • device-mapper-persistent-datalvm2: 这是 Docker 旧版本或特定配置下可能需要的存储驱动相关的依赖包。

步骤 2:添加 Docker 官方仓库

使用 yum-config-manager 命令添加 Docker 的稳定版仓库。

bash
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

执行此命令后,会在 /etc/yum.repos.d/ 目录下创建一个名为 docker-ce.repo 的文件,该文件包含了 Docker 官方仓库的配置信息。

步骤 3:【重要】配置 Docker 仓库镜像(针对中国大陆用户)

由于网络原因,直接从 download.docker.com 下载 Docker 软件包可能会非常缓慢甚至失败。幸运的是,国内许多云服务提供商和大学提供了 Docker 仓库的镜像站点,可以大大加快下载速度。

您需要编辑刚刚创建的 /etc/yum.repos.d/docker-ce.repo 文件,将官方的仓库地址替换为镜像站点的地址。

常用的镜像站点地址:

  • 阿里云:https://mirrors.aliyun.com/docker-ce/linux/centos/
  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/
  • 网易(已停止服务,不推荐)
  • 中国科学技术大学:https://mirrors.ustc.edu.cn/docker-ce/linux/centos/

以阿里云镜像为例,您可以使用 sed 命令或文本编辑器进行修改:

使用 sed 命令(推荐,简单快捷):

bash
sudo sed -i 's|download.docker.com|mirrors.aliyun.com/docker-ce|g' /etc/yum.repos.d/docker-ce.repo

这条命令会将 docker-ce.repo 文件中所有的 download.docker.com 替换为 mirrors.aliyun.com/docker-ce

手动编辑文件:

使用文本编辑器打开文件:

bash
sudo vim /etc/yum.repos.d/docker-ce.repo

找到文件中的类似以下内容(可能有多个 [docker-ce-stable][docker-ce-stable-debug] 等段落):

“`ini
[docker-ce-stable]
name=Docker CE Stable – $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable

gpgcheck=1

gpgkey=https://download.docker.com/linux/centos/gpg

enabled=1
“`

baseurl 中的 https://download.docker.com/linux/centos/ 替换为您选择的镜像站点地址。例如,使用阿里云镜像:

“`ini
[docker-ce-stable]
name=Docker CE Stable – $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

enabled=1
“`

请注意,如果您替换了 baseurl,最好也将 gpgkey 的地址一同替换为镜像站点的地址,以确保GPG密钥的下载也走镜像。不过,大多数情况下,只替换 baseurl 也能正常工作,因为GPG密钥通常只需要下载一次。

保存并关闭文件。

三、安装 Docker Engine

完成了仓库的设置(特别是镜像配置后),现在可以正式安装 Docker Engine 及其相关组件了。

步骤 1:安装 Docker Engine, containerd, 和 Docker CLI

执行以下命令安装最新版本的 Docker:

bash
sudo yum install docker-ce docker-ce-cli containerd.io

  • docker-ce: Docker Community Edition,即 Docker 社区版的核心引擎。
  • docker-ce-cli: Docker 命令行客户端,用于与 Docker daemon 进行交互。
  • containerd.io: 一个业界标准的容器运行时,Docker Engine 依赖于它。

系统会列出需要安装的软件包及其依赖,并询问是否确认安装。输入 y 并回车。yum 将会自动从配置好的仓库下载并安装这些软件包。

【可选】安装指定版本的 Docker Engine

在生产环境中,有时可能需要安装特定版本的 Docker 以确保兼容性或稳定性。您可以先列出仓库中可用的 Docker 版本:

bash
yum list docker-ce --showduplicates | sort -r

这个命令会列出所有可用的 docker-ce 软件包,并按版本号降序排序。输出通常类似这样:

docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
...

选择您需要的版本(例如 3:20.10.9-3.el7),然后使用以下命令安装:

bash
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

<VERSION_STRING> 替换为您选择的完整版本字符串,例如:

bash
sudo yum install docker-ce-3:20.10.9-3.el7 docker-ce-cli-3:20.10.9-3.el7 containerd.io

步骤 2:启动 Docker 服务

安装完成后,Docker 服务默认是不会自动启动的。您需要手动启动它:

bash
sudo systemctl start docker

步骤 3:设置 Docker 服务开机自启

为了确保服务器重启后 Docker 服务也能自动运行,将其设置为开机自启:

bash
sudo systemctl enable docker

执行此命令后,系统会创建一个指向 Docker 服务启动脚本的符号链接,使得在系统启动时能够自动加载。

步骤 4:验证安装

通过运行一个简单的测试容器 hello-world 来验证 Docker 是否成功安装并正常运行:

bash
sudo docker run hello-world

如果您看到类似以下内容的输出:

“`
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
… (下载镜像的进度信息) …
Digest: sha256:…
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
… (Docker 的介绍信息) …
“`

这表明 Docker Engine 已成功安装、启动,并且能够拉取镜像并运行容器。恭喜您,Docker 已经在您的 CentOS 系统上安装成功了!

四、安装后的配置

虽然 Docker 已经可以运行了,但进行一些基础配置可以提升使用体验和安全性。

1. 允许非 root 用户管理 Docker(推荐)

默认情况下,只有 root 用户或通过 sudo 才能执行 docker 命令。这在日常使用中不太方便,也存在一定的安全风险(每次都需要 root 权限)。将当前用户添加到 docker 用户组,可以允许非 root 用户直接管理 Docker。

步骤:

a. 创建 docker 用户组(如果不存在):

bash
sudo groupadd docker

b. 将当前用户添加到 docker 用户组:

bash
sudo usermod -aG docker $USER

这里的 $USER 是一个环境变量,代表当前登录的用户名。如果您想添加其他用户,请将 $USER 替换为相应的用户名。

c. 激活用户组更改:

为了使新用户组的成员资格生效,您需要注销当前用户并重新登录。或者,您可以使用 newgrp docker 命令在当前终端会话中临时激活新的用户组权限,但这仅对当前终端有效。最稳妥的方法是完全注销并重新登录。

d. 验证:

重新登录后,尝试不使用 sudo 执行 docker 命令:

bash
docker run hello-world

如果命令成功执行,说明非 root 用户管理 Docker 的权限已配置完成。

2. 配置 Docker 镜像加速器(强烈建议,尤其是在中国大陆)

就像前面提到的 Yum 仓库镜像一样,Docker 默认从 Docker Hub 拉取镜像,这在中国大陆访问速度通常很慢。配置 Docker 镜像加速器可以显著提高拉取镜像的速度。

常用的 Docker 镜像加速器地址:

  • 阿里云容器镜像服务:提供专属加速器地址,需要注册阿里云账号获取。格式类似 xxxxxxxx.mirror.aliyuncs.com
  • 网易云:https://hub-mirror.c.163.com/
  • 中国科学技术大学:https://docker.mirrors.ustc.edu.cn/
  • 腾讯云:https://mirror.ccs.tencentyun.com/

配置步骤:

Docker 镜像加速器的配置是通过修改 Docker daemon 的配置文件 /etc/docker/daemon.json 来实现的。如果文件不存在,请创建它。

bash
sudo vim /etc/docker/daemon.json

在文件中添加或修改 registry-mirrors 键,其值是一个包含镜像加速器地址的字符串数组。您可以添加多个镜像地址,Docker 会尝试按顺序使用它们。

json
{
"registry-mirrors": [
"https://xxxxxxxx.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}

"https://xxxxxxxx.mirror.aliyuncs.com" 替换为您自己获得的阿里云加速器地址(如果使用)。您可以根据需要添加或删除镜像地址。

保存并关闭文件。

重新加载配置并重启 Docker 服务:

修改了 daemon.json 文件后,需要让 Docker daemon 重新加载配置并重启服务才能生效。

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

验证加速器是否生效:

可以通过以下命令查看 Docker daemon 的详细信息,检查 Registry Mirrors 字段是否包含您配置的地址:

bash
docker info

在输出信息中找到 Registry Mirrors 部分,确认配置已加载。

现在,当您使用 docker pull 命令拉取镜像时,Docker 将会尝试使用您配置的镜像加速器,下载速度应该会快很多。

五、基本 Docker 使用示例

安装并配置好 Docker 后,您可以开始体验它的强大功能了。以下是一些最常用的 Docker 命令:

  1. 拉取镜像: 从 Docker Hub 或其他仓库下载镜像到本地。
    bash
    docker pull ubuntu:latest

    这将下载最新版本的 Ubuntu 镜像。

  2. 列出本地镜像: 查看已经下载到本地的镜像列表。
    bash
    docker images

  3. 运行容器: 基于一个镜像启动一个容器。
    bash
    docker run -it ubuntu:latest /bin/bash

    • -i: 保持标准输入打开。
    • -t: 分配一个伪终端。
    • 这将启动一个 Ubuntu 容器并在其中进入 bash 终端。

    运行一个以后台模式(detached mode)运行的 Nginx Web 服务器容器,并将容器的 80 端口映射到宿主机的 80 端口:
    bash
    docker run -d -p 80:80 --name mynginx nginx:latest

    * -d: 后台运行。
    * -p 80:80: 将宿主机的 80 端口映射到容器的 80 端口。
    * --name mynginx: 为容器指定一个名称。
    * nginx:latest: 使用最新版本的 Nginx 镜像。

  4. 列出正在运行的容器:
    bash
    docker ps

  5. 列出所有容器(包括已停止的):
    bash
    docker ps -a

  6. 停止容器:
    bash
    docker stop <container_id or container_name>

    例如:docker stop mynginxdocker stop a3f1b4c5d6e0 (这里的 ID 是 docker ps 输出的前几位)。

  7. 启动已停止的容器:
    bash
    docker start <container_id or container_name>

  8. 移除容器: 移除一个或多个容器(容器必须是停止状态才能移除)。
    bash
    docker rm <container_id or container_name>

  9. 移除镜像: 移除一个或多个镜像(镜像没有被任何容器使用时才能移除)。
    bash
    docker rmi <image_id>

    使用 docker images 查看 Image ID。

六、常见问题与故障排除

在安装和使用 Docker 过程中,可能会遇到一些问题。以下是一些常见问题及其解决方案:

  1. docker: command not found

    • 原因: Docker 可执行文件所在的路径没有添加到系统的 PATH 环境变量中,或者安装根本没有成功。如果非 root 用户执行此命令,可能是用户没有加入到 docker 用户组,或者加入后没有重新登录。
    • 解决方案: 检查 Docker 是否安装成功 (yum list installed | grep docker-ce)。确认 /usr/bin/docker 文件是否存在。如果非 root 用户,请确认已将用户添加到 docker 组并重新登录。
  2. Got permission denied while trying to connect to the Docker daemon socket ...

    • 原因: 尝试执行 Docker 命令的用户没有访问 Docker daemon socket 的权限。这是因为 Docker daemon 默认监听一个 Unix socket,其权限通常属于 root 用户和 docker 用户组。
    • 解决方案: 将当前用户添加到 docker 用户组并重新登录(参考前面的配置步骤)。
  3. Docker 服务无法启动 (systemctl status docker):

    • 原因: 可能的原因很多,包括端口冲突、配置文件错误、存储驱动问题、缺少依赖等。
    • 解决方案:
      • 查看服务状态和日志获取详细错误信息:sudo systemctl status dockersudo journalctl -u docker.service -f (实时查看日志)。
      • 检查 /etc/docker/daemon.json 文件是否存在语法错误(可以使用 jsonlint 等工具检查)。
      • 检查是否有其他服务占用了 Docker 可能需要的端口或资源。
      • 如果日志显示与存储驱动相关的问题,可能需要检查 /var/lib/docker 目录的权限或损坏情况(谨慎处理)。
  4. docker pull 镜像下载缓慢或失败:

    • 原因: 网络连接到 Docker Hub 不稳定或带宽不足,尤其是在中国大陆。
    • 解决方案: 配置 Docker 镜像加速器(参考前面的配置步骤)。检查服务器的网络连接是否正常。
  5. Failed to download metadata for repo 'docker-ce-stable': Cannot retrieve metalink for repository docker-ce-stable: ...

    • 原因: 配置的 Yum 仓库地址无法访问,通常是因为网络问题或镜像地址错误。
    • 解决方案: 检查 /etc/yum.repos.d/docker-ce.repo 文件中的 baseurl 地址是否正确,并且您的服务器能够访问该地址。如果使用了镜像站,确认镜像站是否正常工作。尝试使用 curl <baseurl> 命令检查地址是否可访问。
  6. 在 CentOS 8 上使用 yum 的问题:

    • 原因: CentOS 8 默认使用 dnf 包管理器,但通常 yum 命令会被软链接到 dnf,所以大多数情况下使用 yum 也能正常工作。如果遇到问题,可以尝试直接使用 dnf 命令替换文中的 yum 命令。

七、总结

本文详细介绍了在 CentOS 系统上安装和配置 Docker 的全过程,包括环境准备、移除旧版本、配置 Docker 仓库(特别强调了镜像加速器的配置)、安装 Docker Engine、启动和验证服务,以及安装后的基础配置和常见问题解决。

通过遵循本文的步骤,您应该能够在您的 CentOS 服务器上成功搭建一个稳定、高效的 Docker 运行环境。Docker 的强大功能远不止于此,这仅仅是容器化旅程的开始。您可以进一步学习如何构建自己的 Docker 镜像(使用 Dockerfile)、使用 Docker Compose 管理多容器应用、配置 Docker Swarm 或 Kubernetes 进行容器编排,以及探索更高级的网络和存储配置。

希望这篇详尽的指南对您有所帮助。祝您在 Docker 的世界里探索愉快!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部