You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
4.9 KiB
195 lines
4.9 KiB
#!/bin/bash
|
|
set -e
|
|
|
|
DOCKER_TGZ="docker.tgz"
|
|
COMPOSE_BIN="docker-compose"
|
|
INSTALL_DIR="/usr/bin"
|
|
SYSTEMD_DIR="/etc/systemd/system"
|
|
DAEMON_JSON="/etc/docker/daemon.json"
|
|
|
|
# ===============================
|
|
# 多个镜像加速器 (按需修改)
|
|
# ===============================
|
|
REGISTRY_MIRRORS=(
|
|
"https://docker-cf.registry.cyou"
|
|
"https://docker.registry.cyou"
|
|
"https://hub.uuuadc.top"
|
|
"https://docker.anyhub.us.kg"
|
|
"https://dockerhub.jobcher.com"
|
|
"https://dockerhub.icu"
|
|
"https://docker.ckyl.me"
|
|
"https://docker.awsl9527.cn"
|
|
"https://docker.rainbond.cc"
|
|
"https://docker.1panel.live"
|
|
"https://docker.1ms.run"
|
|
"https://hub.rat.dev"
|
|
"https://docker.jsdelivr.fyi"
|
|
"https://dockerpull.com"
|
|
"https://dockerproxy.cn"
|
|
"https://docker.m.daocloud.io"
|
|
"https://hub.gog.email"
|
|
"https://7dg5h62m.mirror.aliyuncs.com"
|
|
"https://registry.cn-hangzhou.aliyuncs.com"
|
|
"https://dockerhub.azk8s.cn",
|
|
"https://hub-mirror.c.163.com"
|
|
"https://mirrors.ustc.edu.cn"
|
|
"https://hub.c.163.com"
|
|
)
|
|
|
|
echo "=== Docker Offline Installer (Full Version) ==="
|
|
|
|
###############################################
|
|
# 函数:卸载旧 Docker
|
|
###############################################
|
|
uninstall_old_docker() {
|
|
echo "------ 开始卸载旧 Docker ------"
|
|
|
|
# systemd 停止服务
|
|
systemctl stop docker >/dev/null 2>&1 || true
|
|
systemctl stop docker.socket >/dev/null 2>&1 || true
|
|
|
|
# 删除二进制
|
|
rm -f /usr/bin/docker
|
|
rm -f /usr/bin/dockerd
|
|
rm -f /usr/bin/containerd
|
|
rm -f /usr/bin/runc
|
|
rm -f /usr/local/bin/docker-compose
|
|
|
|
# 针对 rpm 系统(CentOS / RHEL)
|
|
if command -v rpm >/dev/null 2>&1; then
|
|
rpm -qa | grep -E "docker|containerd" | xargs -r rpm -e --nodeps
|
|
fi
|
|
|
|
# 针对 deb 系统(Ubuntu / Debian)
|
|
if command -v dpkg >/dev/null 2>&1; then
|
|
apt-get remove -y docker docker-engine docker.io containerd runc >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
echo "------ 卸载旧 Docker 完成 ------"
|
|
}
|
|
|
|
###############################################
|
|
# 执行卸载
|
|
###############################################
|
|
uninstall_old_docker
|
|
|
|
|
|
###############################################
|
|
# 安装 Docker
|
|
###############################################
|
|
echo "1) 安装 Docker 二进制程序..."
|
|
if [ ! -f "$DOCKER_TGZ" ]; then
|
|
echo "[ERROR] 未找到 docker.tgz,请放在当前目录"
|
|
exit 1
|
|
fi
|
|
|
|
tar -xf $DOCKER_TGZ
|
|
cd docker
|
|
|
|
cp docker* $INSTALL_DIR/
|
|
[ -f "containerd" ] && cp containerd $INSTALL_DIR/
|
|
[ -f "runc" ] && cp runc $INSTALL_DIR/
|
|
|
|
cd ..
|
|
|
|
|
|
###############################################
|
|
# 创建 systemd 服务
|
|
###############################################
|
|
echo "2) 创建 systemd 服务文件..."
|
|
|
|
cat > $SYSTEMD_DIR/docker.service <<EOF
|
|
[Unit]
|
|
Description=Docker Application Container Engine
|
|
Documentation=https://docs.docker.com
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=notify
|
|
ExecStart=/usr/bin/dockerd
|
|
ExecReload=/bin/kill -s HUP \\$MAINPID
|
|
LimitNOFILE=infinity
|
|
LimitNPROC=infinity
|
|
LimitCORE=infinity
|
|
TimeoutStartSec=0
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
|
|
|
|
###############################################
|
|
# 配置 daemon.json(支持多个 registry mirrors)
|
|
###############################################
|
|
echo "3) 配置 daemon.json (支持多个 registry mirrors)..."
|
|
|
|
mkdir -p /etc/docker
|
|
|
|
# 生成 JSON 数组字符串
|
|
MIRROR_JSON=""
|
|
for m in "${REGISTRY_MIRRORS[@]}"; do
|
|
if [ -z "$MIRROR_JSON" ]; then
|
|
MIRROR_JSON="\"$m\""
|
|
else
|
|
MIRROR_JSON="$MIRROR_JSON, \"$m\""
|
|
fi
|
|
done
|
|
|
|
if [ ! -f "$DAEMON_JSON" ]; then
|
|
echo "[INFO] daemon.json 不存在,正在创建..."
|
|
cat > $DAEMON_JSON <<EOF
|
|
{
|
|
"registry-mirrors": [ $MIRROR_JSON ]
|
|
}
|
|
EOF
|
|
else
|
|
echo "[INFO] daemon.json 已存在,正在合并 registry-mirrors ..."
|
|
if grep -q "registry-mirrors" "$DAEMON_JSON"; then
|
|
sed -i "s#\"registry-mirrors\": \[[^]]*\]#\"registry-mirrors\": [ $MIRROR_JSON ]#" "$DAEMON_JSON"
|
|
else
|
|
sed -i "s#^{#{\n \"registry-mirrors\": [ $MIRROR_JSON ],#" "$DAEMON_JSON"
|
|
fi
|
|
fi
|
|
|
|
echo "daemon.json 当前内容:"
|
|
cat $DAEMON_JSON
|
|
|
|
|
|
###############################################
|
|
# 启动 Docker
|
|
###############################################
|
|
echo "4) 启动 Docker 服务..."
|
|
systemctl enable docker
|
|
systemctl restart docker
|
|
|
|
|
|
###############################################
|
|
# 安装 docker-compose
|
|
###############################################
|
|
echo "5) 安装 docker-compose..."
|
|
|
|
if [ ! -f "$COMPOSE_BIN" ]; then
|
|
echo "[ERROR] 未找到 docker-compose 文件"
|
|
exit 1
|
|
fi
|
|
|
|
cp $COMPOSE_BIN /usr/local/bin/docker-compose
|
|
chmod +x /usr/local/bin/docker-compose
|
|
|
|
|
|
###############################################
|
|
# 验证安装
|
|
###############################################
|
|
echo "6) 验证安装..."
|
|
|
|
echo -n "Docker 版本: "
|
|
docker --version || echo "Docker 未正确安装"
|
|
|
|
echo -n "Compose 版本: "
|
|
docker-compose --version || echo "Compose 未正确安装"
|
|
|
|
echo "=== Docker 离线安装(含自动卸载旧版本 + 多镜像加速)完成 ==="
|
|
|
|
|