CentOS 7 Docker 完整安装指南(2024年最新版)
📋 目录
- 前言
- 环境说明
- 安装前的准备工作
- Docker 安装步骤
- 完整安装脚本
- 安装后配置
- 常见问题排查
- 最佳实践建议
- 总结
前言
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:
#!/bin/bash# 检查 root 权限if["$EUID"-ne0];thenecho"请使用 root 用户运行"exit1fi# 备份原有配置mkdir-p /etc/yum.repos.d/backupmv/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 makecacheecho"Yum 源修复完成!"执行修复:
chmod+x fix_centos7_repo.shsudo./fix_centos7_repo.sh2. 检查系统环境
# 查看系统版本cat/etc/centos-release# 查看内核版本uname-r# 检查系统架构uname-m3. 更新系统(可选)
sudoyum update -yDocker 安装步骤
步骤 1:卸载旧版本
如果之前安装过 Docker,需要先卸载:
sudoyum 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:安装依赖包
sudoyuminstall-y yum-utils\device-mapper-persistent-data\lvm2依赖包说明:
yum-utils:提供 yum-config-manager 工具device-mapper-persistent-data:设备映射器存储驱动lvm2:逻辑卷管理器
步骤 3:添加 Docker 官方 Yum 源
# 使用阿里云镜像(国内访问更快)sudoyum-config-manager --add-repo\https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 修改为阿里云镜像地址sudosed-i's+download.docker.com+mirrors.aliyun.com/docker-ce+'\/etc/yum.repos.d/docker-ce.repo步骤 4:查看可用版本
# 查看所有可用的 Docker 版本yum list docker-ce --showduplicates|sort-r步骤 5:安装 Docker
# 安装最新稳定版sudoyuminstall-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
# 启动 Docker 服务sudosystemctl start docker# 设置开机自启sudosystemctlenabledocker# 查看运行状态sudosystemctl status docker步骤 7:验证安装
# 查看 Docker 版本docker --version# 查看详细信息docker info# 运行测试容器sudodocker run hello-world如果看到 “Hello from Docker!” 消息,说明安装成功!
完整安装脚本
为了简化安装过程,我编写了一个完整的自动化安装脚本。
创建文件install_docker.sh:
#!/bin/bash# CentOS 7 Docker 安装脚本# 作者: [您的名字]# 日期: 2024-12echo"=================================="echo"CentOS 7 Docker 安装脚本"echo"=================================="# 检查是否为 root 用户if["$EUID"-ne0];thenecho"错误: 请使用 root 用户或 sudo 运行此脚本"exit1fi# 检查系统版本echo"正在检查系统版本..."if[!-f /etc/centos-release];thenecho"错误: 此脚本仅适用于 CentOS 7"exit1ficentos_version=$(cat/etc/centos-release|grep-oP'\d+'|head-1)if["$centos_version"!="7"];thenecho"错误: 此脚本仅适用于 CentOS 7,当前版本:$centos_version"exit1fiecho"系统版本检查通过: 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.ioecho"旧版本清理完成"echo""# 安装必要的依赖包echo"正在安装必要的依赖包..."yuminstall-y yum-utils\device-mapper-persistent-data\lvm2if[$?-ne0];thenecho"错误: 依赖包安装失败,请检查 yum 源配置"exit1fiecho"依赖包安装完成"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.repoecho"Docker yum 源配置完成"echo""# 更新 yum 缓存echo"正在更新 yum 缓存..."yum makecache fast# 查看可用的 Docker 版本(可选)echo"可用的 Docker CE 版本:"yum list docker-ce --showduplicates|sort-r|head-10echo""# 安装最新版本的 Docker CEecho"正在安装 Docker CE(最新稳定版)..."yuminstall-y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginif[$?-ne0];thenecho"错误: Docker 安装失败"exit1fiecho"Docker 安装完成"echo""# 启动 Docker 服务echo"正在启动 Docker 服务..."systemctl start dockerif[$?-ne0];thenecho"错误: Docker 服务启动失败"exit1fi# 设置 Docker 开机自启echo"正在设置 Docker 开机自启..."systemctlenabledocker# 验证 Docker 是否安装成功echo""echo"=================================="echo"验证 Docker 安装..."echo"=================================="docker_version=$(docker --version)if[$?-eq0];thenecho"✓ Docker 版本:$docker_version"elseecho"✗ Docker 安装验证失败"exit1fi# 运行测试容器echo""echo"正在运行 hello-world 测试容器..."docker run --rm hello-worldif[$?-eq0];thenecho""echo"=================================="echo"✓ Docker 安装成功!"echo"=================================="elseecho""echo"=================================="echo"✗ Docker 测试失败"echo"=================================="exit1fi# 配置 Docker 镜像加速器(可选,使用阿里云镜像加速)echo""echo"是否配置 Docker 镜像加速器?(y/n)"read-t10-p"10秒后将自动跳过: "configure_mirrorif["$configure_mirror"="y"]||["$configure_mirror"="Y"];thenecho"正在配置 Docker 镜像加速器..."mkdir-p /etc/dockercat>/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 dockerecho"✓ Docker 镜像加速器配置完成"fi# 显示 Docker 信息echo""echo"=================================="echo"Docker 系统信息"echo"=================================="docker info|grep-E"Server Version|Storage Driver|Registry Mirrors"||docker infoecho""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""使用方法
# 1. 创建脚本文件viinstall_docker.sh# 2. 粘贴上述脚本内容,保存退出# 3. 添加执行权限chmod+x install_docker.sh# 4. 执行安装sudo./install_docker.sh脚本执行过程中会自动完成所有安装步骤,并在最后进行验证测试。
安装后配置
1. 配置用户权限
默认情况下,只有 root 用户可以执行 Docker 命令。为普通用户添加权限:
# 将当前用户添加到 docker 组sudousermod-aG docker$USER# 重新登录以使配置生效,或执行:newgrp docker# 验证权限dockerps2. 配置镜像加速器
为了加速镜像拉取,配置国内镜像源:
创建或编辑/etc/docker/daemon.json:
sudomkdir-p /etc/dockersudotee/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 使配置生效:
sudosystemctl daemon-reloadsudosystemctl restart docker验证配置:
docker info|grep-A5"Registry Mirrors"3. 配置 Docker 资源限制
编辑/etc/docker/daemon.json,添加资源限制:
{"registry-mirrors":[...],"default-ulimits":{"nofile":{"Name":"nofile","Hard":64000,"Soft":64000}},"max-concurrent-downloads":10,"max-concurrent-uploads":5}4. 开启 IPv6 支持(可选)
{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}常见问题排查
问题 1:Docker 服务启动失败
症状:执行systemctl start docker失败
解决方案:
# 查看详细错误日志sudojournalctl -xe -u docker# 检查配置文件语法sudodockerd --validate# 重置 Docker 配置sudorm/etc/docker/daemon.jsonsudosystemctl restart docker问题 2:镜像拉取速度慢
症状:执行docker pull速度很慢或超时
解决方案:
- 配置镜像加速器(见上文)
- 检查网络连接
- 尝试不同的镜像源
# 测试镜像源可用性curl-I https://docker.mirrors.ustc.edu.cn问题 3:容器无法访问外网
症状:容器内无法 ping 通外网
解决方案:
# 检查 IP 转发是否开启cat/proc/sys/net/ipv4/ip_forward# 应该输出 1# 如果输出 0,开启 IP 转发sudoecho"net.ipv4.ip_forward=1">>/etc/sysctl.confsudosysctl -p# 重启 Dockersudosystemctl restart docker问题 4:磁盘空间不足
症状:提示 “no space left on device”
解决方案:
# 清理未使用的镜像docker image prune -a# 清理未使用的容器docker container prune# 清理未使用的卷docker volume prune# 清理所有未使用的资源docker system prune -a --volumes# 查看磁盘使用情况docker systemdf问题 5:权限问题
症状:非 root 用户执行 docker 命令报权限错误
解决方案:
# 将用户添加到 docker 组sudousermod-aG docker$USER# 注销并重新登录,或执行newgrp docker# 验证id-nG|grepdocker问题 6:Yum 源问题
症状:安装过程中提示找不到包
解决方案:
# 清理 yum 缓存sudoyum clean all# 重建缓存sudoyum makecache# 检查 repo 配置sudoyum repolist# 如果还是不行,重新配置 vault 源sudovi/etc/yum.repos.d/CentOS-Base.repo最佳实践建议
1. 安全加固
# 限制 Docker 守护进程的访问sudochmod600/var/run/docker.sock# 使用非 root 用户运行容器docker run --user1000:1000<image># 限制容器资源docker run --memory="512m"--cpus="1.0"<image>2. 日志管理
定期清理 Docker 日志:
# 查看日志大小sudodu-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 {} \; EOFchmod+x /usr/local/bin/clean-docker-logs.sh# 添加定时任务(每周清理一次)(crontab -l2>/dev/null;echo"0 2 * * 0 /usr/local/bin/clean-docker-logs.sh")|crontab-3. 监控和维护
# 监控 Docker 状态docker stats# 查看 Docker 事件docker events# 定期更新 Dockersudoyum update docker-ce docker-ce-cli containerd.io4. 备份重要数据
# 备份 Docker 卷docker run --rm -v volume_name:/data -v$(pwd):/backup\alpinetarczf /backup/volume_backup.tar.gz -C /data.# 备份容器docker commit container_name backup_image docker save backup_image|gzip>backup_image.tar.gz5. 使用 Docker Compose
对于多容器应用,推荐使用 Docker Compose:
# docker-compose.yml 示例version:'3.8'services:web:image:nginx:alpineports:-"80:80"volumes:-./html:/usr/share/nginx/htmlrestart:unless-stoppeddb:image:mysql:8.0environment:MYSQL_ROOT_PASSWORD:passwordMYSQL_DATABASE:mydbvolumes:-db_data:/var/lib/mysqlrestart:unless-stoppedvolumes:db_data:使用命令:
# 启动服务docker compose up -d# 查看状态docker composeps# 停止服务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 命令速查表
镜像操作
docker images# 列出所有镜像docker pull<镜像名># 拉取镜像docker rmi<镜像ID># 删除镜像docker build -t<标签>.# 构建镜像docker tag<源><目标># 标记镜像docker save<镜像>>file.tar# 导出镜像docker load<file.tar# 导入镜像容器操作
dockerps# 列出运行中的容器dockerps-a# 列出所有容器docker run<镜像># 运行容器docker start<容器ID># 启动容器docker stop<容器ID># 停止容器docker restart<容器ID># 重启容器dockerrm<容器ID># 删除容器dockerexec-it<容器ID>bash# 进入容器docker logs<容器ID># 查看日志系统维护
docker systemdf# 查看磁盘使用docker system prune# 清理未使用资源docker info# 查看系统信息docker version# 查看版本信息作者信息
如果本文对您有帮助,欢迎点赞、收藏、关注!
有任何问题欢迎在评论区讨论。