linux_install_docker
自动识别系统与地区,一键安装 / 升级 Docker 环境,国内自动配置镜像加速并设置开机自启。
一键脚本
bash <(curl -sL gitee.com/meimolihan/linux-command_sh/raw/master/linux_install_docker.sh)
效果预览
脚本源码
#!/bin/bash
set -uo pipefail
list_color_init() {
export gl_hui=$'\033[38;5;59m'
export gl_hong=$'\033[38;5;9m'
export gl_lv=$'\033[38;5;10m'
export gl_huang=$'\033[38;5;11m'
export gl_lan=$'\033[38;5;32m'
export gl_bai=$'\033[38;5;15m'
export gl_zi=$'\033[38;5;13m'
export gl_bufan=$'\033[38;5;14m'
export reset=$'\033[0m'
}
list_color_init
log_info() { echo -e "${gl_lan}[信息]${gl_bai} $*"; }
log_ok() { echo -e "${gl_lv}[成功]${gl_bai} $*"; }
log_warn() { echo -e "${gl_huang}[警告]${gl_bai} $*"; }
log_error() { echo -e "${gl_hong}[错误]${gl_bai} $*" >&2; }
sleep_fractional() {
local seconds=$1
if sleep "$seconds" 2>/dev/null; then return 0; fi
if command -v perl >/dev/null 2>&1; then perl -e "select(undef, undef, undef, $seconds)"; return 0; fi
if command -v python3 >/dev/null 2>&1; then python3 -c "import time; time.sleep($seconds)"; return 0; fi
if command -v python >/dev/null 2>&1; then python -c "import time; time.sleep($seconds)"; return 0; fi
local int_seconds=$(echo "$seconds" | awk '{print int($1+0.999)}')
sleep "$int_seconds"
}
exit_animation() {
echo -ne "${gl_lv}即将退出 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
sleep_fractional 0.5
echo -ne "${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
sleep_fractional 0.6
echo ""
clear
}
install_add_docker_cn() {
local country
country=$(curl -s ipinfo.io/country 2>/dev/null || echo "US")
if [ "$country" = "CN" ]; then
log_info "检测到中国地区,配置国内镜像加速"
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.ixdev.cn",
"https://hub.rat.dev",
"https://dockerproxy.net",
"https://docker-registry.nmqu.com",
"https://docker.amingg.com",
"https://docker.hlmirror.com",
"https://hub1.nat.tf",
"https://hub2.nat.tf",
"https://hub3.nat.tf",
"https://docker.m.daocloud.io",
"https://docker.kejilion.pro",
"https://docker.367231.xyz",
"https://hub.1panel.dev",
"https://dockerproxy.cool",
"https://docker.apiba.cn",
"https://proxy.vvvv.ee"
]
}
EOF
else
log_info "非中国地区,不配置国内镜像"
rm -f /etc/docker/daemon.json 2>/dev/null
fi
echo -e ""
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
if command -v systemctl &>/dev/null; then
systemctl enable docker >/dev/null 2>&1
systemctl start docker >/dev/null 2>&1
systemctl restart docker >/dev/null 2>&1
log_ok "Docker 已设置开机自启并重启完成"
else
log_warn "无 systemctl,跳过服务自启设置"
fi
}
install_add_docker_guanfang() {
local country
country=$(curl -s ipinfo.io/country 2>/dev/null || echo "US")
if [ "$country" = "CN" ]; then
log_info "中国地区使用阿里云镜像安装 ${gl_huang}Docker${gl_bai}"
cd ~ || return 1
curl -sS -O raw.githubusercontent.com/kejilion/docker/main/install
chmod +x install
sh install --mirror Aliyun
rm -f install
else
log_info "海外地区使用官方脚本安装"
curl -fsSL https://get.docker.com | sh
fi
install_add_docker_cn
}
install_add_docker() {
clear
echo -e "${gl_zi}>>> 安装 ${gl_huang}docker${gl_zi} 环境${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
read -r -e -p "${gl_bai}确定要安装 ${gl_huang}docker${gl_bai} 环境吗? (${gl_lv}y${gl_bai}/${gl_hong}N${gl_bai}): " confirm
if [[ ! $confirm =~ ^[Yy]$ ]]; then
echo -e "${gl_huang}已取消安装操作${gl_bai}"
exit_animation
return
fi
log_info "开始检测系统并安装 ${gl_huang}Docker${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
if [ -f /etc/os-release ] && grep -q "Fedora" /etc/os-release; then
log_info "检测到 ${gl_huang}Fedora${gl_bai} 系统"
install_add_docker_guanfang
elif command -v dnf &>/dev/null; then
log_info "检测到 ${gl_huang}RHEL 系系统${gl_bai} (dnf)"
dnf update -y
dnf install -y yum-utils device-mapper-persistent-data lvm2
rm -f /etc/yum.repos.d/docker*.repo 2>/dev/null
country=$(curl -s ipinfo.io/country 2>/dev/null || echo "US")
if [ "$country" = "CN" ]; then
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo | tee /etc/yum.repos.d/docker-ce.repo >/dev/null
else
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo >/dev/null
fi
dnf install -y docker-ce docker-ce-cli containerd.io
install_add_docker_cn
elif [ -f /etc/os-release ] && grep -q "Kali" /etc/os-release; then
log_info "检测到 ${gl_huang}Kali Linux${gl_bai} 系统"
apt update
apt upgrade -y
apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
country=$(curl -s ipinfo.io/country 2>/dev/null || echo "US")
arch=$(uname -m)
if [ "$country" = "CN" ]; then
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg >/dev/null
if [ "$arch" = "x86_64" ]; then
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list >/dev/null
elif [ "$arch" = "aarch64" ]; then
echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list >/dev/null
fi
else
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg >/dev/null
if [ "$arch" = "x86_64" ]; then
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list >/dev/null
elif [ "$arch" = "aarch64" ]; then
echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | tee /etc/apt/sources.list.d/docker.list >/dev/null
fi
fi
apt update
apt install -y docker-ce docker-ce-cli containerd.io
install_add_docker_cn
elif command -v apt &>/dev/null || command -v yum &>/dev/null; then
log_info "检测到 ${gl_huang}Debian/Ubuntu/CentOS${gl_bai} 通用系统"
install_add_docker_guanfang
else
log_warn "未知系统,尝试直接安装 Docker"
install -y docker docker-compose 2>/dev/null || apt install -y docker docker-compose || yum install -y docker docker-compose
install_add_docker_cn
fi
local ver
ver=$(docker --version | awk '{print $3}' | sed 's/,//g')
log_ok "Docker 版本:${gl_lv}$ver${gl_bai}"
log_ok "Docker 环境安装完成!"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
}
install_add_docker
创建本地脚本
new_script="new_test.sh"
cat > "$new_script" << 'EOF'
#!/bin/bash
# 粘贴脚本源码
EOF
# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"