Files
dock/Docker 加速
2025-10-31 13:16:34 +08:00

244 lines
6.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
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
# Docker私有仓库配置脚本
# 作者: 你的名称
# 描述: 配置Docker使用私有加速镜像仓库
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 仓库地址
REGISTRY_URL="github.vps7k7k.xyz"
# 打印彩色信息
print_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 检查Docker是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker 未安装请先安装Docker"
exit 1
fi
print_info "Docker 已安装,版本: $(docker --version | cut -d' ' -f3 | cut -d',' -f1)"
}
# 交互式输入账号密码
get_credentials() {
print_step "请输入私有仓库的认证信息"
while true; do
read -p "请输入用户名: " username
if [ -n "$username" ]; then
break
else
print_error "用户名不能为空,请重新输入"
fi
done
while true; do
read -s -p "请输入密码: " password
echo
if [ -n "$password" ]; then
break
else
print_error "密码不能为空,请重新输入"
fi
done
# 确认密码
while true; do
read -s -p "请再次输入密码确认: " password_confirm
echo
if [ "$password" = "$password_confirm" ]; then
break
else
print_error "两次输入的密码不一致,请重新输入"
fi
done
}
# 测试登录
test_login() {
print_step "测试登录私有仓库..."
if echo "$password" | docker login $REGISTRY_URL -u "$username" --password-stdin; then
print_info "登录测试成功!"
return 0
else
print_error "登录测试失败,请检查账号密码和网络连接"
return 1
fi
}
# 配置Docker镜像源
configure_docker_mirror() {
print_step "配置Docker镜像源..."
# 创建Docker配置目录
sudo mkdir -p /etc/docker
# 备份原有配置
if [ -f /etc/docker/daemon.json ]; then
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d%H%M%S)
print_info "已备份原有配置"
fi
# 创建新的配置
cat << EOF | sudo tee /etc/docker/daemon.json > /dev/null
{
"registry-mirrors": ["https://${REGISTRY_URL}"],
"insecure-registries": [],
"debug": true,
"experimental": false
}
EOF
print_info "Docker镜像源配置完成"
}
# 重启Docker服务
restart_docker() {
print_step "重启Docker服务..."
if sudo systemctl restart docker; then
print_info "Docker服务重启成功"
else
print_error "Docker服务重启失败"
exit 1
fi
# 等待Docker服务完全启动
sleep 3
}
# 保存认证信息(可选)
save_credentials() {
print_step "是否保存认证信息?"
echo "如果保存,以后拉取镜像时不需要重复输入密码"
read -p "是否保存认证信息?(y/N): " save_choice
if [[ $save_choice =~ ^[Yy]$ ]]; then
# 使用Docker login保存认证信息
if echo "$password" | docker login $REGISTRY_URL -u "$username" --password-stdin; then
print_info "认证信息已保存到 ~/.docker/config.json"
else
print_warning "认证信息保存失败,但镜像源配置已完成"
fi
else
print_info "认证信息未保存,每次拉取私有镜像时需要重新登录"
fi
}
# 验证配置
verify_configuration() {
print_step "验证配置..."
# 检查Docker配置
if sudo systemctl is-active --quiet docker; then
print_info "Docker服务运行正常"
else
print_error "Docker服务未运行"
exit 1
fi
# 检查配置是否生效
if sudo docker info | grep -q "$REGISTRY_URL"; then
print_info "镜像源配置已生效"
else
print_warning "镜像源配置可能未生效,请手动检查"
fi
# 测试拉取镜像(可选)
print_step "是否测试拉取nginx镜像"
read -p "进行测试?(y/N): " test_choice
if [[ $test_choice =~ ^[Yy]$ ]]; then
print_info "开始拉取测试镜像..."
if sudo docker pull ${REGISTRY_URL}/nginx; then
print_info "镜像拉取测试成功!"
else
print_warning "镜像拉取测试失败,请检查网络连接和认证信息"
fi
fi
}
# 显示配置摘要
show_summary() {
echo
print_info "=== 配置完成摘要 ==="
echo -e "${GREEN}${NC} Docker私有仓库配置完成"
echo -e "${GREEN}${NC} 镜像源: ${REGISTRY_URL}"
echo -e "${GREEN}${NC} 用户名: ${username}"
echo -e "${GREEN}${NC} Docker服务已重启生效"
if [[ $save_choice =~ ^[Yy]$ ]]; then
echo -e "${GREEN}${NC} 认证信息已保存,后续使用无需重复登录"
else
echo -e "${YELLOW}${NC} 认证信息未保存,拉取私有镜像时需要重新登录"
fi
echo
print_info "使用示例:"
echo " docker pull ${REGISTRY_URL}/镜像名称"
echo " docker pull ${REGISTRY_URL}/nginx"
}
# 主函数
main() {
clear
echo "=========================================="
echo " Docker私有仓库配置脚本"
echo "=========================================="
echo
# 检查Docker
check_docker
# 获取认证信息
get_credentials
# 测试登录
if ! test_login; then
print_error "配置中止,请解决登录问题后重新运行脚本"
exit 1
fi
# 配置镜像源
configure_docker_mirror
# 重启Docker服务
restart_docker
# 保存认证信息
save_credentials
# 验证配置
verify_configuration
# 显示摘要
show_summary
}
# 运行主函数
main "$@"