## **一、这套脚本解决什么问题?** 这份脚本不是只做“安装命令拼接”,而是覆盖完整链路: 1. **环境检测**:系统版本、架构、网络、磁盘空间 2. **版本管理**:默认稳定版本 + 支持手动指定版本 3. **安装执行**:自动配置官方源、安装 Engine / Containerd / Compose 4. **配置优化**:自动生成 `daemon.json`(镜像加速、日志轮转等) 5. **权限处理**:自动把用户加入 `docker` 组 6. **结果验证**:命令可用、服务状态、测试容器、Compose 检查 7. **失败排障**:安装日志和服务日志可追踪 一句话: **不只“装上 Docker”,而是“装好并可用”。** ## **二、支持范围(脚本兼容性)** ### **支持发行版** - Ubuntu 20.04 / 22.04 / 24.04 - Debian 11 / 12 - CentOS 7 / 8 / 9 - RHEL 8 / 9 - Rocky Linux 8 / 9 - AlmaLinux 8 / 9 - Fedora 38 / 39 ### **支持架构** - `x86_64`(主流云服务器) - `aarch64` / ARM64(ARM 服务器、部分开发板) - ARMv7(旧款 ARM 设备) ### **基础要求** - 需要 root 权限执行 - 需要网络可访问软件源 - 建议至少 5GB 可用磁盘(推荐 20GB+) ## **三、怎么使用(一键安装 + 参数控制)** ## **1)标准用法(推荐)** ```text # 下载脚本 wget https://gitee.com/haonuli/itinstall-script/raw/main/install-docker-linux.sh # 赋予执行权限 chmod +x install-docker-linux.sh # 运行(交互式) sudo bash install-docker-linux.sh ``` ## **2)常用参数** ```text sudo bash install-docker-linux.sh [选项] ``` - `--version <版本号>`:安装指定 Docker 版本 - `--no-compose`:不安装 Docker Compose - `--no-mirror`:不配置镜像加速(海外网络可用) - `--no-autostart`:不设置 Docker 开机自启 - `--help`:查看帮助 ### **示例** ```text # 默认安装(交互式) sudo bash install-docker-linux.sh # 指定版本 sudo bash install-docker-linux.sh --version 24.0.7 # 海外机器,不用国内镜像 sudo bash install-docker-linux.sh --no-mirror # 只要 Engine,不装 Compose sudo bash install-docker-linux.sh --no-compose ``` ## **四、脚本执行时,核心流程是什么?** 这套脚本按照固定顺序执行,保证结果稳定: 1. 检查 root 权限 2. 检查网络联通性(国内/国际) 3. 检查磁盘可用空间 4. 识别发行版、版本、CPU 架构 5. 检测本机是否已安装 Docker 6. 选择默认版本或指定版本 7. 更新包索引,安装依赖 8. 添加 Docker 官方 GPG 密钥与仓库 9. 安装 Docker Engine + Containerd 10. 写入 `daemon.json` 11. 配置用户组权限 12. 启动服务并设置自启 13. 执行安装后验证 14. 输出安装摘要与日志位置 如果中途任意步骤失败,会立即退出并提示错误点,避免出现“半安装状态”。 ## **五、如果机器上已经有 Docker,怎么处理?** 脚本会自动检测并给出选择: 1. 卸载后重装 2. 保持现有版本不变 3. 升级到指定版本 4. 退出脚本 如果你选择“卸载后重装”,还会继续问你: - 是否保留 `/var/lib/docker` 数据(镜像、容器、卷) 这一步很关键,建议生产环境谨慎确认。 ## **六、为什么我会自动写 `daemon.json`?** 因为很多线上问题都不是“装不上”,而是“默认配置不适合实际场景”。 我在脚本里默认做了这些配置方向: - 配置多个镜像加速源(提升拉镜像速度与可用性) - 限制容器日志文件大小(防止磁盘被日志打满) - 使用 `overlay2` 存储驱动 - 开启 `live-restore` - 设置较合理的并发下载与文件句柄上限 你也可以按自己的场景再细调: ```text sudo nano /etc/docker/daemon.json sudo systemctl restart docker docker info ``` ## **七、安装完成后,我建议你做这 4 个验证** ```text docker --version docker info docker compose version docker run --rm hello-world ``` 如果这 4 项都通过,基础可用性就没问题了。 另外,若当前用户还需要 `sudo` 才能运行 Docker,一般是组权限没刷新: ```text newgrp docker ``` 或者重新登录终端会话。 ## **八、常见报错,优先这么排查** ### **1)权限报错** - 现象:提示必须 root - 处理:确保使用 `sudo bash install-docker-linux.sh` ### **2)网络/GPG 相关报错** - 先验证 DNS 和外网访问 - 内网环境可配置代理后重试 ### **3)Docker 服务启动失败** 优先看这条日志: ```text sudo journalctl -xeu docker.service --no-pager | tail -50 ``` 其次检查 `daemon.json` 是否合法 JSON。 ### **4)镜像拉取慢/失败** - 检查镜像加速源是否生效: ```text docker info | grep -A 10 "Registry Mirrors" ``` ## **九、什么时候建议完全卸载 Docker?** 以下情况建议完整清理后重装: - 多轮升级后环境状态混乱 - 配置文件长期手工改动、难以追溯 - 引擎版本和依赖出现兼容性问题 但请注意: **完整卸载前,务必确认是否保留 `/var/lib/docker` 数据。** ## **十、写在最后:脚本化的价值,不是“偷懒”,是“稳定可复制”** 我做这份脚本的核心目标是: - 新机器快速初始化 - 多环境配置保持一致 - 出问题时可定位、可回滚 如果你也在做 Linux 下 Docker 标准化落地,希望这篇能帮你少踩一些坑。