Files
LinuxMirrors/DockerInstallation.sh
SuperManito c638e8b332 文档更新
2023-05-05 22:08:16 +08:00

645 lines
27 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
## Author: SuperManito
## Modified: 2023-05-02
## License: MIT
## Github: https://github.com/SuperManito/LinuxMirrors
⡇ ⠄ ⣀⡀ ⡀⢀ ⡀⢀ ⡷⢾ ⠄ ⡀⣀ ⡀⣀ ⢀⡀ ⡀⣀ ⢀⣀
⠧⠤ ⠇ ⠇⠸ ⠣⠼ ⠜⠣ ⠇⠸ ⠇ ⠏ ⠏ ⠣⠜ ⠏ ⠭⠕
function AuthorSignature() {
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'
echo -e '\033[0;1;32;92m│\033[0m \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;33;93m/\033[0m \033[0;1;32;92m/\033[0m \033[0;1;36;96m/\033[0m \033[0;1;34;94m__\033[0m \033[0;1;35;95m\\\033[0;1;31;91m/\033[0m \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[0m \033[0;1;31;91m/|\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[0m \033[0;1;35;95m`/\033[0m \033[0;1;31;91m_\033[0;1;33;93m_\033[0m \033[0;1;32;92m\/\033[0m \033[0;1;36;96m/\033[0m \033[0;1;34;94m_\033[0;1;35;95m_/\033[0m \033[0;1;31;91m_\033[0;1;33;93m_\033[0m \033[0;1;32;92m\│\033[0m'
echo -e '\033[0;1;36;96m│\033[0m \033[0;1;34;94m__\033[0;1;35;95m_/\033[0m \033[0;1;31;91m/\033[0m \033[0;1;33;93m/\033[0;1;32;92m_/\033[0m \033[0;1;36;96m/\033[0m \033[0;1;34;94m/\033[0;1;35;95m_/\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[0m \033[0;1;35;95m/\033[0m \033[0;1;31;91m/\033[0m \033[0;1;32;92m/\033[0m \033[0;1;36;96m/\033[0m \033[0;1;34;94m/_\033[0;1;35;95m/\033[0m \033[0;1;31;91m/\033[0m \033[0;1;33;93m/\033[0m \033[0;1;32;92m/\033[0m \033[0;1;36;96m/\033[0m \033[0;1;34;94m/\033[0m \033[0;1;35;95m/_\033[0;1;31;91m/\033[0m \033[0;1;33;93m/_\033[0;1;32;92m/\033[0m \033[0;1;36;96m/│\033[0m'
echo -e '\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[0m \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[0m \033[0;1;31;91m/_\033[0;1;33;93m/\033[0m \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[0m \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[0m \033[0;1;34;94m│\033[0m'
echo -e '\033[0;1;35;95m│\033[0m \033[0;1;34;94m/\033[0;1;35;95m_/\033[0m \033[0;1;35;95m│\033[0m'
echo -e '\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[0;1;31;91m─┘\033[0m\n'
echo -e " \033[1;34m官方网站\033[0m https://linuxmirrors.cn\n"
}
## 定义系统判定变量
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"
## 定义目录和文件
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 相关变量
DockerDir=/etc/docker
DockerConfig=$DockerDir/daemon.json
DockerConfigBackup=$DockerDir/daemon.json.bak
DockerVersionFile=docker-version.txt
DockerCEVersionFile=docker-ce-version.txt
DockerCECLIVersionFile=docker-ce-cli-version.txt
## 定义颜色变量
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
PLAIN='\033[0m'
BOLD='\033[1m'
SUCCESS='[\033[32mOK\033[0m]'
COMPLETE='[\033[32mDONE\033[0m]'
WARN='[\033[33mWARN\033[0m]'
ERROR='[\033[31mERROR\033[0m]'
WORKING='[\033[34m*\033[0m]'
## 系统判定变量
function EnvJudgment() {
## 定义系统名称
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
## 判定系统名称、版本、版本号
case "${SYSTEM_FACTIONS}" in
"${SYSTEM_DEBIAN}")
SYSTEM_JUDGMENT=$(lsb_release -is)
SYSTEM_VERSION=$(lsb_release -cs)
;;
"${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 $(uname -m) in
x86_64)
SYSTEM_ARCH="x86_64"
SOURCE_ARCH="amd64"
;;
aarch64)
SYSTEM_ARCH="ARM64"
SOURCE_ARCH="arm64"
;;
armv7l)
SYSTEM_ARCH="ARMv7"
SOURCE_ARCH="armhf"
;;
armv6l)
SYSTEM_ARCH="ARMv6"
SOURCE_ARCH="armhf"
;;
i386 | i686)
SYSTEM_ARCH="x86_32"
echo -e "\n${RED}---------- Docker Engine 不支持安装在 x86_32 架构的环境上! ----------${PLAIN}\n"
exit
;;
*)
SYSTEM_ARCH=$(uname -m)
SOURCE_ARCH=armhf
;;
esac
## 定义软件源分支名称
case "${SYSTEM_JUDGMENT}" in
"${SYSTEM_RHEL}" | "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_OPENEULER}")
SOURCE_BRANCH="centos"
;;
*)
SOURCE_BRANCH="$(echo "${SYSTEM_JUDGMENT,,}" | sed "s/ /-/g")"
;;
esac
## 定义软件源同步/更新文字
case "${SYSTEM_FACTIONS}" in
"${SYSTEM_DEBIAN}")
SYNC_TXT="更新"
;;
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
SYNC_TXT="同步"
;;
esac
}
## 基础环境判断
function PermissionJudgment() {
if [ $UID -ne 0 ]; then
echo -e "\n$ERROR 权限不足,请使用 Root 用户运行本脚本\n"
exit 1
fi
}
## 关闭防火墙和SELinux
function CloseFirewall() {
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
"${SYSTEM_DEBIAN}")
sed -i '/docker-ce/d' $File_DebianSourceList
rm -rf $Dir_DebianExtendSource/docker.list
;;
"${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
"${SYSTEM_DEBIAN}")
apt-get update
;;
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
yum makecache
;;
esac
VERIFICATION_SOURCESYNC=$?
if [ ${VERIFICATION_SOURCESYNC} -ne 0 ]; then
echo -e "\n$ERROR 软件源${SYNC_TXT}出错,请先确保软件包管理工具可用!\n"
exit
fi
echo -e "\n$COMPLETE 软件源${SYNC_TXT}结束\n"
case "${SYSTEM_FACTIONS}" in
"${SYSTEM_DEBIAN}")
apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
;;
"${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
}
## 卸载旧版本的 Docker Engine
function RemoveOldVersion() {
systemctl disable --now docker >/dev/null 2>&1
sleep 2s
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
;;
"${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
;;
esac
}
## 配置 Docker CE 源
function ConfigureDockerCEMirror() {
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}/linux/${SOURCE_BRANCH}/gpg | apt-key add - >/dev/null 2>&1
fi
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
;;
"${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
function DockerEngine() {
## 导出可安装的版本列表
function Export_VersionList() {
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
;;
"${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
rm -rf $DockerCEVersionFile $DockerCECLIVersionFile
}
## 安装
function Install() {
if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then
case "${SYSTEM_FACTIONS}" in
"${SYSTEM_DEBIAN}")
apt-get install -y docker-ce docker-ce-cli containerd.io
;;
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
yum install -y docker-ce docker-ce-cli containerd.io
;;
esac
else
Export_VersionList
echo -e "\n${GREEN} --------- 请选择你要安装的版本19.03.15 ---------- ${PLAIN}\n"
cat $DockerVersionFile
echo -e '\n注以上可供选择的安装版本由官方源提供若系统过新可能无法安装较旧的版本'
while true; do
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-9].[0,1]{1,2}.[0-9]{1,2}' >/dev/null 2>&1
if [ $? -eq 0 ]; then
rm -rf $DockerVersionFile
break
else
echo -e "$ERROR 请输入正确的版本号!"
fi
else
echo -e "$ERROR 输入错误请重新输入!"
fi
done
case "${SYSTEM_FACTIONS}" in
"${SYSTEM_DEBIAN}")
CheckVersion=$(echo ${DOCKER_VERSION} | cut -c1-2)
CheckSubversion=$(echo ${DOCKER_VERSION} | cut -c4-5)
case ${CheckVersion} in
18)
if [ ${CheckSubversion} == "09" ]; then
INSTALL_JUDGMENT="5:"
else
INSTALL_JUDGMENT=""
fi
;;
*)
INSTALL_JUDGMENT="5:"
;;
esac
apt-get install -y docker-ce=${INSTALL_JUDGMENT}${DOCKER_VERSION}* docker-ce-cli=5:${DOCKER_VERSION}* containerd.io
;;
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}")
yum install -y docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} containerd.io
;;
esac
fi
}
## 修改 Docker Hub 源
function ConfigureMirror() {
if [[ ${REGISTRY_SOURCE_OFFICIAL} == "False" ]]; then
if [ -d $DockerDir ] && [ -e $DockerConfig ]; then
if [ -e $DockerConfigBackup ]; then
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]) ;;
[Nn] | [Nn][Oo])
echo ''
cp -rvf $DockerConfig $DockerConfigBackup 2>&1
;;
*)
echo -e "\n$WARN 输入错误,默认不覆盖!"
;;
esac
else
cp -rvf $DockerConfig $DockerConfigBackup 2>&1
echo -e "\n$COMPLETE 已备份原有 Docker 配置文件至 $DockerConfigBackup\n"
fi
sleep 2s
else
mkdir -p $DockerDir >/dev/null 2>&1
touch $DockerConfig
fi
echo -e '{\n "registry-mirrors": ["https://SOURCE"]\n}' >$DockerConfig
sed -i "s/SOURCE/$REGISTRY_SOURCE/g" $DockerConfig
systemctl daemon-reload
fi
}
## 判定是否已安装
case "${SYSTEM_FACTIONS}" in
"${SYSTEM_DEBIAN}")
dpkg -l | grep docker-ce-cli -q
;;
"${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]{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
echo -e "\n$COMPLETE 检测到已安装最新版本的 Docker Engine跳过安装"
ConfigureMirror
if [[ $(systemctl is-active docker) == "active" ]]; then
systemctl restart docker
fi
echo ''
systemctl enable --now docker >/dev/null 2>&1
ShowVersion
AuthorSignature
exit
else
local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装最新版本的 Docker Engine是否继续安装其它版本? [Y/n] ${PLAIN}")
fi
else
if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then
local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装旧版本的 Docker Engine是否覆盖安装为最新版本? [Y/n] ${PLAIN}")
else
local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装旧版本的 Docker Engine是否继续安装其它版本? [Y/n] ${PLAIN}")
fi
fi
read -p "${CHOICE}" INPUT
[ -z ${INPUT} ] && INPUT=Y
case $INPUT in
[Yy] | [Yy][Ee][Ss])
echo -en "\n$WORKING 正在卸载之前的版本..."
RemoveOldVersion
echo -e "\n\n$COMPLETE 卸载完毕\n"
Install
;;
[Nn] | [Nn][Oo]) ;;
*)
echo -e "\n$WARN 输入错误,默认不覆盖安装!\n"
;;
esac
rm -rf $DockerVersionFile
else
RemoveOldVersion
Install
fi
ConfigureMirror
systemctl stop docker >/dev/null 2>&1
systemctl enable --now docker >/dev/null 2>&1
}
## 查看版本并验证安装结果
function ShowVersion() {
echo -e "\n$WORKING 验证安装版本...\n"
docker -v
VERIFICATION_DOCKER=$?
if [ ${VERIFICATION_DOCKER} -eq 0 ]; then
echo -e "\n$COMPLETE 安装完成"
else
echo -e "\n$ERROR 安装失败"
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 ''
;;
"${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
exit
fi
if [[ $(systemctl is-active docker) != "active" ]]; then
sleep 2
systemctl disable --now docker >/dev/null 2>&1
sleep 2
systemctl enable --now docker >/dev/null 2>&1
sleep 2
if [[ $(systemctl is-active docker) != "active" ]]; then
echo -e "\n$ERROR 检测到 Docker 服务启动异常,可能由于重复安装相同版本导致"
echo -e "\n请执行 systemctl start docker 或 service docker start 命令尝试启动"
echo -e "\n官方安装文档https://docs.docker.com/engine/install"
fi
fi
}
function ChooseMirrors() {
function WelcomeTitle() {
local system_name="${SYSTEM_PRETTY_NAME:-"${SYSTEM_NAME} ${SYSTEM_VERSION_NUMBER}"}"
local arch="${SYSTEM_ARCH}"
local date="$(date "+%Y-%m-%d %H:%M:%S")"
local timezone="$(timedatectl status 2>/dev/null | grep "Time zone" | awk -F ':' '{print$2}' | awk -F ' ' '{print$1}')"
echo -e '+------------------------------------+'
echo -e '| |'
echo -e '| 欢迎使用 Docker 一键安装脚本 |'
echo -e '| |'
echo -e '+------------------------------------+'
echo -e ''
echo -e " 运行环境 ${BLUE}${system_name} ${arch}${PLAIN}"
echo -e " 系统时间 ${BLUE}${date} ${timezone}${PLAIN}"
echo -e ''
}
clear
WelcomeTitle
## 是否手动选择安装版本
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])
DOCKER_VERSION_INSTALL_LATEST="True"
;;
[Nn] | [Nn][Oo])
DOCKER_VERSION_INSTALL_LATEST="False"
SOURCE="download.docker.com"
;;
*)
DOCKER_VERSION_INSTALL_LATEST="True"
echo -e "\n$WARN 输入错误,默认安装最新版本!"
;;
esac
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~10 ]${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~11 ]${PLAIN}")
read -p "${CHOICE_C}" INPUT
case $INPUT in
1)
REGISTRY_SOURCE="registry.cn-beijing.aliyuncs.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
2)
REGISTRY_SOURCE="registry.cn-hangzhou.aliyuncs.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
3)
REGISTRY_SOURCE="registry.cn-chengdu.aliyuncs.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
4)
REGISTRY_SOURCE="registry.cn-guangzhou.aliyuncs.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
5)
REGISTRY_SOURCE="registry.cn-hongkong.aliyuncs.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
6)
REGISTRY_SOURCE="mirror.ccs.tencentyun.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
7)
REGISTRY_SOURCE="dockerhub.azk8s.com"
REGISTRY_SOURCE_OFFICIAL="False"
;;
8)
REGISTRY_SOURCE="f1361db2.m.daocloud.io"
REGISTRY_SOURCE_OFFICIAL="False"
;;
9)
REGISTRY_SOURCE="docker.mirrors.ustc.edu.cn"
REGISTRY_SOURCE_OFFICIAL="False"
;;
10)
REGISTRY_SOURCE="gcr.io"
REGISTRY_SOURCE_OFFICIAL="False"
;;
11)
REGISTRY_SOURCE="registry.docker-cn.com"
REGISTRY_SOURCE_OFFICIAL="True"
;;
*)
REGISTRY_SOURCE="registry.cn-hangzhou.aliyuncs.com"
REGISTRY_SOURCE_OFFICIAL="False"
echo -e "\n$WARN 输入错误,默认使用 ${BLUE}阿里云(杭州)${PLAIN}"
sleep 1s
;;
esac
echo -e ''
CloseFirewall
}
## 组合函数
function Combin_Function() {
PermissionJudgment
EnvJudgment
ChooseMirrors
InstallationEnvironment
ConfigureDockerCEMirror
DockerEngine
ShowVersion
AuthorSignature
}
Combin_Function