docker-universal-installer 项目介绍

版本
:v0.1.0(2026-09-11)
定位
:跨发行版 Linux 离线一键安装 Docker 的部署包项目
一、项目概述
docker-universal-installer 是一个面向无外网 / 内网隔离 / 国产化环境的 Docker 离线部署方案。它将 Docker 29.7.2 全栈运行时(dockerd、CLI、containerd、runc 等 8 个二进制)与 Docker Compose v5.5.0 打成单一离线包,在目标机器上解压后一条命令即可完成预检、安装、配置、启动与冒烟测试,全程不依赖 yum/apt 软件源,也不依赖系统 glibc。
适用于:麒麟 V10、OpenEuler、Anolis OS、CentOS/RHEL 7+、Ubuntu、Debian、UOS、Deepin、openSUSE 等主流 systemd 发行版,覆盖 x86_64 与 aarch64(含鲲鹏、飞腾、Graviton)双架构。
二、核心特性
| 特性 | 说明 |
|---|---|
| 离线一键安装 | 单包分发,bash install.sh 一条命令完成全部安装流程 |
| 不依赖系统 glibc | Docker 与 Compose 均为静态链接二进制,弱化对系统库版本的要求 |
| 双架构覆盖 | x86_64 + aarch64,适配主流服务器与国产 ARM 平台 |
| 国内镜像源预置 | daemon.json 内置 6 个国内 Docker Hub 镜像源,拉镜像更快更稳 |
| Compose 真二进制 | 49MB 官方静态 Compose,非 shim;docker compose(空格)与 docker-compose(连字符)两种写法同时可用 |
| 可重入 / 可回滚 | 支持 --force 强制覆盖、--uninstall 卸载、--rollback 回滚 |
| 保留用户配置 | systemd drop-in、daemon.json、镜像数据在重装 / 升级时不被破坏 |
| 自动冲突处理 | 检测 podman/buildah 冲突并提示,可加 --remove-podman 自动卸载 |
| 完整冒烟测试 | 安装结束自动执行版本与连通性检查,失败即明确报错 |
三、组件清单与版本
| 组件 | 版本 | 备注 |
|---|---|---|
| docker(CLI) | 29.7.2 | 静态二进制 |
| dockerd | 29.7.2 | 静态二进制 |
| containerd | v2.3.3 | 静态二进制 |
| runc | 1.x | 静态二进制 |
| docker-init / docker-proxy / ctr | 29.7.2 | 静态二进制 |
| containerd-shim-runc-v2 | 29.7.2 | 静态二进制 |
| Docker Compose | v5.5.0 | 49MB 静态二进制 |
以上为 x86_64 与 aarch64 各一份,每架构 8 个二进制,包内合计 16 个。
四、支持范围
架构:x86_64、aarch64(华为鲲鹏 / 飞腾 / AWS Graviton 等)
发行版(systemd 系):
- CentOS 7+ / RHEL 7+
- Anolis OS 8.x / OpenEuler
- Kylin V10 / UOS / Deepin
- Ubuntu 16.04+ / Debian 9+
- openSUSE Leap 15
前置条件:内核 ≥ 3.10、systemd 已运行、overlay 模块可用、root 权限。
五、目录结构
docker-universal-installer/
├── README.md # 项目说明(根目录)
├── VERSION # 版本号:0.1.0
├── Makefile # build / pack / docs / verify / clean
├── install.sh # 安装入口(= src/install.sh)
├── uninstall.sh # 卸载入口(= src/uninstall.sh)
│
├── src/ # 运行时部署包源码
│ ├── install.sh # 主安装脚本
│ ├── uninstall.sh # 卸载脚本
│ ├── README.md # 运行时包文档(部署现场查看)
│ ├── VERSION
│ ├── bin/ # x86\_64 静态二进制(8 个)
│ ├── bin-arm64/ # aarch64 静态二进制(8 个)
│ ├── compose/
│ │ └── docker-compose # Compose v5.5.0(49MB)
│ ├── systemd/
│ │ ├── containerd.service
│ │ ├── docker.service
│ │ └── docker.socket
│ └── config/
│ └── daemon.json # 默认配置(6 个国内镜像源)
│
├── docs/ # 文档与渲染产物
│ ├── CHANGELOG.md # 版本变更日志
│ ├── blog.html # 浏览器预览版
│ └── wordpress.html # WordPress 粘贴版(内联样式)
│
├── tools/
│ └── md2wp.py # Markdown → HTML 转换器
│
└── dist/ # 打包产物
  └── docker-universal-installer-v0.1.0.tar.gz (约 178MB)
