mirror of
				https://gitee.com/SuperManito/LinuxMirrors
				synced 2025-11-04 08:20:28 +08:00 
			
		
		
		
	更新并优化 Docker 一键安装脚本
This commit is contained in:
		@@ -1,12 +1,12 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
## Author: SuperManito
 | 
			
		||||
## Modified: 2022-06-05
 | 
			
		||||
## Modified: 2023-05-01
 | 
			
		||||
## License: GPL-2.0
 | 
			
		||||
## Github: https://github.com/SuperManito/LinuxMirrors
 | 
			
		||||
## Gitee: https://gitee.com/SuperManito/LinuxMirrors
 | 
			
		||||
 | 
			
		||||
function AuthorSignature() {
 | 
			
		||||
    echo -e "\n${GREEN} ------------ 脚本执行结束 ------------ ${PLAIN}\n"
 | 
			
		||||
    echo -e "\n$COMPLETE 脚本执行结束\n"
 | 
			
		||||
    echo -e '\033[0;1;35;95m┌─\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m──\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m──\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m──\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m──\033[0;1;31;91m──\033[0;1;33;93m──\033[0;1;32;92m──\033[0;1;36;96m──\033[0;1;34;94m──\033[0;1;35;95m─┐\033[0m'
 | 
			
		||||
    echo -e '\033[0;1;31;91m│\033[0m   \033[0;1;32;92m__\033[0;1;36;96m__\033[0;1;34;94m_\033[0m                       \033[0;1;34;94m__\033[0m  \033[0;1;31;91m__\033[0;1;33;93m_\033[0m            \033[0;1;33;93m_\033[0m \033[0;1;32;92m_\033[0;1;36;96m_\033[0m      \033[0;1;31;91m│\033[0m'
 | 
			
		||||
    echo -e '\033[0;1;33;93m│\033[0m  \033[0;1;32;92m/\033[0m \033[0;1;36;96m_\033[0;1;34;94m__\033[0;1;35;95m/_\033[0;1;31;91m_\033[0m  \033[0;1;33;93m_\033[0;1;32;92m__\033[0;1;36;96m__\033[0;1;34;94m_\033[0m  \033[0;1;35;95m_\033[0;1;31;91m__\033[0m  \033[0;1;32;92m__\033[0;1;36;96m__\033[0;1;34;94m_/\033[0m  \033[0;1;31;91m|/\033[0m  \033[0;1;32;92m/_\033[0;1;36;96m__\033[0m \033[0;1;34;94m_\033[0;1;35;95m__\033[0;1;31;91m__\033[0m  \033[0;1;32;92m(_\033[0;1;36;96m)\033[0m \033[0;1;34;94m/_\033[0;1;35;95m__\033[0;1;31;91m__\033[0m \033[0;1;33;93m│\033[0m'
 | 
			
		||||
@@ -20,39 +20,37 @@ function AuthorSignature() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 定义系统判定变量
 | 
			
		||||
DebianRelease="lsb_release"
 | 
			
		||||
ARCH=$(uname -m)
 | 
			
		||||
SYSTEM_DEBIAN="Debian"
 | 
			
		||||
SYSTEM_UBUNTU="Ubuntu"
 | 
			
		||||
SYSTEM_KALI="Kali"
 | 
			
		||||
SYSTEM_REDHAT="RedHat"
 | 
			
		||||
SYSTEM_RHEL="RedHat"
 | 
			
		||||
SYSTEM_CENTOS="CentOS"
 | 
			
		||||
SYSTEM_CENTOS_STREAM="CentOS Stream"
 | 
			
		||||
SYSTEM_ROCKY="Rocky"
 | 
			
		||||
SYSTEM_FEDORA="Fedora"
 | 
			
		||||
SYSTEM_OPENEULER="openEuler"
 | 
			
		||||
 | 
			
		||||
## 定义目录和文件
 | 
			
		||||
LinuxRelease=/etc/os-release
 | 
			
		||||
RedHatRelease=/etc/redhat-release
 | 
			
		||||
DebianVersion=/etc/debian_version
 | 
			
		||||
DebianSourceList=/etc/apt/sources.list
 | 
			
		||||
DebianExtendListDir=/etc/apt/sources.list.d
 | 
			
		||||
RedHatReposDir=/etc/yum.repos.d
 | 
			
		||||
SelinuxConfig=/etc/selinux/config
 | 
			
		||||
File_LinuxRelease=/etc/os-release
 | 
			
		||||
File_RedHatRelease=/etc/redhat-release
 | 
			
		||||
File_openEulerRelease=/etc/openEuler-release
 | 
			
		||||
File_DebianVersion=/etc/debian_version
 | 
			
		||||
File_DebianSourceList=/etc/apt/sources.list
 | 
			
		||||
Dir_DebianExtendSource=/etc/apt/sources.list.d
 | 
			
		||||
Dir_RedHatRepos=/etc/yum.repos.d
 | 
			
		||||
Dir_openEulerRepos=/etc/yum.repos.d
 | 
			
		||||
Dir_openSUSERepos=/etc/zypp/repos.d
 | 
			
		||||
 | 
			
		||||
## 定义 Docker 相关变量
 | 
			
		||||
DockerSourceList=$DebianExtendListDir/docker.list
 | 
			
		||||
DockerRepo=$RedHatReposDir/download.docker.com_linux_*.repo
 | 
			
		||||
DockerDir=/etc/docker
 | 
			
		||||
DockerConfig=$DockerDir/daemon.json
 | 
			
		||||
DockerConfigBackup=$DockerDir/daemon.json.bak
 | 
			
		||||
DockerCompose=/usr/local/bin/docker-compose
 | 
			
		||||
DockerVersionFile=docker-version.txt
 | 
			
		||||
DockerCEVersionFile=docker-ce-version.txt
 | 
			
		||||
DockerCECLIVersionFile=docker-ce-cli-version.txt
 | 
			
		||||
PROXY_URL=https://ghproxy.com/
 | 
			
		||||
DOCKER_COMPOSE_VERSION=1.29.2
 | 
			
		||||
DOCKER_COMPOSE_DOWNLOAD_URL=https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64
 | 
			
		||||
 | 
			
		||||
## 定义颜色变量
 | 
			
		||||
RED='\033[31m'
 | 
			
		||||
GREEN='\033[32m'
 | 
			
		||||
YELLOW='\033[33m'
 | 
			
		||||
@@ -65,52 +63,44 @@ WARN='[\033[33mWARN\033[0m]'
 | 
			
		||||
ERROR='[\033[31mERROR\033[0m]'
 | 
			
		||||
WORKING='[\033[34m*\033[0m]'
 | 
			
		||||
 | 
			
		||||
## 组合函数
 | 
			
		||||
function Combin_Function() {
 | 
			
		||||
    PermissionJudgment
 | 
			
		||||
    NetWorkJudgment
 | 
			
		||||
    EnvJudgment
 | 
			
		||||
    ChooseMirrors
 | 
			
		||||
    InstallationEnvironment
 | 
			
		||||
    ConfigureDockerCEMirror
 | 
			
		||||
    DockerEngine
 | 
			
		||||
    DockerCompose
 | 
			
		||||
    ShowVersion
 | 
			
		||||
    AuthorSignature
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 系统判定变量
 | 
			
		||||
function EnvJudgment() {
 | 
			
		||||
    ## 判定当前系统基于 Debian or RedHat
 | 
			
		||||
    if [ -s $RedHatRelease ]; then
 | 
			
		||||
        SYSTEM_FACTIONS=${SYSTEM_REDHAT}
 | 
			
		||||
    elif [ -s $DebianVersion ]; then
 | 
			
		||||
        SYSTEM_FACTIONS=${SYSTEM_DEBIAN}
 | 
			
		||||
    ## 定义系统名称
 | 
			
		||||
    SYSTEM_NAME="$(cat $File_LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")"
 | 
			
		||||
    cat $File_LinuxRelease | grep "PRETTY_NAME=" -q
 | 
			
		||||
    [ $? -eq 0 ] && SYSTEM_PRETTY_NAME="$(cat $File_LinuxRelease | grep -E "^PRETTY_NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")"
 | 
			
		||||
    ## 定义系统版本号
 | 
			
		||||
    SYSTEM_VERSION_NUMBER="$(cat $File_LinuxRelease | grep -E "^VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")"
 | 
			
		||||
    ## 定义系统ID
 | 
			
		||||
    SYSTEM_ID="$(cat $File_LinuxRelease | grep -E "^ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")"
 | 
			
		||||
    ## 判定当前系统派系(Debian/RedHat/openEuler)
 | 
			
		||||
    if [ -s $File_RedHatRelease ]; then
 | 
			
		||||
        SYSTEM_FACTIONS="${SYSTEM_REDHAT}"
 | 
			
		||||
    elif [ -s $File_DebianVersion ]; then
 | 
			
		||||
        SYSTEM_FACTIONS="${SYSTEM_DEBIAN}"
 | 
			
		||||
    elif [ -s $File_openEulerRelease ]; then
 | 
			
		||||
        SYSTEM_FACTIONS="${SYSTEM_OPENEULER}"
 | 
			
		||||
    else
 | 
			
		||||
        echo -e "\n$ERROR 无法判断当前运行环境,请先确认本脚本针对当前操作系统是否适配!\n"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    ## 定义系统名称
 | 
			
		||||
    SYSTEM_NAME=$(cat $LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")
 | 
			
		||||
    ## 定义系统版本号
 | 
			
		||||
    SYSTEM_VERSION_NUMBER=$(cat $LinuxRelease | grep -E "VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g")
 | 
			
		||||
    ## 判定系统名称、版本、版本号
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
        SYSTEM_JUDGMENT=$(${DebianRelease} -is)
 | 
			
		||||
        SYSTEM_VERSION=$(${DebianRelease} -cs)
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        SYSTEM_JUDGMENT=$(lsb_release -is)
 | 
			
		||||
        SYSTEM_VERSION=$(lsb_release -cs)
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
        SYSTEM_JUDGMENT=$(cat $RedHatRelease | sed 's/ //g' | cut -c1-6)
 | 
			
		||||
        if [[ ${SYSTEM_JUDGMENT} = ${SYSTEM_CENTOS} || ${SYSTEM_JUDGMENT} = ${SYSTEM_RHEL} ]]; then
 | 
			
		||||
            CENTOS_VERSION=$(echo ${SYSTEM_VERSION_NUMBER} | cut -c1)
 | 
			
		||||
        else
 | 
			
		||||
            CENTOS_VERSION=""
 | 
			
		||||
        fi
 | 
			
		||||
    "${SYSTEM_REDHAT}")
 | 
			
		||||
        SYSTEM_JUDGMENT="$(cat $File_RedHatRelease | awk -F ' ' '{printf$1}')"
 | 
			
		||||
        cat $File_RedHatRelease | grep -q "${SYSTEM_CENTOS_STREAM}"
 | 
			
		||||
        [ $? -eq 0 ] && SYSTEM_JUDGMENT="${SYSTEM_CENTOS_STREAM}"
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_OPENEULER}")
 | 
			
		||||
        SYSTEM_JUDGMENT="${SYSTEM_OPENEULER}"
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    ## 判定系统处理器架构
 | 
			
		||||
    case ${ARCH} in
 | 
			
		||||
    case $(uname -m) in
 | 
			
		||||
    x86_64)
 | 
			
		||||
        SYSTEM_ARCH="x86_64"
 | 
			
		||||
        SOURCE_ARCH="amd64"
 | 
			
		||||
