vault backup: 2026-11-07 16:33:44
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
## **一、这套脚本解决什么问题?**
|
||||
|
||||
这份脚本不是只做“安装命令拼接”,而是覆盖完整链路:
|
||||
|
||||
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 标准化落地,希望这篇能帮你少踩一些坑。
|
||||
Reference in New Issue
Block a user