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

5.3 KiB
Raw Blame History

一、这套脚本解决什么问题?

这份脚本不是只做“安装命令拼接”,而是覆盖完整链路:

  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)标准用法(推荐)

# 下载脚本
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)常用参数

sudo bash install-docker-linux.sh [选项]
  • --version <版本号>:安装指定 Docker 版本
  • --no-compose:不安装 Docker Compose
  • --no-mirror:不配置镜像加速(海外网络可用)
  • --no-autostart:不设置 Docker 开机自启
  • --help:查看帮助

示例

# 默认安装(交互式)
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
  • 设置较合理的并发下载与文件句柄上限

你也可以按自己的场景再细调:

sudo nano /etc/docker/daemon.json
sudo systemctl restart docker
docker info

七、安装完成后,我建议你做这 4 个验证

docker --version
docker info
docker compose version
docker run --rm hello-world

如果这 4 项都通过,基础可用性就没问题了。

另外,若当前用户还需要 sudo 才能运行 Docker,一般是组权限没刷新:

newgrp docker

或者重新登录终端会话。

八、常见报错,优先这么排查

1)权限报错

  • 现象:提示必须 root
  • 处理:确保使用 sudo bash install-docker-linux.sh

2)网络/GPG 相关报错

  • 先验证 DNS 和外网访问
  • 内网环境可配置代理后重试

3)Docker 服务启动失败

优先看这条日志:

sudo journalctl -xeu docker.service --no-pager | tail -50

其次检查 daemon.json 是否合法 JSON。

4)镜像拉取慢/失败

  • 检查镜像加速源是否生效:
docker info | grep -A 10 "Registry Mirrors"

九、什么时候建议完全卸载 Docker?

以下情况建议完整清理后重装:

  • 多轮升级后环境状态混乱
  • 配置文件长期手工改动、难以追溯
  • 引擎版本和依赖出现兼容性问题

但请注意:
完整卸载前,务必确认是否保留 /var/lib/docker 数据。

十、写在最后:脚本化的价值,不是“偷懒”,是“稳定可复制”

我做这份脚本的核心目标是:

  • 新机器快速初始化
  • 多环境配置保持一致
  • 出问题时可定位、可回滚

如果你也在做 Linux 下 Docker 标准化落地,希望这篇能帮你少踩一些坑。