diff --git a/docs/docker.sh b/docs/docker.sh new file mode 100644 index 0000000..310a092 --- /dev/null +++ b/docs/docker.sh @@ -0,0 +1,644 @@ +#!/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 diff --git a/docs/script.sh b/docs/main.sh similarity index 100% rename from docs/script.sh rename to docs/main.sh diff --git a/docs/other/index.md b/docs/other/index.md index 5b1efe5..b217135 100644 --- a/docs/other/index.md +++ b/docs/other/index.md @@ -7,7 +7,7 @@ hide: ## :fontawesome-brands-docker: Docker 一键安装脚本 ``` bash -bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) +bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ``` !!! node "定义" @@ -15,3 +15,9 @@ bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInsta `Docker Hub` 容器镜像仓库,默认为官方提供的公共库,用于控制下载镜像的来源存储仓库,又称镜像加速器。 脚本集成安装 `Docker Engine`,可手动选择安装版本、下载源、镜像加速器,支持海内外服务器环境和 `arm` 架构处理器环境使用 + +??? quote "原始方法" + + ``` bash + bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) + ``` diff --git a/docs/use/index.md b/docs/use/index.md index 9132b8e..92addf1 100644 --- a/docs/use/index.md +++ b/docs/use/index.md @@ -1,16 +1,15 @@ ## 执行命令 - ### 国内使用(默认) ``` bash -bash <(curl -sSL https://linuxmirrors.cn/script.sh) +bash <(curl -sSL https://linuxmirrors.cn/main.sh) ``` ### 海外使用 ``` bash -bash <(curl -sSL https://linuxmirrors.cn/script.sh) --abroad +bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ``` > 通过 `--abroad` 命令选项来使用海外软件源