Files
bakery-ia/scripts/setup-local-registry.sh

289 lines
7.4 KiB
Bash
Executable File

#!/bin/bash
# Bakery-IA Local Registry Setup and Base Image Management
# Standardized script for setting up local registry and managing base images
# Usage: ./scripts/setup-local-registry.sh [start|stop|prepull|push|clean]
set -e
# Configuration
LOCAL_REGISTRY="localhost:5000"
REGISTRY_NAME="bakery-local-registry"
REGISTRY_DATA_DIR="$(pwd)/kind-registry"
DOCKER_USERNAME="uals"
DOCKER_PASSWORD="dckr_pat_zzEY5Q58x1S0puraIoKEtbpue3A"
# Standardized base images (optimized list)
BASE_IMAGES=(
"python:3.11-slim"
"postgres:17-alpine"
"redis:7.4-alpine"
"busybox:1.36"
"busybox:latest"
"curlimages/curl:latest"
"bitnami/kubectl:latest"
"alpine:3.18"
"alpine:3.19"
"gcr.io/kaniko-project/executor:v1.23.0"
"alpine/git:2.43.0"
)
echo "=========================================="
echo "Bakery-IA Local Registry Manager"
echo "=========================================="
echo ""
# Function to authenticate with Docker Hub
authenticate_docker_hub() {
echo "Authenticating with Docker Hub..."
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
echo "✓ Authentication successful"
}
# Function to start local registry
start_registry() {
echo "Starting local registry at $LOCAL_REGISTRY..."
# Create data directory
mkdir -p "$REGISTRY_DATA_DIR"
# Check if registry is already running
if docker ps -a --format '{{.Names}}' | grep -q "^$REGISTRY_NAME$"; then
echo "Registry container already exists"
if docker ps --format '{{.Names}}' | grep -q "^$REGISTRY_NAME$"; then
echo "✓ Registry is already running"
return 0
else
echo "Starting existing registry container..."
docker start "$REGISTRY_NAME"
fi
else
# Start new registry container
docker run -d -p 5000:5000 --name "$REGISTRY_NAME" \
-v "$REGISTRY_DATA_DIR:/var/lib/registry" \
registry:2
fi
# Wait for registry to be ready
echo "Waiting for registry to be ready..."
for i in {1..30}; do
if curl -s http://$LOCAL_REGISTRY/v2/ > /dev/null 2>&1; then
echo "✓ Registry is ready"
return 0
fi
sleep 1
done
echo "❌ Registry failed to start"
exit 1
}
# Function to stop local registry
stop_registry() {
echo "Stopping local registry..."
docker stop "$REGISTRY_NAME" || true
echo "✓ Registry stopped"
}
# Function to clean registry
clean_registry() {
echo "Cleaning local registry..."
stop_registry
rm -rf "$REGISTRY_DATA_DIR"
echo "✓ Registry cleaned"
}
# Function to pre-pull base images
prepull_images() {
authenticate_docker_hub
echo "Pre-pulling base images..."
for image in "${BASE_IMAGES[@]}"; do
echo "Pulling: $image"
docker pull "$image"
echo " ✓ Successfully pulled $image"
done
echo "✓ All base images pre-pulled"
}
# Function to push images to local registry
push_images_to_registry() {
echo "Pushing base images to local registry..."
for image in "${BASE_IMAGES[@]}"; do
local_image="$LOCAL_REGISTRY/$(echo $image | sed 's|/|_|g' | sed 's|:|_|g')"
echo "Tagging and pushing: $image$local_image"
# Tag the image
docker tag "$image" "$local_image"
# Push to local registry
docker push "$local_image"
echo " ✓ Pushed $local_image"
done
echo "✓ All base images pushed to local registry"
# Show registry contents
echo "Registry contents:"
curl -s http://$LOCAL_REGISTRY/v2/_catalog | jq . || echo "Registry is running"
}
# Function to update Dockerfiles
update_dockerfiles() {
echo "Updating Dockerfiles to use local registry..."
# Update all Dockerfiles
find services -name "Dockerfile" -exec sed -i '' \
's|FROM python:3.11-slim|FROM localhost:5000/python_3.11-slim|g' {} +
# Also update any remaining python references
find services -name "Dockerfile" -exec sed -i '' \
's|ghcr.io/library/python:3.11-slim|localhost:5000/python_3.11-slim|g' {} +
echo "✓ Dockerfiles updated to use local registry"
}
# Function to revert Dockerfiles
revert_dockerfiles() {
echo "Reverting Dockerfiles to use original images..."
# Revert all Dockerfiles
find services -name "Dockerfile" -exec sed -i '' \
's|FROM localhost:5000/python_3.11-slim|FROM python:3.11-slim|g' {} +
echo "✓ Dockerfiles reverted to original images"
}
# Function to show registry status
show_status() {
echo "Local Registry Status:"
echo "---------------------"
if docker ps --format '{{.Names}}' | grep -q "^$REGISTRY_NAME$"; then
echo "Status: Running"
echo "Address: $LOCAL_REGISTRY"
echo "Data Directory: $REGISTRY_DATA_DIR"
echo ""
echo "Images in registry:"
curl -s http://$LOCAL_REGISTRY/v2/_catalog | jq -r '.repositories[]' || echo "Registry accessible"
else
echo "Status: Stopped"
echo "To start: ./scripts/setup-local-registry.sh start"
fi
}
# Function to show help
show_help() {
echo "Usage: $0 [command]"
echo ""
echo "Commands:"
echo " start Start local registry"
echo " stop Stop local registry"
echo " prepull Pre-pull base images from Docker Hub"
echo " push Push pre-pulled images to local registry"
echo " update Update Dockerfiles to use local registry"
echo " revert Revert Dockerfiles to original images"
echo " clean Clean registry (stop + remove data)"
echo " status Show registry status"
echo " all Run prepull + start + push + update"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " $0 start prepull push update"
echo " $0 all"
echo " $0 clean"
}
# Main script logic
if [ $# -eq 0 ]; then
show_help
exit 1
fi
COMMAND="$1"
shift
case "$COMMAND" in
start)
start_registry
;;
stop)
stop_registry
;;
prepull)
prepull_images
;;
push)
push_images_to_registry
;;
update)
update_dockerfiles
;;
revert)
revert_dockerfiles
;;
clean)
clean_registry
;;
status)
show_status
;;
all)
authenticate_docker_hub
start_registry
prepull_images
push_images_to_registry
update_dockerfiles
show_status
;;
help|--help|-h)
show_help
;;
*)
echo "Unknown command: $COMMAND"
show_help
exit 1
;;
esac
# Run additional commands if provided
for cmd in "$@"; do
case "$cmd" in
start)
start_registry
;;
stop)
stop_registry
;;
prepull)
prepull_images
;;
push)
push_images_to_registry
;;
update)
update_dockerfiles
;;
revert)
revert_dockerfiles
;;
clean)
clean_registry
;;
status)
show_status
;;
*)
echo "Unknown command: $cmd"
;;
esac
done
echo ""
echo "=========================================="
echo "Operation completed!"
echo "=========================================="