【CentOS7】CentOS 7 Docker 安装

CentOS 7 Docker 完整安装指南(2024年最新版)

📋 目录


前言

Docker 作为当前最流行的容器化技术,已经成为现代应用部署的标准工具。本文将详细介绍如何在 CentOS 7 系统上完整安装 Docker CE(社区版),并提供一键安装脚本。

重要提示 ⚠️

CentOS 7 已于 2024年6月30日 正式 EOL(End of Life),官方已停止更新维护。如果您正在规划新项目,建议迁移到以下操作系统:

  • Rocky Linux 9
  • AlmaLinux 9
  • Ubuntu 22.04 LTS

但如果您仍需在 CentOS 7 上部署 Docker,本文提供的方案依然有效且稳定。


环境说明

系统要求

  • 操作系统:CentOS 7.x(64位)
  • 内核版本:3.10 及以上
  • 硬件要求
    • CPU:2核及以上
    • 内存:2GB 及以上
    • 磁盘:20GB 及以上可用空间

版本信息

本文安装的 Docker 版本:

  • Docker CE(Community Edition)
  • Docker Compose V2(作为插件)
  • Containerd 运行时

安装前的准备工作

1. 修复 CentOS 7 Yum 源

由于 CentOS 7 已经 EOL,原有的镜像源已无法使用,需要先切换到 vault 源。

创建修复脚本 fix_centos7_repo.sh

bash 复制代码
#!/bin/bash

# 检查 root 权限
if [ "$EUID" -ne 0 ]; then 
    echo "请使用 root 用户运行"
    exit 1
fi

# 备份原有配置
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/

# 创建新的 repo 配置
cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
[base]
name=CentOS-7 - Base
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-7 - Updates
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-7 - Extras
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
EOF

# 清理并重建缓存
yum clean all
yum makecache

echo "Yum 源修复完成!"

执行修复:

bash 复制代码
chmod +x fix_centos7_repo.sh
sudo ./fix_centos7_repo.sh

2. 检查系统环境

bash 复制代码
# 查看系统版本
cat /etc/centos-release

# 查看内核版本
uname -r

# 检查系统架构
uname -m

3. 更新系统(可选)

bash 复制代码
sudo yum update -y

Docker 安装步骤

步骤 1:卸载旧版本

如果之前安装过 Docker,需要先卸载:

bash 复制代码
sudo yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-ce \
    docker-ce-cli \
    containerd.io

步骤 2:安装依赖包

bash 复制代码
sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

依赖包说明

  • yum-utils:提供 yum-config-manager 工具
  • device-mapper-persistent-data:设备映射器存储驱动
  • lvm2:逻辑卷管理器

步骤 3:添加 Docker 官方 Yum 源

bash 复制代码
# 使用阿里云镜像(国内访问更快)
sudo yum-config-manager --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 修改为阿里云镜像地址
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' \
    /etc/yum.repos.d/docker-ce.repo

步骤 4:查看可用版本

bash 复制代码
# 查看所有可用的 Docker 版本
yum list docker-ce --showduplicates | sort -r

步骤 5:安装 Docker

bash 复制代码
# 安装最新稳定版
sudo yum install -y docker-ce docker-ce-cli containerd.io \
    docker-buildx-plugin docker-compose-plugin

安装组件说明

  • docker-ce:Docker 引擎
  • docker-ce-cli:Docker 命令行工具
  • containerd.io:容器运行时
  • docker-buildx-plugin:多平台构建工具
  • docker-compose-plugin:Docker Compose V2

步骤 6:启动 Docker

bash 复制代码
# 启动 Docker 服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 查看运行状态
sudo systemctl status docker

步骤 7:验证安装

bash 复制代码
# 查看 Docker 版本
docker --version

# 查看详细信息
docker info

# 运行测试容器
sudo docker run hello-world

如果看到 "Hello from Docker!" 消息,说明安装成功!


完整安装脚本

为了简化安装过程,我编写了一个完整的自动化安装脚本。

创建文件 install_docker.sh

bash 复制代码
#!/bin/bash

# CentOS 7 Docker 安装脚本
# 作者: [您的名字]
# 日期: 2024-12

echo "=================================="
echo "CentOS 7 Docker 安装脚本"
echo "=================================="

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then 
    echo "错误: 请使用 root 用户或 sudo 运行此脚本"
    exit 1
fi

