Create Docker 加速

This commit is contained in:
2025-10-29 21:56:12 +08:00
committed by GitHub
parent 57a0576e57
commit 0a3b917640

203
Docker 加速 Normal file
View File

@@ -0,0 +1,203 @@
#!/bin/bash
# Docker 加速器域名
ACCELERATOR_DOMAIN="github.vps7k7k.xyz"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}=== Docker 加速源一键更换脚本 ===${NC}"
echo -e "${YELLOW}加速器域名: ${ACCELERATOR_DOMAIN}${NC}"
echo
# 函数显示当前Docker配置
show_current_config() {
echo -e "${GREEN}当前Docker配置:${NC}"
if [ -f /etc/docker/daemon.json ]; then
echo -e "${YELLOW}/etc/docker/daemon.json 内容:${NC}"
cat /etc/docker/daemon.json 2>/dev/null | python -m json.tool 2>/dev/null || cat /etc/docker/daemon.json
else
echo -e "${RED}/etc/docker/daemon.json 文件不存在${NC}"
fi
echo
if command -v docker &> /dev/null; then
echo -e "${YELLOW}Docker info 中的Registry mirrors:${NC}"
docker info 2>/dev/null | grep -A 10 "Registry Mirrors" || echo "无法获取或未设置镜像加速"
else
echo -e "${RED}Docker 未安装或未运行${NC}"
fi
echo
}
# 函数:备份原有配置
backup_config() {
local backup_file="/etc/docker/daemon.json.backup.$(date +%Y%m%d_%H%M%S)"
if [ -f /etc/docker/daemon.json ]; then
cp /etc/docker/daemon.json "$backup_file"
echo -e "${GREEN}已备份原配置到: $backup_file${NC}"
fi
}
# 函数:设置加速源
setup_accelerator() {
local temp_file=$(mktemp)
# 创建新的daemon.json配置
cat > "$temp_file" << EOF
{
"registry-mirrors": [
"https://${ACCELERATOR_DOMAIN}"
],
"dns": ["8.8.8.8", "114.114.114.114"]
}
EOF
# 如果已有daemon.json合并配置
if [ -f /etc/docker/daemon.json ]; then
echo -e "${YELLOW}检测到已有配置,进行合并...${NC}"
python3 - <<EOF 2>/dev/null || jq -s '.[0] * .[1]' /etc/docker/daemon.json "$temp_file" 2>/dev/null
import json
import sys
with open('/etc/docker/daemon.json', 'r') as f:
old_config = json.load(f)
with open('$temp_file', 'r') as f:
new_config = json.load(f)
# 合并配置优先使用新配置的registry-mirrors
merged_config = {**old_config, **new_config}
merged_config['registry-mirrors'] = new_config['registry-mirrors']
print(json.dumps(merged_config, indent=2))
EOF
if [ $? -eq 0 ]; then
python3 - <<EOF > "$temp_file"
import json
import sys
with open('/etc/docker/daemon.json', 'r') as f:
old_config = json.load(f)
with open('$temp_file', 'r') as f:
new_config = json.load(f)
# 合并配置优先使用新配置的registry-mirrors
merged_config = {**old_config, **new_config}
merged_config['registry-mirrors'] = new_config['registry-mirrors']
print(json.dumps(merged_config, indent=2))
EOF
fi
fi
# 移动新配置到目标位置
sudo mv "$temp_file" /etc/docker/daemon.json
sudo chmod 600 /etc/docker/daemon.json
}
# 函数重启Docker服务
restart_docker() {
echo -e "${YELLOW}重启Docker服务...${NC}"
if command -v systemctl &> /dev/null; then
sudo systemctl daemon-reload
sudo systemctl restart docker
elif command -v service &> /dev/null; then
sudo service docker restart
else
echo -e "${RED}无法确定如何重启Docker服务${NC}"
return 1
fi
# 等待Docker启动
sleep 3
if sudo docker ps &> /dev/null; then
echo -e "${GREEN}Docker 服务重启成功${NC}"
return 0
else
echo -e "${RED}Docker 服务重启失败${NC}"
return 1
fi
}
# 函数:验证加速器
verify_accelerator() {
echo -e "${YELLOW}验证加速器配置...${NC}"
if docker info 2>/dev/null | grep -q "${ACCELERATOR_DOMAIN}"; then
echo -e "${GREEN}✓ 加速器配置成功${NC}"
echo -e "${BLUE}加速器地址: https://${ACCELERATOR_DOMAIN}${NC}"
else
echo -e "${RED}✗ 加速器配置可能未生效${NC}"
fi
}
# 函数:显示使用示例
show_usage_examples() {
echo -e "${GREEN}使用示例:${NC}"
echo -e " ${YELLOW}Docker 官方镜像:${NC}"
echo -e " docker pull ${ACCELERATOR_DOMAIN}/nginx"
echo -e " ${YELLOW}Docker Hub 用户镜像:${NC}"
echo -e " docker pull ${ACCELERATOR_DOMAIN}/user/image"
echo -e " ${YELLOW}GHCR 镜像:${NC}"
echo -e " docker pull ${ACCELERATOR_DOMAIN}/ghcr.io/user/image"
echo -e " ${YELLOW}Quay.io 镜像:${NC}"
echo -e " docker pull ${ACCELERATOR_DOMAIN}/quay.io/org/image"
echo -e " ${YELLOW}Kubernetes 镜像:${NC}"
echo -e " docker pull ${ACCELERATOR_DOMAIN}/registry.k8s.io/pause:3.8"
echo
echo -e "${BLUE}注意: 使用加速器时,需要在镜像前加上加速器域名${NC}"
}
# 主函数
main() {
# 显示当前配置
show_current_config
# 确认操作
read -p "是否继续设置加速源? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}已取消操作${NC}"
exit 0
fi
echo
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
echo -e "${RED}错误: Docker 未安装${NC}"
exit 1
fi
# 检查是否以root权限运行
if [[ $EUID -eq 0 ]]; then
echo -e "${RED}警告: 不建议以root用户运行此脚本${NC}"
read -p "是否继续? (y/N): " root_confirm
if [[ ! "$root_confirm" =~ ^[Yy]$ ]]; then
exit 0
fi
fi
# 执行配置流程
backup_config
setup_accelerator
if restart_docker; then
verify_accelerator
echo
show_usage_examples
else
echo -e "${RED}配置失败请检查Docker服务状态${NC}"
fi
}
# 运行主函数
main