289 lines
7.4 KiB
Bash
Executable File
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 "==========================================" |