# 检查系统版本
echo "正在检查系统版本..."
if [ ! -f /etc/centos-release ]; then
    echo "错误: 此脚本仅适用于 CentOS 7"
    exit 1
fi

centos_version=$(cat /etc/centos-release | grep -oP '\d+' | head -1)
if [ "$centos_version" != "7" ]; then
    echo "错误: 此脚本仅适用于 CentOS 7,当前版本: $centos_version"
    exit 1
fi

echo "系统版本检查通过: CentOS 7"
echo ""

# 卸载旧版本的 Docker(如果存在)
echo "正在检查并卸载旧版本的 Docker..."
yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-ce \
    docker-ce-cli \
    containerd.io

echo "旧版本清理完成"
echo ""

# 安装必要的依赖包
echo "正在安装必要的依赖包..."
yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

if [ $? -ne 0 ]; then
    echo "错误: 依赖包安装失败,请检查 yum 源配置"
    exit 1
fi

echo "依赖包安装完成"
echo ""

# 添加 Docker CE 官方 yum 源(使用阿里云镜像)
echo "正在添加 Docker CE yum 源(阿里云镜像)..."
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 由于 CentOS 7 EOL,需要修改 repo 文件以确保兼容性
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

echo "Docker yum 源配置完成"
echo ""

# 更新 yum 缓存
echo "正在更新 yum 缓存..."
yum makecache fast

# 查看可用的 Docker 版本(可选)
echo "可用的 Docker CE 版本:"
yum list docker-ce --showduplicates | sort -r | head -10
echo ""

# 安装最新版本的 Docker CE
echo "正在安装 Docker CE(最新稳定版)..."
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

if [ $? -ne 0 ]; then
    echo "错误: Docker 安装失败"
    exit 1
fi

echo "Docker 安装完成"
echo ""

# 启动 Docker 服务
echo "正在启动 Docker 服务..."
systemctl start docker

if [ $? -ne 0 ]; then
    echo "错误: Docker 服务启动失败"
    exit 1
fi

# 设置 Docker 开机自启
echo "正在设置 Docker 开机自启..."
systemctl enable docker

# 验证 Docker 是否安装成功
echo ""
echo "=================================="
echo "验证 Docker 安装..."
echo "=================================="

docker_version=$(docker --version)
if [ $? -eq 0 ]; then
    echo "✓ Docker 版本: $docker_version"
else
    echo "✗ Docker 安装验证失败"
    exit 1
fi

# 运行测试容器
echo ""
echo "正在运行 hello-world 测试容器..."
docker run --rm hello-world

if [ $? -eq 0 ]; then
    echo ""
    echo "=================================="
    echo "✓ Docker 安装成功!"
    echo "=================================="
else
    echo ""
    echo "=================================="
    echo "✗ Docker 测试失败"
    echo "=================================="
    exit 1
fi

# 配置 Docker 镜像加速器(可选,使用阿里云镜像加速)
echo ""
echo "是否配置 Docker 镜像加速器?(y/n)"
read -t 10 -p "10秒后将自动跳过: " configure_mirror

if [ "$configure_mirror" = "y" ] || [ "$configure_mirror" = "Y" ]; then
    echo "正在配置 Docker 镜像加速器..."
    
    mkdir -p /etc/docker
    
    cat > /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.ccs.tencentyun.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

    # 重启 Docker 服务以应用配置
    echo "正在重启 Docker 服务..."
    systemctl daemon-reload
    systemctl restart docker
    
    echo "✓ Docker 镜像加速器配置完成"
fi

# 显示 Docker 信息
echo ""
echo "=================================="
echo "Docker 系统信息"
echo "=================================="
docker info | grep -E "Server Version|Storage Driver|Registry Mirrors" || docker info

echo ""
echo "=================================="
echo "安装完成!"
echo "=================================="
echo ""
echo "常用 Docker 命令:"
echo "  docker ps                    # 查看运行中的容器"
echo "  docker images                # 查看本地镜像"
echo "  docker pull <镜像名>          # 拉取镜像"
echo "  docker run <镜像名>           # 运行容器"
echo "  docker-compose up -d         # 使用 docker-compose 启动服务"
echo ""
echo "提示:"
echo "  1. 非 root 用户需要加入 docker 组才能使用 docker 命令"
echo "     命令: sudo usermod -aG docker \$USER"
echo "  2. CentOS 7 已 EOL,建议迁移到 Rocky Linux 或 AlmaLinux"
echo "  3. Docker 配置文件位置: /etc/docker/daemon.json"
echo ""

