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-driver和log-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 速度很慢或超时
解决方案:
- 配置镜像加速器(见上文)
- 检查网络连接
- 尝试不同的镜像源
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 的完整流程,包括:
- 系统准备:修复 EOL 后的 yum 源问题
- Docker 安装:使用国内镜像源快速安装
- 自动化脚本:提供一键安装脚本
- 安装后配置:镜像加速、用户权限等优化
- 问题排查:常见问题的解决方案
- 最佳实践:安全、监控、维护建议
关键要点
- ✅ CentOS 7 虽已 EOL,但仍可正常使用 Docker
- ✅ 必须先修复 yum 源才能安装软件包
- ✅ 使用国内镜像源可大幅提升安装和使用速度
- ✅ 正确配置日志和资源限制很重要
- ⚠️ 建议尽快规划向新系统迁移
相关资源
- Docker 官方文档:https://docs.docker.com/
- Docker Hub:https://hub.docker.com/
- CentOS 官方网站:https://www.centos.org/
附录:常用 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 # 查看版本信息
作者信息
如果本文对您有帮助,欢迎点赞、收藏、关注!
有任何问题欢迎在评论区讨论。