#!/bin/bash
# ============================================================
# Alibaba Cloud Linux 一键安装 Docker(最新版)
# 用法: bash install-docker-latest.sh
# ============================================================
set -euo pipefail
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# ---- 检查 root ----
if [[ $EUID -ne 0 ]]; then
log_error "请使用 root 用户运行此脚本"
exit 1
fi
# ---- 检查系统 ----
if [[ -f /etc/os-release ]]; then
. /etc/os-release
log_info "检测到系统: ${PRETTY_NAME:-$ID}"
else
log_warn "无法识别操作系统,继续尝试..."
fi
# ---- Step 1: 清理旧版本 ----
log_info "清理旧版本 Docker..."
dnf remove -y docker docker-client docker-common docker-engine \
docker-ce docker-ce-cli containerd.io 2>/dev/null || true
# ---- Step 2: 安装依赖 ----
log_info "安装依赖..."
dnf install -y dnf-utils yum-utils curl
# ---- Step 3: 添加 Docker CE 源 ----
log_info "添加 Docker CE 官方源..."
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 确保使用 el9 源(Alibaba Cloud Linux 基于 EL9)
REPO_FILE="/etc/yum.repos.d/docker-ce.repo"
if [[ -f "$REPO_FILE" ]]; then
sed -i 's/\$releasever/9/g' "$REPO_FILE"
log_info "已修正源版本为 el9"
fi
# ---- Step 4: 获取最新版本号 ----
log_info "查询可用最新版本..."
LATEST_VERSION=$(dnf list docker-ce --showduplicates 2>/dev/null \
| grep docker-ce-stable \
| grep -oP '\d+\.\d+\.\d+' \
| sort -V \
| tail -1)
if [[ -z "$LATEST_VERSION" ]]; then
log_error "无法获取最新版本号,请检查网络或源配置"
exit 1
fi
log_info "最新版本: Docker CE ${LATEST_VERSION}"
# ---- Step 5: 安装最新版 ----
log_info "安装 Docker CE ${LATEST_VERSION}..."
dnf install -y \
docker-ce-${LATEST_VERSION} \
docker-ce-cli-${LATEST_VERSION} \
containerd.io
# ---- Step 6: 启动 & 开机自启 ----
log_info "启动 Docker..."
systemctl enable docker
systemctl enable containerd
systemctl start docker
# ---- Step 7: 配置 ----
# 设置 Docker 镜像加速(阿里云)
if [[ ! -f /etc/docker/daemon.json ]]; then
log_info "配置 Docker 镜像加速..."
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://<your-id>.mirror.aliyuncs.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2"
}
EOF
log_warn "请编辑 /etc/docker/daemon.json 替换为你自己的阿里云镜像加速器地址"
log_warn "获取地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors"
systemctl restart docker
fi
# ---- Step 8: 安装 docker compose 插件 ----
if ! docker compose version &>/dev/null; then
log_info "安装 docker compose 插件..."
ARCH=$(uname -m)
COMPOSE_URL="https://github.com/docker/compose/releases/latest/download/docker-compose-linux-${ARCH}"
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL "${COMPOSE_URL}" -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
fi
# ---- Step 9: 验证 ----
log_info "安装完成!版本信息:"
docker version
echo ""
docker compose version 2>/dev/null || true
# ---- Step 10: 快速测试 ----
log_info "运行 hello-world 测试..."
docker run --rm hello-world 2>/dev/null && log_info "✅ Docker 运行正常" || log_warn "⚠️ hello-world 测试失败(可能网络问题),请手动测试"
log_info "🎉 Docker ${LATEST_VERSION} 安装完成!"
©著作权归作者所有