#!/bin/bash set -eo pipefail # 定义脚本参数 DOCKER_VERSION="20.10" # 在这里修改期望的版本 UBUNTU_IDS=("18.04" "20.04" "22.04" "24.04") ALIYUN_MIRROR="https://mirrors.aliyun.com" DOCKER_COMPOSE_VERSION="2.26.1" # 1. 检测Ubuntu环境 check_ubuntu() { if ! command -v lsb_release &> /dev/null || [[ $(lsb_release -is) != "Ubuntu" ]]; then echo "错误:本脚本仅支持Ubuntu系统" exit 1 fi local version_id=$(lsb_release -rs) if [[ ! " ${UBUNTU_IDS[*]} " =~ " ${version_id} " ]]; then echo "错误:不支持的Ubuntu版本 ${version_id},支持版本:${UBUNTU_IDS[*]}" exit 1 fi } # 2. 替换阿里云源 set_aliyun_mirror() { sudo sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list sudo sed -i "s/security.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates } # 3. 准备Docker仓库 prepare_docker_env() { sudo mkdir -p /etc/apt/keyrings curl -fsSL $ALIYUN_MIRROR/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg local codename=$(lsb_release -cs) echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] $ALIYUN_MIRROR/docker-ce/linux/ubuntu $codename stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update } # 4. 版本解析优化版本 get_docker_version() { local target_version="" if [[ $DOCKER_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then # 提取大版本下最高小版本 target_version=$(apt-cache madison docker-ce \ | awk -F'|' '{gsub(/ /,"",$2); print $2}' \ | grep -E "^[0-9]+:${DOCKER_VERSION}([.-]|\~\w+)" \ | sort -rV \ | head -1) elif [[ $DOCKER_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then # 精确版本匹配 target_version=$(apt-cache madison docker-ce \ | awk -F'|' '{gsub(/ /,"",$2); print $2}' \ | grep -E "^[0-9]+:${DOCKER_VERSION}.*$(lsb_release -cs)" ) fi [ -z "$target_version" ] && echo "错误:找不到Docker版本 $DOCKER_VERSION" && exit 1 echo "$target_version" | sed 's/^[0-9]+://' # 去除前缀 } # 5. 主流程 main() { check_ubuntu echo "-- 设置阿里云源 --" set_aliyun_mirror echo "-- 准备Docker仓库 --" prepare_docker_env echo "-- 解析Docker版本 --" local full_version=$(get_docker_version) echo "选择版本:$full_version" echo "-- 安装组件 --" sudo apt-get install -y \ docker-ce-cli="$full_version" \ docker-ce="$full_version" \ docker-ce-rootless-extras="$full_version" \ containerd.io \ docker-buildx-plugin \ docker-compose-plugin echo "-- 安装docker-compose --" sudo curl -sSL "https://get.daocloud.io/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m`" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose echo "-- 禁用自动更新 --" sudo apt-mark hold docker-ce docker-ce-cli containerd.io echo "-- 启动服务 --" sudo systemctl enable docker && sudo systemctl start docker echo -e "\n=== 安装完成 ===" docker --version docker-compose --version } main 请写一个shell,基于上述的部分安装逻辑,实现如下的功能 脚本前面提取变量 docker的版本号 20.10.15 或 20.10(安装小版本最高的版本) 1. 检测当前主机是否是ubuntu环境,本脚本支支持Ubuntu 2. 获取本机的版本号,支持ubuntu18.04 20.04 22.04 24.04的版本 3. 根据ubuntu版本修改,apt的镜像源为阿里源 4. 在线安装符合变量版本的docker,在线安装docker-compose,安装常用的插件 5. 禁止docker自动更新