#!/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 "$@"