【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                   # 查看版本信息

作者信息

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

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

相关推荐
Meta3917 小时前
cenots8安装docker
docker·容器·centos
持敬chijing2 天前
CentOS 从零搭建 LAMP 环境完整实战指南
linux·运维·web安全·网络安全·centos
Merlyj2 天前
华为 ASG Manager 镜像日志接收链路故障排查流程
centos·asg
张宇Joaquin2 天前
S920X00机器CentOS 7.6下大批量容器执行docker exec卡顿
linux·docker·centos
刀鋒偏冷4 天前
CentOS 7 配置 Python 3.12.4 + RTX 4090 深度学习环境全记录
python·深度学习·centos
SatanII5 天前
华为云ECS实践:从创建、镜像制作到弹性伸缩完整实操指南
linux·运维·服务器·学习·centos·华为云
闲云野鹤在人间5 天前
云计算入门|网络与存储云服务知识梳理
linux·运维·服务器·网络·centos·云计算·php
zx_741484819 天前
【Linux入门】Linux 安装:VMware Workstation Pro 安装 CentOS 7 保姆级图文教程
linux·centos
IT爱学堂10 天前
新版Linux零基础入门到高手Rocky版本-替换CentOS(完结)
linux·运维·centos
dazhong201210 天前
Docker 进阶篇(一) CentOS 7 离线升级 Docker 完整实战
docker·容器·centos