Files
Knowledge/1 使用/docker/我写了一个 Linux 一键安装 Docker 脚本:从安装到配置优化,一篇讲透.md
T

207 lines
5.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## **一、这套脚本解决什么问题?**
这份脚本不是只做“安装命令拼接”,而是覆盖完整链路:
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 标准化落地,希望这篇能帮你少踩一些坑。