From 15ef4ffb62b609cd3049deac96b6aa39f0c21a36 Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Tue, 28 Oct 2025 22:29:18 +0800 Subject: [PATCH] Update Docker 24.0.5 --- Docker 24.0.5 | 279 +++++++++++++++++++++++++------------------------- 1 file changed, 137 insertions(+), 142 deletions(-) diff --git a/Docker 24.0.5 b/Docker 24.0.5 index 0505381..44fc5f8 100644 --- a/Docker 24.0.5 +++ b/Docker 24.0.5 @@ -2,7 +2,7 @@ set -e echo "==========================================" -echo " Docker 24.0.5 一键离线安装脚本" +echo " Debian专用 Docker 一键安装脚本" echo "==========================================" # 颜色定义 @@ -12,197 +12,192 @@ YELLOW='\033[1;33m' NC='\033[0m' # 日志函数 -log_info() { - echo -e "${GREEN}[INFO]${NC} $1" -} +log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +log_error() { echo -e "${RED}[ERROR]${NC} $1"; } -log_warn() { - echo -e "${YELLOW}[WARN]${NC} $1" -} - -log_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -# 检查root权限 -check_root() { - if [[ $EUID -ne 0 ]]; then - log_error "请使用root权限运行此脚本" - exit 1 +# 检查磁盘空间 +check_disk_space() { + log_info "检查磁盘空间..." + local available=$(df / | awk 'NR==2 {print $4}') + if [ "$available" -lt 1048576 ]; then # 小于1GB + log_warn "磁盘空间紧张,正在清理..." + apt-get clean + rm -rf /var/lib/apt/lists/* + rm -rf /tmp/* + journalctl --vacuum-size=50M fi } -# 安装依赖 -install_dependencies() { - log_info "安装系统依赖..." - apt-get update - apt-get install -y \ +# 安装基础依赖(最小化) +install_minimal_deps() { + log_info "安装最小化依赖..." + apt-get update --allow-unauthenticated || { + log_warn "APT更新失败,继续安装..." + } + + apt-get install -y --allow-unauthenticated \ curl \ wget \ gnupg \ - lsb-release \ - apt-transport-https \ ca-certificates \ - software-properties-common \ iptables \ - net-tools + libseccomp2 } -# 清理有问题的docker源 -clean_docker_sources() { - log_info "清理有问题的Docker源..." - if [ -f "/etc/apt/sources.list.d/docker.list" ]; then - mv /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/docker.list.backup.$(date +%Y%m%d%H%M%S) - log_info "已备份并清理原有docker源配置" +# 彻底清理有问题的docker配置 +clean_docker_config() { + log_info "清理Docker配置..." + # 停止docker服务 + systemctl stop docker 2>/dev/null || true + systemctl stop containerd 2>/dev/null || true + + # 移除旧配置 + rm -f /etc/apt/sources.list.d/docker.list + rm -f /etc/apt/sources.list.d/docker.list.save + rm -rf /var/lib/docker +} + +# 下载并安装Docker二进制文件(完全离线方式) +install_docker_binary() { + log_info "下载Docker二进制文件..." + + # 创建安装目录 + INSTALL_DIR="/opt/docker-bin" + mkdir -p $INSTALL_DIR + cd $INSTALL_DIR + + # 下载Docker静态二进制文件(从官方release) + DOCKER_VERSION="24.0.5" + log_info "下载Docker $DOCKER_VERSION 静态二进制文件..." + + # 下载docker cli + if [ ! -f "docker" ]; then + wget -O docker https://download.docker.com/linux/static/stable/x86_64/docker-$DOCKER_VERSION.tgz && \ + tar xzvf docker-$DOCKER_VERSION.tgz && \ + cp docker/docker /usr/local/bin/ && \ + chmod +x /usr/local/bin/docker + fi + + # 下载docker-compose + if [ ! -f "docker-compose" ]; then + DOCKER_COMPOSE_VERSION="2.20.2" + wget -O /usr/local/bin/docker-compose "https://github.com/docker/compose/releases/download/v$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" && \ + chmod +x /usr/local/bin/docker-compose fi } -# 下载Docker 24.0.5离线包 -download_docker_packages() { - log_info "创建临时下载目录..." - DOWNLOAD_DIR="/tmp/docker-offline-24.0.5" - mkdir -p $DOWNLOAD_DIR - cd $DOWNLOAD_DIR - - log_info "开始下载Docker 24.0.5离线安装包..." - - # Docker 24.0.5 组件包 - packages=( - "containerd.io_1.6.21-1_amd64.deb" - "docker-ce_24.0.5-1~ubuntu.20.04~focal_amd64.deb" - "docker-ce-cli_24.0.5-1~ubuntu.20.04~focal_amd64.deb" - "docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb" - "docker-compose-plugin_2.20.2-1~ubuntu.20.04~focal_amd64.deb" - ) - - # 下载URL基础路径(这里使用官方源,您可以根据需要替换为内网源) - BASE_URL="https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64" - - for package in "${packages[@]}"; do - if [ ! -f "$package" ]; then - log_info "下载: $package" - wget -q "$BASE_URL/$package" - if [ $? -ne 0 ]; then - log_error "下载失败: $package" - log_info "尝试备用下载源..." - # 备用下载源 - wget -q "https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/focal/pool/stable/amd64/$package" || { - log_error "备用源也下载失败: $package" - return 1 - } - fi - else - log_info "文件已存在: $package" - fi - done - - log_info "所有Docker组件下载完成!" +# 使用官方脚本安装(网络方式) +install_docker_official() { + log_info "使用Docker官方脚本安装..." + + # 下载并运行官方安装脚本 + curl -fsSL https://get.docker.com -o get-docker.sh + # 修改脚本以跳过空间检查 + sed -i 's/check_space/#check_space/g' get-docker.sh + sed -i 's/apt_get_update/#apt_get_update/g' get-docker.sh + + # 运行修改后的脚本 + sh get-docker.sh --version 24.0.5 + + # 如果官方脚本失败,使用备用方法 + if [ $? -ne 0 ]; then + log_warn "官方脚本安装失败,使用备用方法..." + install_docker_backup + fi } -# 安装Docker组件 -install_docker_packages() { - log_info "开始安装Docker组件..." - DOWNLOAD_DIR="/tmp/docker-offline-24.0.5" - cd $DOWNLOAD_DIR - - # 安装顺序很重要 +# 备用安装方法 +install_docker_backup() { + log_info "使用备用方法安装Docker..." + + # 直接下载deb包安装 + cd /tmp + wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce_24.0.5-1~debian.12~bookworm_amd64.deb + wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce-cli_24.0.5-1~debian.12~bookworm_amd64.deb + wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/containerd.io_1.6.21-1_amd64.deb + + # 安装依赖 + apt-get install -y --allow-unauthenticated \ + libltdl7 \ + pigz \ + iptables + + # 安装docker包 dpkg -i containerd.io_1.6.21-1_amd64.deb - dpkg -i docker-ce-cli_24.0.5-1~ubuntu.20.04~focal_amd64.deb - dpkg -i docker-ce_24.0.5-1~ubuntu.20.04~focal_amd64.deb - dpkg -i docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb - dpkg -i docker-compose-plugin_2.20.2-1~ubuntu.20.04~focal_amd64.deb - - log_info "Docker组件安装完成!" + dpkg -i docker-ce-cli_24.0.5-1~debian.12~bookworm_amd64.deb + dpkg -i docker-ce_24.0.5-1~debian.12~bookworm_amd64.deb } # 配置Docker服务 -configure_docker() { +setup_docker_service() { log_info "配置Docker服务..." - - # 创建docker用户组 + + # 创建docker组 groupadd docker 2>/dev/null || true - + # 配置docker daemon mkdir -p /etc/docker - cat > /etc/docker/daemon.json << EOF + cat > /etc/docker/daemon.json << 'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { - "max-size": "100m" + "max-size": "50m", + "max-file": "3" }, "storage-driver": "overlay2", - "registry-mirrors": [ - "https://docker.mirrors.ustc.edu.cn", - "https://hub-mirror.c.163.com" - ] + "data-root": "/var/lib/docker" } EOF - # 启动并启用docker服务 - systemctl daemon-reload + # 启动服务 systemctl enable docker systemctl start docker - - log_info "等待Docker服务启动..." - sleep 5 + + # 等待服务启动 + sleep 3 } # 验证安装 verify_installation() { - log_info "验证Docker安装..." - - # 检查docker版本 - docker --version - docker-compose --version - - # 测试运行容器 - if systemctl is-active --quiet docker; then - log_info "测试运行hello-world容器..." - docker run --rm hello-world && { - log_info "✅ Docker安装验证成功!" - } || { - log_warn "Docker服务运行但hello-world测试失败,可能是网络问题" - } + log_info "验证安装..." + + if command -v docker &> /dev/null; then + docker --version + log_info "✅ Docker安装成功!" else - log_error "Docker服务未运行" + log_error "❌ Docker安装失败" return 1 fi -} - -# 显示使用说明 -show_usage() { - log_info "安装完成!使用说明:" - echo "" - echo "1. 启动Docker服务: systemctl start docker" - echo "2. 停止Docker服务: systemctl stop docker" - echo "3. 查看Docker状态: systemctl status docker" - echo "4. 添加用户到docker组: usermod -aG docker \$USER" - echo "5. 重新登录后即可不使用sudo运行docker命令" - echo "" - echo "Docker版本: 24.0.5" - echo "Compose版本: 2.20.2" - echo "Buildx版本: 0.11.2" + + # 测试docker服务 + if systemctl is-active docker &> /dev/null; then + log_info "✅ Docker服务运行正常" + else + log_warn "⚠️ Docker服务未运行,尝试启动..." + systemctl start docker + fi } # 主函数 main() { - log_info "开始Docker 24.0.5一键安装..." + log_info "开始Docker安装流程..." - check_root - install_dependencies - clean_docker_sources - download_docker_packages - install_docker_packages - configure_docker + check_disk_space + clean_docker_config + install_minimal_deps + install_docker_official + setup_docker_service verify_installation - show_usage - log_info "Docker 24.0.5 安装完成!" + log_info "🎉 Docker安装完成!" + echo "" + echo "使用说明:" + echo " docker --version # 查看版本" + echo " systemctl status docker # 查看服务状态" + echo " usermod -aG docker \$USER # 添加用户到docker组" } -# 错误处理 -trap 'log_error "脚本执行失败,退出码: $?"; exit 1' ERR - # 执行主函数 main "$@"