@@ -133,22 +123,25 @@ function EnvJudgment() {
 | 
			
		||||
        exit
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        SYSTEM_ARCH=${ARCH}
 | 
			
		||||
        SYSTEM_ARCH=$(uname -m)
 | 
			
		||||
        SOURCE_ARCH=armhf
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    ## 定义软件源分支名称
 | 
			
		||||
    if [ ${SYSTEM_JUDGMENT} = ${SYSTEM_RHEL} ]; then
 | 
			
		||||
    case "${SYSTEM_JUDGMENT}" in
 | 
			
		||||
    "${SYSTEM_RHEL}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
        SOURCE_BRANCH="centos"
 | 
			
		||||
    else
 | 
			
		||||
        SOURCE_BRANCH=${SYSTEM_JUDGMENT,,}
 | 
			
		||||
    fi
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        SOURCE_BRANCH="$(echo "${SYSTEM_JUDGMENT,,}" | sed "s/ /-/g")"
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    ## 定义软件源同步/更新文字
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        SYNC_TXT="更新"
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
    "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
        SYNC_TXT="同步"
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
@@ -157,43 +150,54 @@ function EnvJudgment() {
 | 
			
		||||
## 基础环境判断
 | 
			
		||||
function PermissionJudgment() {
 | 
			
		||||
    if [ $UID -ne 0 ]; then
 | 
			
		||||
        echo -e "\n$ERROR 权限不足,请使用 Root 用户\n"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
function NetWorkJudgment() {
 | 
			
		||||
    ping -c 1 www.baidu.com >/dev/null 2>&1
 | 
			
		||||
    if [ $? -ne 0 ]; then
 | 
			
		||||
        echo -e "\n${RED} ----- Network connection error, please check the network environment and try again later! ----- ${PLAIN}\n"
 | 
			
		||||
        exit
 | 
			
		||||
        echo -e "\n$ERROR 权限不足,请使用 Root 用户运行本脚本\n"
 | 
			
		||||
        exit 1
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 关闭防火墙
 | 
			
		||||
## 关闭防火墙和SELinux
 | 
			
		||||
function CloseFirewall() {
 | 
			
		||||
    if [[ $(systemctl is-active firewalld) == "active" ]]; then
 | 
			
		||||
        systemctl disable --now firewalld >/dev/null 2>&1
 | 
			
		||||
        [ -s $SelinuxConfig ] && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" $SelinuxConfig && setenforce 0 >/dev/null 2>&1
 | 
			
		||||
    local SelinuxConf=/etc/selinux/config
 | 
			
		||||
    if [ -x /usr/bin/systemctl ]; then
 | 
			
		||||
        if [[ $(systemctl is-active firewalld) == "active" ]]; then
 | 
			
		||||
            local CHOICE=$(echo -e "\n${BOLD}└─ 是否关闭防火墙和 SELinux ? [Y/n] ${PLAIN}")
 | 
			
		||||
            read -p "${CHOICE}" INPUT
 | 
			
		||||
            [ -z ${INPUT} ] && INPUT=Y
 | 
			
		||||
            case $INPUT in
 | 
			
		||||
            [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
                systemctl disable --now firewalld >/dev/null 2>&1
 | 
			
		||||
                [ -s $SelinuxConf ] && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" $SelinuxConfig && setenforce 0 >/dev/null 2>&1
 | 
			
		||||
                ;;
 | 
			
		||||
            [Nn] | [Nn][Oo]) ;;
 | 
			
		||||
            *)
 | 
			
		||||
                echo -e "\n$WARN 输入错误,默认不关闭!"
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 安装环境包
 | 
			
		||||
function InstallationEnvironment() {
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
        sed -i '/docker-ce/d' $DebianSourceList
 | 
			
		||||
        rm -rf $DockerSourceList
 | 
			
		||||
    ## 删除原有源
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        sed -i '/docker-ce/d' $File_DebianSourceList
 | 
			
		||||
        rm -rf $Dir_DebianExtendSource/docker.list
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
        rm -rf $DockerRepo
 | 
			
		||||
    "${SYSTEM_REDHAT}")
 | 
			
		||||
        rm -rf $Dir_RedHatRepos/*docker*.repo
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_OPENEULER}")
 | 
			
		||||
        rm -rf $Dir_openEulerRepos/*docker*.repo
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    echo -e "${WORKING} 开始${SYNC_TXT}软件源...\n"
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
    echo -e "$WORKING 开始${SYNC_TXT}软件源...\n"
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        apt-get update
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
    "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
        yum makecache
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
@@ -203,13 +207,16 @@ function InstallationEnvironment() {
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e "\n$COMPLETE 软件源${SYNC_TXT}结束\n"
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
    "${SYSTEM_REDHAT}")
 | 
			
		||||
        yum install -y yum-utils device-mapper-persistent-data lvm2
 | 
			
		||||
        ;;
 | 
			
		||||
    "${SYSTEM_OPENEULER}")
 | 
			
		||||
        dnf install -y dnf-utils device-mapper-persistent-data lvm2
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -218,12 +225,12 @@ function InstallationEnvironment() {
 | 
			
		||||
function RemoveOldVersion() {
 | 
			
		||||
    systemctl disable --now docker >/dev/null 2>&1
 | 
			
		||||
    sleep 2s
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        apt-get remove -y docker-ce docker-ce-cli containerd.io runc >/dev/null 2>&1
 | 
			
		||||
        apt-get autoremove -y >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
    "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
        yum remove -y docker-ce docker-ce-cli containerd.io podman* runc >/dev/null 2>&1
 | 
			
		||||
        yum autoremove -y >/dev/null 2>&1
 | 
			
		||||
        ;;
 | 
			
		||||
@@ -232,31 +239,27 @@ function RemoveOldVersion() {
 | 
			
		||||
 | 
			
		||||
## 配置 Docker CE 源
 | 
			
		||||
function ConfigureDockerCEMirror() {
 | 
			
		||||
    if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then
 | 
			
		||||
        SOURCE_JUDGMENT=${SOURCE}
 | 
			
		||||
    else
 | 
			
		||||
        SOURCE_JUDGMENT="download.docker.com"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
        if [ ${SYSTEM_JUDGMENT} = ${SYSTEM_KALI} ]; then
 | 
			
		||||
            curl -fsSL https://${SOURCE_JUDGMENT}/linux/debian/gpg | apt-key add - >/dev/null 2>&1
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        if [ "${SYSTEM_JUDGMENT}" = ${SYSTEM_KALI} ]; then
 | 
			
		||||
            curl -fsSL https://${SOURCE}/linux/debian/gpg | apt-key add - >/dev/null 2>&1
 | 
			
		||||
        else
 | 
			
		||||
            curl -fsSL https://${SOURCE_JUDGMENT}/linux/${SOURCE_BRANCH}/gpg | apt-key add - >/dev/null 2>&1
 | 
			
		||||
            curl -fsSL https://${SOURCE}/linux/${SOURCE_BRANCH}/gpg | apt-key add - >/dev/null 2>&1
 | 
			
		||||
        fi
 | 
			
		||||
        echo "deb [arch=${SOURCE_ARCH}] https://${SOURCE_JUDGMENT}/linux/${SOURCE_BRANCH} ${SYSTEM_VERSION} stable" | tee $DockerSourceList >/dev/null 2>&1
 | 
			
		||||
        if [ ${SYSTEM_JUDGMENT} = ${SYSTEM_KALI} ]; then
 | 
			
		||||
            sed -i "s/${SYSTEM_VERSION}/buster/g" $DockerSourceList
 | 
			
		||||
            sed -i "s/${SOURCE_BRANCH}/debian/g" $DockerSourceList
 | 
			
		||||
        echo "deb [arch=${SOURCE_ARCH}] https://${SOURCE}/linux/${SOURCE_BRANCH} ${SYSTEM_VERSION} stable" | tee $Dir_DebianExtendSource/docker.list >/dev/null 2>&1
 | 
			
		||||
        if [ "${SYSTEM_JUDGMENT}" = ${SYSTEM_KALI} ]; then
 | 
			
		||||
            sed -i "s/${SYSTEM_VERSION}/buster/g" $Dir_DebianExtendSource/docker.list
 | 
			
		||||
            sed -i "s/${SOURCE_BRANCH}/debian/g" $Dir_DebianExtendSource/docker.list
 | 
			
		||||
        fi
 | 
			
		||||
        apt-get update >/dev/null 2>&1
 | 
			
		||||
        apt-get update
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
        yum-config-manager -y --add-repo https://${SOURCE_JUDGMENT}/linux/${SOURCE_BRANCH}/docker-ce.repo
 | 
			
		||||
        yum makecache >/dev/null 2>&1
 | 
			
		||||
    "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
        yum-config-manager -y --add-repo https://${SOURCE}/linux/${SOURCE_BRANCH}/docker-ce.repo
 | 
			
		||||
        yum makecache
 | 
			
		||||
        sed -i "s|download.docker.com|${SOURCE}|g" $Dir_RedHatRepos/docker-ce.repo
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    [[ "${SYSTEM_FACTIONS}" == "${SYSTEM_OPENEULER}" ]] && sed -i "s|\$releasever|9|g" $Dir_RedHatRepos/docker-ce.repo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 安装 Docker Engine
 | 
			
		||||
@@ -264,15 +267,15 @@ function DockerEngine() {
 | 
			
		||||
 | 
			
		||||
    ## 导出可安装的版本列表
 | 
			
		||||
    function Export_VersionList() {
 | 
			
		||||
        case ${SYSTEM_FACTIONS} in
 | 
			
		||||
        Debian)
 | 
			
		||||
            apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCEVersionFile
 | 
			
		||||
            apt-cache madison docker-ce-cli | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCECLIVersionFile
 | 
			
		||||
        case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
        "${SYSTEM_DEBIAN}")
 | 
			
		||||
            apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCEVersionFile
 | 
			
		||||
            apt-cache madison docker-ce-cli | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCECLIVersionFile
 | 
			
		||||
            grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile
 | 
			
		||||
            ;;
 | 
			
		||||
        RedHat)
 | 
			
		||||
            yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCEVersionFile
 | 
			
		||||
            yum list docker-ce-cli --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCECLIVersionFile
 | 
			
		||||
        "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
            yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCEVersionFile
 | 
			
		||||
            yum list docker-ce-cli --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCECLIVersionFile
 | 
			
		||||
            grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
@@ -282,11 +285,11 @@ function DockerEngine() {
 | 
			
		||||
    ## 安装
 | 
			
		||||
    function Install() {
 | 
			
		||||
        if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then
 | 
			
		||||
            case ${SYSTEM_FACTIONS} in
 | 
			
		||||
            Debian)
 | 
			
		||||
            case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
            "${SYSTEM_DEBIAN}")
 | 
			
		||||
                apt-get install -y docker-ce docker-ce-cli containerd.io
 | 
			
		||||
                ;;
 | 
			
		||||
            RedHat)
 | 
			
		||||
            "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
                yum install -y docker-ce docker-ce-cli containerd.io
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
@@ -296,12 +299,12 @@ function DockerEngine() {
 | 
			
		||||
            cat $DockerVersionFile
 | 
			
		||||
            echo -e '\n注:以上可供选择的安装版本由官方源提供,若系统过新可能无法安装较旧的版本'
 | 
			
		||||
            while true; do
 | 
			
		||||
                CHOICE_F=$(echo -e "\n${BOLD}└─ 请根据上面的列表,输入你想要安装的具体版本号:${PLAIN}\n")
 | 
			
		||||
                read -p "${CHOICE_F}" DOCKER_VERSION
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 请根据上面的列表,选择并输入你想要安装的具体版本号:${PLAIN}\n")
 | 
			
		||||
                read -p "${CHOICE}" DOCKER_VERSION
 | 
			
		||||
                echo ''
 | 
			
		||||
                cat $DockerVersionFile | grep -Ew "${DOCKER_VERSION}" >/dev/null 2>&1
 | 
			
		||||
                if [ $? -eq 0 ]; then
 | 
			
		||||
                    echo ${DOCKER_VERSION} | grep -Ew '[1,2][0,8,9].[0,1][0-9].[0-9]{1,2}' >/dev/null 2>&1
 | 
			
		||||
                    echo ${DOCKER_VERSION} | grep -Ew '[1,2][0-9].[0,1]{1,2}.[0-9]{1,2}' >/dev/null 2>&1
 | 
			
		||||
                    if [ $? -eq 0 ]; then
 | 
			
		||||
                        rm -rf $DockerVersionFile
 | 
			
		||||
                        break
 | 
			
		||||
@@ -312,14 +315,11 @@ function DockerEngine() {
 | 
			
		||||
                    echo -e "$ERROR 输入错误请重新输入!"
 | 
			
		||||
                fi
 | 
			
		||||
            done
 | 
			
		||||
            case ${SYSTEM_FACTIONS} in
 | 
			
		||||
            Debian)
 | 
			
		||||
            case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
            "${SYSTEM_DEBIAN}")
 | 
			
		||||
                CheckVersion=$(echo ${DOCKER_VERSION} | cut -c1-2)
 | 
			
		||||
                CheckSubversion=$(echo ${DOCKER_VERSION} | cut -c4-5)
 | 
			
		||||
                case ${CheckVersion} in
 | 
			
		||||
                21 | 20 | 19)
 | 
			
		||||
                    INSTALL_JUDGMENT="5:"
 | 
			
		||||
                    ;;
 | 
			
		||||
                18)
 | 
			
		||||
                    if [ ${CheckSubversion} == "09" ]; then
 | 
			
		||||
                        INSTALL_JUDGMENT="5:"
 | 
			
		||||
@@ -328,12 +328,12 @@ function DockerEngine() {
 | 
			
		||||
                    fi
 | 
			
		||||
                    ;;
 | 
			
		||||
                *)
 | 
			
		||||
                    INSTALL_JUDGMENT=""
 | 
			
		||||
                    INSTALL_JUDGMENT="5:"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
                apt-get install -y docker-ce=${INSTALL_JUDGMENT}${DOCKER_VERSION}* docker-ce-cli=5:${DOCKER_VERSION}* containerd.io
 | 
			
		||||
                ;;
 | 
			
		||||
            RedHat)
 | 
			
		||||
            "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
                yum install -y docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} containerd.io
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
@@ -345,20 +345,21 @@ function DockerEngine() {
 | 
			
		||||
        if [[ ${REGISTRY_SOURCE_OFFICIAL} == "False" ]]; then
 | 
			
		||||
            if [ -d $DockerDir ] && [ -e $DockerConfig ]; then
 | 
			
		||||
                if [ -e $DockerConfigBackup ]; then
 | 
			
		||||
                    CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到已备份的 Docker 配置文件,是否覆盖备份? [Y/n] ${PLAIN}")
 | 
			
		||||
                    local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到已备份的 Docker 配置文件,是否跳过覆盖备份? [Y/n] ${PLAIN}")
 | 
			
		||||
                    read -p "${CHOICE_BACKUP}" INPUT
 | 
			
		||||
                    [ -z ${INPUT} ] && INPUT=Y
 | 
			
		||||
                    case $INPUT in
 | 
			
		||||
                    [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
                        cp -rf $DockerConfig $DockerConfigBackup >/dev/null 2>&1
 | 
			
		||||
                    [Yy] | [Yy][Ee][Ss]) ;;
 | 
			
		||||
                    [Nn] | [Nn][Oo])
 | 
			
		||||
                        echo ''
 | 
			
		||||
                        cp -rvf $DockerConfig $DockerConfigBackup 2>&1
 | 
			
		||||
                        ;;
 | 
			
		||||
                    [Nn] | [Nn][Oo]) ;;
 | 
			
		||||
                    *)
 | 
			
		||||
                        echo -e "\n$WARN 输入错误,默认不覆盖!"
 | 
			
		||||
                        ;;
 | 
			
		||||
                    esac
 | 
			
		||||
                else
 | 
			
		||||
                    cp -rf $DockerConfig $DockerConfigBackup >/dev/null 2>&1
 | 
			
		||||
                    cp -rvf $DockerConfig $DockerConfigBackup 2>&1
 | 
			
		||||
                    echo -e "\n$COMPLETE 已备份原有 Docker 配置文件至 $DockerConfigBackup\n"
 | 
			
		||||
                fi
 | 
			
		||||
                sleep 2s
 | 
			
		||||
@@ -373,17 +374,17 @@ function DockerEngine() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ## 判定是否已安装
 | 
			
		||||
    case ${SYSTEM_FACTIONS} in
 | 
			
		||||
    Debian)
 | 
			
		||||
    case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
    "${SYSTEM_DEBIAN}")
 | 
			
		||||
        dpkg -l | grep docker-ce-cli -q
 | 
			
		||||
        ;;
 | 
			
		||||
    RedHat)
 | 
			
		||||
    "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
        rpm -qa | grep docker-ce-cli -q
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    if [ $? -eq 0 ]; then
 | 
			
		||||
        Export_VersionList
 | 
			
		||||
        DOCKER_INSTALLED_VERSION=$(docker -v | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}")
 | 
			
		||||
        DOCKER_INSTALLED_VERSION=$(docker -v | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}")
 | 
			
		||||
        DOCKER_VERSION_LATEST=$(cat $DockerVersionFile | head -n 1)
 | 
			
		||||
        if [[ ${DOCKER_INSTALLED_VERSION} == ${DOCKER_VERSION_LATEST} ]]; then
 | 
			
		||||
            if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then
 | 
			
		||||
@@ -394,25 +395,24 @@ function DockerEngine() {
 | 
			
		||||
                fi
 | 
			
		||||
                echo ''
 | 
			
		||||
                systemctl enable --now docker >/dev/null 2>&1
 | 
			
		||||
                DockerCompose
 | 
			
		||||
                ShowVersion
 | 
			
		||||
                AuthorSignature
 | 
			
		||||
                exit
 | 
			
		||||
            else
 | 
			
		||||
                CHOICE_E=$(echo -e "\n${BOLD}└─ 检测到已安装最新版本的 Docker Engine,是否继续安装其它版本? [Y/n] ${PLAIN}")
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装最新版本的 Docker Engine,是否继续安装其它版本? [Y/n] ${PLAIN}")
 | 
			
		||||
            fi
 | 
			
		||||
        else
 | 
			
		||||
            if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then
 | 
			
		||||
                CHOICE_E=$(echo -e "\n${BOLD}└─ 检测到已安装旧版本的 Docker Engine,是否覆盖安装为最新版本? [Y/n] ${PLAIN}")
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装旧版本的 Docker Engine,是否覆盖安装为最新版本? [Y/n] ${PLAIN}")
 | 
			
		||||
            else
 | 
			
		||||
                CHOICE_E=$(echo -e "\n${BOLD}└─ 检测到已安装旧版本的 Docker Engine,是否继续安装其它版本? [Y/n] ${PLAIN}")
 | 
			
		||||
                local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装旧版本的 Docker Engine,是否继续安装其它版本? [Y/n] ${PLAIN}")
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        read -p "${CHOICE_E}" INPUT
 | 
			
		||||
        read -p "${CHOICE}" INPUT
 | 
			
		||||
        [ -z ${INPUT} ] && INPUT=Y
 | 
			
		||||
        case $INPUT in
 | 
			
		||||
        [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
            echo -en "\n${WORKING} 正在卸载之前的版本..."
 | 
			
		||||
            echo -en "\n$WORKING 正在卸载之前的版本..."
 | 
			
		||||
            RemoveOldVersion
 | 
			
		||||
            echo -e "\n\n$COMPLETE 卸载完毕\n"
 | 
			
		||||
            Install
 | 
			
		||||
@@ -432,55 +432,23 @@ function DockerEngine() {
 | 
			
		||||
    systemctl enable --now docker >/dev/null 2>&1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 安装 Docker Compose
 | 
			
		||||
function DockerCompose() {
 | 
			
		||||
    if [[ ${DOCKER_COMPOSE} == "True" ]]; then
 | 
			
		||||
        [ -e $DockerCompose ] && rm -rf $DockerCompose
 | 
			
		||||
        if [[ ${ARCH} == "x86_64" ]]; then
 | 
			
		||||
            echo -e ''
 | 
			
		||||
            if [ ${DOCKER_COMPOSE_DOWNLOAD_PROXY} == "True" ]; then
 | 
			
		||||
                curl -L ${PROXY_URL}${DOCKER_COMPOSE_DOWNLOAD_URL} -o $DockerCompose
 | 
			
		||||
            else
 | 
			
		||||
                curl -L ${DOCKER_COMPOSE_DOWNLOAD_URL} -o $DockerCompose
 | 
			
		||||
            fi
 | 
			
		||||
            chmod +x $DockerCompose
 | 
			
		||||
        else
 | 
			
		||||
            echo -e "\n${WORKING} 由于本机非 x86 架构,开始通过 pip3 安装 Docker Compose ...\n"
 | 
			
		||||
            if [ ${SYSTEM_FACTIONS} = ${SYSTEM_DEBIAN} ]; then
 | 
			
		||||
                apt-get install -y python3-pip python3-dev gcc libffi-dev openssl >/dev/null 2>&1
 | 
			
		||||
            elif [ ${SYSTEM_FACTIONS} = ${SYSTEM_REDHAT} ]; then
 | 
			
		||||
                yum install -y python3-pip python3-devel gcc libffi-devel openssl-devel >/dev/null 2>&1
 | 
			
		||||
            fi
 | 
			
		||||
            pip3 install --upgrade pip
 | 
			
		||||
            if [ ${DOCKER_COMPOSE_DOWNLOAD_PROXY} == "True" ]; then
 | 
			
		||||
                pip3 install -i https://mirrors.aliyun.com/pypi/simple docker-compose
 | 
			
		||||
            else
 | 
			
		||||
                pip3 install docker-compose
 | 
			
		||||
            fi
 | 
			
		||||
            [ $? -ne 0 ] && echo -e "\n$ERROR Docker Compose 安装失败\n\n检测到当前处理器架构为 ${ARCH} ,无法绝对保证安装成功,自行查看 pip 报错原因"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e ''
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 查看版本并验证安装结果
 | 
			
		||||
function ShowVersion() {
 | 
			
		||||
    echo -e "${WORKING} 验证安装版本...\n"
 | 
			
		||||
    echo -e "\n$WORKING 验证安装版本...\n"
 | 
			
		||||
    docker -v
 | 
			
		||||
    VERIFICATION_DOCKER=$?
 | 
			
		||||
    [[ ${DOCKER_COMPOSE} == "True" ]] && docker-compose -v
 | 
			
		||||
    if [ ${VERIFICATION_DOCKER} -eq 0 ]; then
 | 
			
		||||
        echo -e "\n$COMPLETE 安装完成"
 | 
			
		||||
    else
 | 
			
		||||
        echo -e "\n$ERROR 安装失败"
 | 
			
		||||
        case ${SYSTEM_FACTIONS} in
 | 
			
		||||
        Debian)
 | 
			
		||||
            echo -e "\n检查源文件: cat $DockerSourceList"
 | 
			
		||||
        case "${SYSTEM_FACTIONS}" in
 | 
			
		||||
        "${SYSTEM_DEBIAN}")
 | 
			
		||||
            echo -e "\n检查源文件:cat $Dir_DebianExtendSource/docker.list"
 | 
			
		||||
            echo -e '请尝试手动执行安装命令: apt-get install -y docker-ce docker-ce-cli containerd.io\n'
 | 
			
		||||
            echo ''
 | 
			
		||||
            ;;
 | 
			
		||||
        RedHat)
 | 
			
		||||
            echo -e "\n检查源文件: cat $DockerRepo"
 | 
			
		||||
        "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
 | 
			
		||||
            echo -e "\n检查源文件:cat $Dir_RedHatRepos/docker.repo"
 | 
			
		||||
            echo -e '请尝试手动执行安装命令: yum install -y docker-ce docker-ce-cli containerd.io\n'
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
@@ -501,91 +469,24 @@ function ShowVersion() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function ChooseMirrors() {
 | 
			
		||||
 | 
			
		||||
    function WelcomeTitle() {
 | 
			
		||||
        echo -e '+------------------------------------+'
 | 
			
		||||
        echo -e '|                                    |'
 | 
			
		||||
        echo -e '|    欢迎使用 Docker 一键安装脚本    |'
 | 
			
		||||
        echo -e '|                                    |'
 | 
			
		||||
        echo -e '+------------------------------------+'
 | 
			
		||||
        echo -e ''
 | 
			
		||||
        echo -e " 运行环境  ${BLUE}${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"} ${SYSTEM_ARCH}${PLAIN}"
 | 
			
		||||
        echo -e " 系统时间  ${BLUE}$(date "+%Y-%m-%d %H:%M:%S") $(timedatectl status | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')${PLAIN}"
 | 
			
		||||
        echo -e ''
 | 
			
		||||
    }
 | 
			
		||||
    clear
 | 
			
		||||
    echo -e '+---------------------------------------------------+'
 | 
			
		||||
    echo -e '|                                                   |'
 | 
			
		||||
    echo -e '|   =============================================   |'
 | 
			
		||||
    echo -e '|                                                   |'
 | 
			
		||||
    echo -e '|            欢迎使用 Docker 一键安装脚本           |'
 | 
			
		||||
    echo -e '|                                                   |'
 | 
			
		||||
    echo -e '|   =============================================   |'
 | 
			
		||||
    echo -e '|                                                   |'
 | 
			
		||||
    echo -e '+---------------------------------------------------+'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e '#####################################################'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e '    提供以下 Docker CE 和 Docker Hub 源可供选择:'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e '#####################################################'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e ' Docker CE'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e ' ❖   阿里云           1)'
 | 
			
		||||
    echo -e ' ❖   腾讯云           2)'
 | 
			
		||||
    echo -e ' ❖   华为云           3)'
 | 
			
		||||
    echo -e ' ❖   Azure            4)'
 | 
			
		||||
    echo -e ' ❖   网易             5)'
 | 
			
		||||
    echo -e ' ❖   清华大学         6)'
 | 
			
		||||
    echo -e ' ❖   中科大           7)'
 | 
			
		||||
    echo -e ' ❖   官方             8)'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e ' Docker Hub'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e ' ❖   阿里云(北京)   1)'
 | 
			
		||||
    echo -e ' ❖   阿里云(杭州)   2)'
 | 
			
		||||
    echo -e ' ❖   阿里云(成都)   3)'
 | 
			
		||||
    echo -e ' ❖   阿里云(广州)   4)'
 | 
			
		||||
    echo -e ' ❖   阿里云(香港)   5)'
 | 
			
		||||
    echo -e ' ❖   腾讯云           6)'
 | 
			
		||||
    echo -e ' ❖   华为云           7)'
 | 
			
		||||
    echo -e ' ❖   Azure            8)'
 | 
			
		||||
    echo -e ' ❖   DaoCloud         9)'
 | 
			
		||||
    echo -e ' ❖   中科大          10)'
 | 
			
		||||
    echo -e ' ❖   谷歌云          11)'
 | 
			
		||||
    echo -e ' ❖   官方            12)'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e '#####################################################'
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e "        运行环境  ${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER} ${SYSTEM_ARCH}"
 | 
			
		||||
    echo -e "        系统时间  $(date "+%Y-%m-%d %H:%M:%S")"
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e '#####################################################'
 | 
			
		||||
    CHOICE_A=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker CE 源 [ 1~8 ]:${PLAIN}")
 | 
			
		||||
    read -p "${CHOICE_A}" INPUT
 | 
			
		||||
    case $INPUT in
 | 
			
		||||
    1)
 | 
			
		||||
        SOURCE="mirrors.aliyun.com/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    2)
 | 
			
		||||
        SOURCE="mirrors.tencent.com/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    3)
 | 
			
		||||
        SOURCE="repo.huaweicloud.com/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    4)
 | 
			
		||||
        SOURCE="mirror.azure.cn/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    5)
 | 
			
		||||
        SOURCE="mirrors.163.com/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    6)
 | 
			
		||||
        SOURCE="mirrors.tuna.tsinghua.edu.cn/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    7)
 | 
			
		||||
        SOURCE="mirrors.ustc.edu.cn/docker-ce"
 | 
			
		||||
        ;;
 | 
			
		||||
    8)
 | 
			
		||||
        SOURCE="download.docker.com"
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        SOURCE="mirrors.aliyun.com/docker-ce"
 | 
			
		||||
        echo -e "\n$WARN 输入错误,默认使用阿里云!"
 | 
			
		||||
        sleep 1s
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    WelcomeTitle
 | 
			
		||||
 | 
			
		||||
    ## 是否手动选择安装版本
 | 
			
		||||
    CHOICE_C=$(echo -e "\n  ${BOLD}└─ 是否安装最新版本的 Docker Engine? [Y/n] ${PLAIN}")
 | 
			
		||||
    read -p "${CHOICE_C}" INPUT
 | 
			
		||||
    local CHOICE_A=$(echo -e "${BOLD}└─ 是否安装最新版本的 Docker Engine? [Y/n] ${PLAIN}")
 | 
			
		||||
    read -p "${CHOICE_A}" INPUT
 | 
			
		||||
    [ -z ${INPUT} ] && INPUT=Y
 | 
			
		||||
    case $INPUT in
 | 
			
		||||
    [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
@@ -593,17 +494,79 @@ function ChooseMirrors() {
 | 
			
		||||
        ;;
 | 
			
		||||
    [Nn] | [Nn][Oo])
 | 
			
		||||
        DOCKER_VERSION_INSTALL_LATEST="False"
 | 
			
		||||
        if [ ${SOURCE} != "download.docker.com" ]; then
 | 
			
		||||
            echo -e "\n$WARN Docker CE 源已替换成官方源!"
 | 
			
		||||
        fi
 | 
			
		||||
        SOURCE="download.docker.com"
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        DOCKER_VERSION_INSTALL_LATEST="True"
 | 
			
		||||
        echo -e "\n$WARN 输入错误,默认安装最新版本!"
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    CHOICE_B=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker Hub 源 [ 1~12 ]:${PLAIN}")
 | 
			
		||||
    read -p "${CHOICE_B}" INPUT
 | 
			
		||||
    if [ -z $SOURCE ]; then
 | 
			
		||||
        echo -e ''
 | 
			
		||||
        echo -e ' ❖   阿里云           1)'
 | 
			
		||||
        echo -e ' ❖   腾讯云           2)'
 | 
			
		||||
        echo -e ' ❖   华为云           3)'
 | 
			
		||||
        echo -e ' ❖   Azure            4)'
 | 
			
		||||
        echo -e ' ❖   网易             5)'
 | 
			
		||||
        echo -e ' ❖   清华大学         6)'
 | 
			
		||||
        echo -e ' ❖   南京大学         7)'
 | 
			
		||||
        echo -e ' ❖   中科大           8)'
 | 
			
		||||
        echo -e ' ❖   中科院           9)'
 | 
			
		||||
        echo -e ' ❖   官方            10)'
 | 
			
		||||
        local CHOICE_B=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker CE 源 [ 1~8 ]:${PLAIN}")
 | 
			
		||||
        read -p "${CHOICE_B}" INPUT
 | 
			
		||||
        case $INPUT in
 | 
			
		||||
        1)
 | 
			
		||||
            SOURCE="mirrors.aliyun.com/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        2)
 | 
			
		||||
            SOURCE="mirrors.tencent.com/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        3)
 | 
			
		||||
            SOURCE="repo.huaweicloud.com/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        4)
 | 
			
		||||
            SOURCE="mirror.azure.cn/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        5)
 | 
			
		||||
            SOURCE="mirrors.163.com/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        6)
 | 
			
		||||
            SOURCE="mirrors.tuna.tsinghua.edu.cn/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        6)
 | 
			
		||||
            SOURCE="mirrors.nju.edu.cn/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        8)
 | 
			
		||||
            SOURCE="mirrors.ustc.edu.cn/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        9)
 | 
			
		||||
            SOURCE="mirror.iscas.ac.cn/docker-ce"
 | 
			
		||||
            ;;
 | 
			
		||||
        10)
 | 
			
		||||
            SOURCE="download.docker.com"
 | 
			
		||||
            ;;
 | 
			
		||||
        *)
 | 
			
		||||
            SOURCE="mirrors.aliyun.com/docker-ce"
 | 
			
		||||
            echo -e "\n$WARN 输入错误,默认使用阿里云!"
 | 
			
		||||
            sleep 1s
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e ''
 | 
			
		||||
    echo -e ' ❖   阿里云(北京)   1)'
 | 
			
		||||
    echo -e ' ❖   阿里云(杭州)   2)'
 | 
			
		||||
    echo -e ' ❖   阿里云(成都)   3)'
 | 
			
		||||
    echo -e ' ❖   阿里云(广州)   4)'
 | 
			
		||||
    echo -e ' ❖   阿里云(香港)   5)'
 | 
			
		||||
    echo -e ' ❖   腾讯云           6)'
 | 
			
		||||
    echo -e ' ❖   Azure            7)'
 | 
			
		||||
    echo -e ' ❖   DaoCloud         8)'
 | 
			
		||||
    echo -e ' ❖   中科大           9)'
 | 
			
		||||
    echo -e ' ❖   谷歌云          10)'
 | 
			
		||||
    echo -e ' ❖   官方            11)'
 | 
			
		||||
    local CHOICE_C=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker Hub 源 [ 1~12 ]:${PLAIN}")
 | 
			
		||||
    read -p "${CHOICE_C}" INPUT
 | 
			
		||||
    case $INPUT in
 | 
			
		||||
    1)
 | 
			
		||||
        REGISTRY_SOURCE="registry.cn-beijing.aliyuncs.com"
 | 
			
		||||
@@ -630,26 +593,22 @@ function ChooseMirrors() {
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    7)
 | 
			
		||||
        REGISTRY_SOURCE="0bab0ef02500f24b0f31c00db79ffa00.mirror.swr.myhuaweicloud.com"
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    8)
 | 
			
		||||
        REGISTRY_SOURCE="dockerhub.azk8s.com"
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    9)
 | 
			
		||||
    8)
 | 
			
		||||
        REGISTRY_SOURCE="f1361db2.m.daocloud.io"
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    10)
 | 
			
		||||
    9)
 | 
			
		||||
        REGISTRY_SOURCE="docker.mirrors.ustc.edu.cn"
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    11)
 | 
			
		||||
    10)
 | 
			
		||||
        REGISTRY_SOURCE="gcr.io"
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    12)
 | 
			
		||||
    11)
 | 
			
		||||
        REGISTRY_SOURCE="registry.docker-cn.com"
 | 
			
		||||
        REGISTRY_SOURCE_OFFICIAL="True"
 | 
			
		||||
        ;;
 | 
			
		||||
@@ -660,43 +619,21 @@ function ChooseMirrors() {
 | 
			
		||||
        sleep 1s
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    if [ -x $DockerCompose ]; then
 | 
			
		||||
        CHOICE_D=$(echo -e "\n${BOLD}└─ 检测到已安装 Docker Compose ,是否覆盖安装? [Y/n] ${PLAIN}")
 | 
			
		||||
    else
 | 
			
		||||
        CHOICE_D=$(echo -e "\n${BOLD}└─ 是否安装 Docker Compose? [Y/n] ${PLAIN}")
 | 
			
		||||
    fi
 | 
			
		||||
    read -p "${CHOICE_D}" INPUT
 | 
			
		||||
    [ -z ${INPUT} ] && INPUT=Y
 | 
			
		||||
    case $INPUT in
 | 
			
		||||
    [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
        DOCKER_COMPOSE="True"
 | 
			
		||||
        CHOICE_D1=$(echo -e "\n  ${BOLD}└─ 是否使用国内代理进行下载? [Y/n] ${PLAIN}")
 | 
			
		||||
        read -p "${CHOICE_D1}" INPUT
 | 
			
		||||
        [ -z ${INPUT} ] && INPUT=Y
 | 
			
		||||
        case $INPUT in
 | 
			
		||||
        [Yy] | [Yy][Ee][Ss])
 | 
			
		||||
            DOCKER_COMPOSE_DOWNLOAD_PROXY="True"
 | 
			
		||||
            ;;
 | 
			
		||||
        [Nn] | [Nn][Oo])
 | 
			
		||||
            DOCKER_COMPOSE_DOWNLOAD_PROXY="False"
 | 
			
		||||
            ;;
 | 
			
		||||
        *)
 | 
			
		||||
            DOCKER_COMPOSE_DOWNLOAD_PROXY="False"
 | 
			
		||||
            echo -e "\n$WARN 输入错误,默认不使用!\n"
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
        ;;
 | 
			
		||||
    [Nn] | [Nn][Oo])
 | 
			
		||||
        DOCKER_COMPOSE="False"
 | 
			
		||||
        ;;
 | 
			
		||||
    *)
 | 
			
		||||
        DOCKER_COMPOSE="False"
 | 
			
		||||
        echo -e "\n$WARN 输入错误,默认不安装!\n"
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    echo -e ''
 | 
			
		||||
 | 
			
		||||
    [ ${SYSTEM_FACTIONS} == ${SYSTEM_REDHAT} ] && CloseFirewall
 | 
			
		||||
    CloseFirewall
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
## 组合函数
 | 
			
		||||
function Combin_Function() {
 | 
			
		||||
    PermissionJudgment
 | 
			
		||||
    EnvJudgment
 | 
			
		||||
    ChooseMirrors
 | 
			
		||||
    InstallationEnvironment
 | 
			
		||||
    ConfigureDockerCEMirror
 | 
			
		||||
    DockerEngine
 | 
			
		||||
    ShowVersion
 | 
			
		||||
    AuthorSignature
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Combin_Function
 | 
			
		||||
 
 | 
			
		||||
@@ -164,7 +164,7 @@
 | 
			
		||||
    `Docker Hub` Docker Hub 镜像仓库,默认为官方提供的公共库,用于切换下载镜像时的来源仓库,又称镜像加速器
 | 
			
		||||
 | 
			
		||||
    > __注意:__  
 | 
			
		||||
    > 脚本集成安装 `Docker Engine` 与 `Docker Compose`,可手动选择安装版本和下载源,还可手动选择镜像加速器,支持国内外服务器环境和 `ARM`架构处理器环境使用。
 | 
			
		||||
    > 脚本集成安装 `Docker Engine`,可手动选择安装版本和下载源,还可手动选择镜像加速器,支持国内外服务器环境和 `ARM`架构处理器环境使用。
 | 
			
		||||
 | 
			
		||||
***
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -161,7 +161,7 @@ bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirro
 | 
			
		||||
    > `Docker CE` Docker Community Edition 镜像仓库,用于下载并安装 Docker 相关软件包。  
 | 
			
		||||
    > `Docker Hub` Docker Hub 镜像仓库,默认为官方提供的公共库,用于切换下载镜像时的来源仓库,又称镜像加速器。
 | 
			
		||||
 | 
			
		||||
    脚本集成安装 `Docker Engine` 与 `Docker Compose`,可手动选择安装版本、下载源、镜像加速器,支持国内外服务器环境和 `ARM` 架构处理器环境使用
 | 
			
		||||
    脚本集成安装 `Docker Engine`,可手动选择安装版本、下载源、镜像加速器,支持国内外服务器环境和 `ARM` 架构处理器环境使用
 | 
			
		||||
 | 
			
		||||
***
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user