使用方法

bash 复制代码
# 1. 创建脚本文件
vi install_docker.sh

# 2. 粘贴上述脚本内容,保存退出

# 3. 添加执行权限
chmod +x install_docker.sh

# 4. 执行安装
sudo ./install_docker.sh

脚本执行过程中会自动完成所有安装步骤,并在最后进行验证测试。


安装后配置

1. 配置用户权限

默认情况下,只有 root 用户可以执行 Docker 命令。为普通用户添加权限:

bash 复制代码
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 重新登录以使配置生效,或执行:
newgrp docker

# 验证权限
docker ps

2. 配置镜像加速器

为了加速镜像拉取,配置国内镜像源:

创建或编辑 /etc/docker/daemon.json

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

配置说明

  • registry-mirrors:镜像加速地址
  • log-driverlog-opts:日志配置,防止日志文件过大
  • storage-driver:存储驱动,overlay2 性能更好

重启 Docker 使配置生效:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置:

bash 复制代码
docker info | grep -A 5 "Registry Mirrors"

3. 配置 Docker 资源限制

编辑 /etc/docker/daemon.json,添加资源限制:

json 复制代码
{
  "registry-mirrors": [...],
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 64000,
      "Soft": 64000
    }
  },
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5
}

4. 开启 IPv6 支持(可选)

json 复制代码
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

常见问题排查

问题 1:Docker 服务启动失败

症状 :执行 systemctl start docker 失败

解决方案

bash 复制代码
# 查看详细错误日志
sudo journalctl -xe -u docker

# 检查配置文件语法
sudo dockerd --validate

# 重置 Docker 配置
sudo rm /etc/docker/daemon.json
sudo systemctl restart docker

问题 2:镜像拉取速度慢

症状 :执行 docker pull 速度很慢或超时

解决方案

  1. 配置镜像加速器(见上文)
  2. 检查网络连接
  3. 尝试不同的镜像源
bash 复制代码
# 测试镜像源可用性
curl -I https://docker.mirrors.ustc.edu.cn

问题 3:容器无法访问外网

症状:容器内无法 ping 通外网

解决方案

bash 复制代码
# 检查 IP 转发是否开启
cat /proc/sys/net/ipv4/ip_forward
# 应该输出 1

# 如果输出 0,开启 IP 转发
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo sysctl -p

# 重启 Docker
sudo systemctl restart docker

问题 4:磁盘空间不足

症状:提示 "no space left on device"

解决方案

bash 复制代码
# 清理未使用的镜像
docker image prune -a

# 清理未使用的容器
docker container prune

# 清理未使用的卷
docker volume prune

# 清理所有未使用的资源
docker system prune -a --volumes

# 查看磁盘使用情况
docker system df

问题 5:权限问题

症状:非 root 用户执行 docker 命令报权限错误

解决方案

bash 复制代码
# 将用户添加到 docker 组
sudo usermod -aG docker $USER

# 注销并重新登录,或执行
newgrp docker

# 验证
id -nG | grep docker

问题 6:Yum 源问题

症状:安装过程中提示找不到包

解决方案

bash 复制代码
# 清理 yum 缓存
sudo yum clean all

# 重建缓存
sudo yum makecache

# 检查 repo 配置
sudo yum repolist

# 如果还是不行,重新配置 vault 源
sudo vi /etc/yum.repos.d/CentOS-Base.repo

最佳实践建议

1. 安全加固

bash 复制代码
# 限制 Docker 守护进程的访问
sudo chmod 600 /var/run/docker.sock

# 使用非 root 用户运行容器
docker run --user 1000:1000 <image>

# 限制容器资源
docker run --memory="512m" --cpus="1.0" <image>

2. 日志管理

定期清理 Docker 日志:

