#!/bin/bash # Docker Registry容器名称 CONTAINER_NAME="docker-registry" # Registry版本 REGISTRY_VERSION="2" # 映射端口 PORT="5000" # 数据存储路径 DATA_PATH="/docker-data/registry/data" # 日志路径 LOG_PATH="/docker-data/registry/logs" # 认证配置路径 AUTH_PATH="/docker/registry/auth" # admin Docker@123 # htpasswd -Bbc "/docker/registry/auth/htpasswd" "admin" "Docker@123" # 创建目录并设置权限函数 create_dirs() { # 创建数据目录并设置权限 if [ ! -d "$DATA_PATH" ]; then mkdir -p "$DATA_PATH" echo "创建数据目录: $DATA_PATH" chmod -R 777 "$DATA_PATH" echo "设置数据目录权限: $DATA_PATH" fi # 创建日志目录并设置权限 if [ ! -d "$LOG_PATH" ]; then mkdir -p "$LOG_PATH" echo "创建日志目录: $LOG_PATH" chmod -R 777 "$LOG_PATH" echo "设置日志目录权限: $LOG_PATH" fi # 创建日志目录并设置权限 if [ ! -d "$AUTH_PATH" ]; then mkdir -p "$AUTH_PATH" echo "创建日志目录: $AUTH_PATH" chmod -R 777 "$AUTH_PATH" echo "设置日志目录权限: $AUTH_PATH" fi } # 部署Registry deploy() { if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then echo "Registry容器 $CONTAINER_NAME 已存在并运行中" return 1 fi if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "发现已停止的Registry容器,正在启动..." docker start $CONTAINER_NAME return 0 fi echo "开始部署Registry容器..." create_dirs docker run -d --restart always \ -p $PORT:5000 \ -v $DATA_PATH:/var/lib/registry \ -v $LOG_PATH:/var/log/registry \ -v $AUTH_PATH:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ --name $CONTAINER_NAME registry:$REGISTRY_VERSION if [ $? -eq 0 ]; then echo "Registry容器部署成功!" echo "容器名称: $CONTAINER_NAME" echo "访问地址: http://localhost:$PORT" else echo "Registry容器部署失败!" fi } # 查看日志 logs() { if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "Registry容器 $CONTAINER_NAME 不存在" return 1 fi echo "查看Registry容器日志 (按Ctrl+C退出)..." docker logs -f --tail 200 $CONTAINER_NAME } # 重启容器 restart() { if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "Registry容器 $CONTAINER_NAME 不存在" return 1 fi echo "正在重启Registry容器..." docker restart $CONTAINER_NAME if [ $? -eq 0 ]; then echo "Registry容器重启成功!" else echo "Registry容器重启失败!" fi } # 删除容器 remove() { if [ ! "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "Registry容器 $CONTAINER_NAME 不存在" return 1 fi echo "警告:此操作将删除Registry容器,但数据目录会保留" read -p "确定要删除吗?(y/n) " confirm if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then echo "取消删除操作" return 0 fi echo "正在停止并删除Registry容器..." docker stop $CONTAINER_NAME docker rm $CONTAINER_NAME if [ $? -eq 0 ]; then echo "Registry容器删除成功!" echo "数据保留在: $DATA_PATH" echo "日志保留在: $LOG_PATH" else echo "Registry容器删除失败!" fi } # 显示帮助 show_help() { echo "Docker Registry容器管理脚本" echo "用法: $0 [命令]" echo "命令列表:" echo " deploy - 部署并启动Registry容器" echo " logs - 查看Registry容器日志" echo " restart - 重启Registry容器" echo " remove - 删除Registry容器(保留数据和日志)" echo " help - 显示帮助信息" } # 主逻辑 case "$1" in deploy) deploy ;; logs) logs ;; restart) restart ;; remove) remove ;; help) show_help ;; *) echo "未知命令: $1" show_help exit 1 ;; esac