六、快速使用
1. 拷贝到目标机器
\# 方式一:直接拷贝目录
scp -r docker-universal-installer root@\<host>:/root/
\# 方式二:传压缩包
scp docker-universal-installer-v0.1.0.tar.gz root@\<host>:/root/
ssh root@\<host> 'cd /root && tar xzf docker-universal-installer-v0.1.0.tar.gz'
2. 一键安装
cd /root/docker-universal-installer
sudo bash install.sh # 基础安装
sudo bash install.sh --with-compose # 同时安装 docker compose
sudo bash install.sh --with-compose --remove-podman # Anolis / RHEL 8 推荐组合
3. 安装选项
| 选项 | 作用 |
|---|---|
--with-compose |
顺带安装 docker compose |
--no-mirror |
不写国内镜像源(使用默认 registry) |
--force |
强制覆盖已有 docker 安装 |
--remove-podman |
自动卸载冲突的 podman /buildah |
--update-system |
先执行包管理器 update |
--uninstall |
卸载(保留 /var/lib/docker 镜像数据) |
--rollback |
回滚到上次安装前的状态 |
--help, -h |
显示帮助 |
4. 安装后验证
docker --version # Docker version 29.7.2
docker info # Server / Storage Driver
docker ps # 容器列表
docker run --rm hello-world
docker compose up -d # 空格语法
docker-compose up -d # 连字符语法,同一份二进制
5. 当前用户免 sudo 使用
sudo usermod -aG docker \$USER && newgrp docker
七、真实实施记录(仅展示Anolis OS 8.9 实测)
以下为在某服务器上的完整实施过程实录,验证了该部署包在国产 / 类 RHEL 发行版上的可用性。
7.1 部署环境
| 项目 | 值 |
|---|---|
| 操作系统 | Anolis OS 8.9 |
| 架构 | x86_64 |
| 内核 | 5.10.134-16.2.an8.x86_64 |
| glibc | 2.28(静态二进制不依赖,记录备查) |
| SELinux | Disabled |
| iptables | v1.8.5(nf_tables) |
| 预置冲突包 | podman、buildah(脚本检测到并给出提示) |
7.2 安装过程实录
\[root@localhost \~]# tar -zxvf docker-universal-installer-v0.1.0.tar.gz
\[root@localhost docker-universal-installer]# bash install.sh --with-compose
脚本依次执行并通过以下阶段:
- 预检(preflight):root 权限、二进制齐全、内核 ≥ 3.10、命令检查、systemd 运行、overlay 模块、iptables、SELinux、podman/buildah 冲突检测(⚠ 提示存在 podman buildah,未影响安装)。
- 备份(backup):未发现已有 docker 二进制,无需备份。
- 停服(stop):停掉现有 docker /containerd。
- 部署二进制(install):8 个静态二进制安装到
/usr/bin/。 - 部署 systemd 单元:containerd.service、docker.service、docker.socket 安装到
/lib/systemd/system/并 reload。 - 创建 docker 组。
- 写入配置:
/etc/docker/daemon.json(含 6 个国内镜像源、overlay2、日志轮转、live-restore)。 - 部署 docker-compose:
/usr/local/bin/docker-compose+/usr/bin/docker-compose软连接 + CLI 插件(同时支持两种语法)。 - 启动服务:containerd + docker 启动成功。
- 冒烟测试(smoke):全部通过。
7.3 验证结果
Docker version 29.7.2, build a7dcaa6
Docker version 29.7.2, build 6a43e3d (dockerd)
containerd v2.3.3
Docker Compose version v5.5.0 (两种写法均验证)
docker ps → 空列表正常返回
安装结论:✔ 安装完成,Docker 29.7.2 + containerd v2.3.3 + Compose v5.5.0 全部就绪;即使机器预置了 podman/buildah,未加 --remove-podman 参数也能正常安装成功(提示仅作警告)。
安装后信息:
- 备份目录:
/var/lib/docker-universal-installer/backup - 安装日志:
/var/log/docker-universal-installer-install.log - 卸载:
bash install.sh --uninstall - 回滚:
bash install.sh --rollback
八、安装流程
flowchart TD
A[解压部署包] --> B[预检<br/>OS/架构/内核/systemd/overlay/iptables/SELinux/podman冲突]
B --> C[备份已有 docker 二进制与配置]
C --> D[停掉现有 docker / containerd]
D --> E[部署 8 个静态二进制到 /usr/bin]
E --> F[部署 systemd 单元并 reload]
F --> G[创建 docker 组]
G --> H[写入 /etc/docker/daemon.json<br/>6 个国内镜像源]
H --> I{加 --with-compose?}
I -- 是 --> J[部署 Compose 真二进制<br/>双语法可用]
I -- 否 --> K
J --> K[启动 containerd + docker<br/>并设置开机自启]
K --> L[冒烟测试<br/>version / info / ps]
L --> M[✔ 安装完成]
九、默认配置说明(daemon.json)
| 配置项 | 值 | 说明 |
|---|---|---|
| registry-mirrors | 6 个国内源 | DaoCloud /dockerproxy/ USTC / 网易 / 百度 / 南京大学 |
| storage-driver | overlay2 | 默认存储驱动 |
| log-driver | json-file | 日志驱动 |
| log-opts | max-size 100m / max-file 3 | 日志自动轮转,防止占满磁盘 |
| live-restore | true | 守护进程重启时保留运行中的容器 |
十、常见问题
Q1:Anolis/RHEL/CentOS 报 yum 依赖冲突(如 container-selinux requires runc)?
本包用静态二进制,不走 yum 依赖链,直接 bash install.sh --with-compose --remove-podman 即可;若之前 yum 装失败留有脏状态,先 yum remove docker-ce docker-ce-cli containerd.io 清理再装。
Q2:docker pull 拉不到镜像?
检查 daemon.json 的 registry-mirrors;能直连 docker.io 时用 --no-mirror 重装。
Q3:报 Error initializing network controller?
多为 iptables 缺失,RHEL 系 yum install -y iptables,Debian 系 apt install -y iptables。
Q4:SELinux 阻止容器运行?
临时 setenforce 0;永久把 /etc/selinux/config 改为 permissive 后重启。
Q5:启动失败但 journalctl 无错误?
99% 是 systemd 单元缺少 Delegate=yes(dockerd 接管 cgroup 必需),本包已内置处理。
Q6:完全清理重装?
bash install.sh --uninstall
bash install.sh --rollback
bash install.sh --force --with-compose
\# 连数据一起清:rm -rf /var/lib/docker /etc/docker
十一、维护与反馈
开发侧构建命令:
make # 完整流程:pack + docs
make pack # 只打包 → dist/docker-universal-installer-v0.1.0.tar.gz
make docs # 只生成 HTML → docs/blog.html + docs/wordpress.html
make verify # 验证 src/ 完整性
make rebuild # clean + pack + docs
make clean # 清理 dist/ 旧产物
重新生成新版本:修改 VERSION → 替换 src/bin/、src/bin-arm64/、src/compose/docker-compose 二进制 → 更新 docs/CHANGELOG.md → 执行 make rebuild。
问题反馈:https://feedback.itmsky.com/feedback.php?t=00739f6be273dfd73d442888e07542b3
反馈时建议附上:install.sh --help 输出、/var/log/docker-universal-installer-install.log 完整日志、cat /etc/os-release、各组件版本号、journalctl -xeu docker 输出及重现步骤。
十二、License
- 包内 Docker / Compose 二进制:Apache 2.0(Docker, Inc.)
- 本项目脚本与文档:MIT