bash 复制代码
# 查看日志大小
sudo du -sh /var/lib/docker/containers/*/*-json.log

# 创建日志清理脚本
cat > /usr/local/bin/clean-docker-logs.sh <<'EOF'
#!/bin/bash
find /var/lib/docker/containers/ -name "*-json.log" -exec truncate -s 0 {} \;
EOF

chmod +x /usr/local/bin/clean-docker-logs.sh

# 添加定时任务(每周清理一次)
(crontab -l 2>/dev/null; echo "0 2 * * 0 /usr/local/bin/clean-docker-logs.sh") | crontab -

3. 监控和维护

bash 复制代码
# 监控 Docker 状态
docker stats

# 查看 Docker 事件
docker events

# 定期更新 Docker
sudo yum update docker-ce docker-ce-cli containerd.io

4. 备份重要数据

bash 复制代码
# 备份 Docker 卷
docker run --rm -v volume_name:/data -v $(pwd):/backup \
    alpine tar czf /backup/volume_backup.tar.gz -C /data .

# 备份容器
docker commit container_name backup_image
docker save backup_image | gzip > backup_image.tar.gz

5. 使用 Docker Compose

对于多容器应用,推荐使用 Docker Compose:

yaml 复制代码
# docker-compose.yml 示例
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: unless-stopped

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydb
    volumes:
      - db_data:/var/lib/mysql
    restart: unless-stopped

volumes:
  db_data:

使用命令:

bash 复制代码
# 启动服务
docker compose up -d

# 查看状态
docker compose ps

# 停止服务
docker compose down

总结

本文详细介绍了在 CentOS 7 系统上安装 Docker 的完整流程,包括:

  1. 系统准备:修复 EOL 后的 yum 源问题
  2. Docker 安装:使用国内镜像源快速安装
  3. 自动化脚本:提供一键安装脚本
  4. 安装后配置:镜像加速、用户权限等优化
  5. 问题排查:常见问题的解决方案
  6. 最佳实践:安全、监控、维护建议

关键要点

  • ✅ CentOS 7 虽已 EOL,但仍可正常使用 Docker
  • ✅ 必须先修复 yum 源才能安装软件包
  • ✅ 使用国内镜像源可大幅提升安装和使用速度
  • ✅ 正确配置日志和资源限制很重要
  • ⚠️ 建议尽快规划向新系统迁移

相关资源


附录:常用 Docker 命令速查表

镜像操作

bash 复制代码
docker images                    # 列出所有镜像
docker pull <镜像名>              # 拉取镜像
docker rmi <镜像ID>              # 删除镜像
docker build -t <标签> .         # 构建镜像
docker tag <源> <目标>           # 标记镜像
docker save <镜像> > file.tar   # 导出镜像
docker load < file.tar          # 导入镜像

容器操作

bash 复制代码
docker ps                        # 列出运行中的容器
docker ps -a                     # 列出所有容器
docker run <镜像>                # 运行容器
docker start <容器ID>            # 启动容器
docker stop <容器ID>             # 停止容器
docker restart <容器ID>          # 重启容器
docker rm <容器ID>               # 删除容器
docker exec -it <容器ID> bash   # 进入容器
docker logs <容器ID>             # 查看日志

系统维护

bash 复制代码
docker system df                 # 查看磁盘使用
docker system prune              # 清理未使用资源
docker info                      # 查看系统信息
docker version                   # 查看版本信息

作者信息

如果本文对您有帮助,欢迎点赞、收藏、关注!

有任何问题欢迎在评论区讨论。

相关推荐
ascarl20105 小时前
准确--CentOS 7 配置用户资源限制(nofile / nproc)
linux·运维·centos
林九生7 小时前
【CentOS7】CentOS 7 编译安装 Python 3.11.9
python·centos·python3.11
I · T · LUCKYBOOM8 小时前
25.本地yum仓库搭建--CentOS 7
linux·运维·centos
知识分享小能手8 小时前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 的过滤器 —— 语法详解与实战案例(18)
linux·学习·centos
学习3人组8 小时前
docker运行报错启动守护进程
linux·运维·centos
林九生9 小时前
【Centos7】CentOS 7 yum源失效解决方案:Could not resolve host mirrorlist.centos.org
linux·运维·centos
艾莉丝努力练剑10 小时前
【Linux进程(二)】Linux进程的诞生、管理与消亡:一份基于内核视角的完整分析
大数据·linux·运维·服务器·c++·安全·centos
知识分享小能手1 天前
CentOS Stream 9入门学习教程,从入门到精通,Linux日志分析工具及应用 —语法详解与实战案例(17)
linux·学习·centos
云动课堂1 天前
一键升级 OpenSSH 10到最新版:告别手工编译、兼容国产系统、批量部署无忧!
linux·服务器·centos