File size: 4,578 Bytes
af24482 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
#!/bin/bash
# Build script for BackgroundFX Pro Docker images
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Configuration
PROJECT_NAME="backgroundfx-pro"
REGISTRY="" # Set to your registry URL if pushing to registry
VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo "latest")
# Parse arguments
BUILD_TYPE="gpu"
PUSH=false
NO_CACHE=false
while [[ $# -gt 0 ]]; do
case $1 in
--cpu)
BUILD_TYPE="cpu"
shift
;;
--all)
BUILD_TYPE="all"
shift
;;
--push)
PUSH=true
shift
;;
--no-cache)
NO_CACHE=true
shift
;;
--registry)
REGISTRY="$2/"
shift 2
;;
--version)
VERSION="$2"
shift 2
;;
*)
echo -e "${RED}Unknown option: $1${NC}"
echo "Usage: $0 [--cpu|--all] [--push] [--no-cache] [--registry REGISTRY] [--version VERSION]"
exit 1
;;
esac
done
# Build function
build_image() {
local dockerfile=$1
local tag=$2
local context=${3:-".."}
echo -e "${GREEN}Building ${tag}...${NC}"
CACHE_FLAG=""
if [ "$NO_CACHE" = true ]; then
CACHE_FLAG="--no-cache"
fi
docker build \
$CACHE_FLAG \
-f "$dockerfile" \
-t "${PROJECT_NAME}:${tag}" \
-t "${PROJECT_NAME}:${tag}-${VERSION}" \
-t "${REGISTRY}${PROJECT_NAME}:${tag}" \
-t "${REGISTRY}${PROJECT_NAME}:${tag}-${VERSION}" \
"$context"
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ Successfully built ${tag}${NC}"
else
echo -e "${RED}✗ Failed to build ${tag}${NC}"
exit 1
fi
}
# Check Docker daemon
if ! docker info > /dev/null 2>&1; then
echo -e "${RED}Docker daemon is not running${NC}"
exit 1
fi
# Check for NVIDIA Docker runtime (for GPU builds)
if [ "$BUILD_TYPE" != "cpu" ]; then
if ! docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu20.04 nvidia-smi > /dev/null 2>&1; then
echo -e "${YELLOW}Warning: NVIDIA Docker runtime not available. GPU features will not work.${NC}"
echo "Install nvidia-docker2 for GPU support."
fi
fi
# Build images based on type
echo -e "${GREEN}Starting build process...${NC}"
echo "Version: ${VERSION}"
echo "Build type: ${BUILD_TYPE}"
case $BUILD_TYPE in
gpu)
build_image "docker/Dockerfile" "gpu"
build_image "docker/Dockerfile.prod" "gpu-prod"
;;
cpu)
build_image "docker/Dockerfile.cpu" "cpu"
;;
all)
build_image "docker/Dockerfile" "gpu"
build_image "docker/Dockerfile.prod" "gpu-prod"
build_image "docker/Dockerfile.cpu" "cpu"
build_image "docker/Dockerfile.models" "models"
;;
esac
# Push to registry if requested
if [ "$PUSH" = true ]; then
if [ -z "$REGISTRY" ]; then
echo -e "${YELLOW}Warning: No registry specified, skipping push${NC}"
else
echo -e "${GREEN}Pushing images to ${REGISTRY}...${NC}"
case $BUILD_TYPE in
gpu)
docker push "${REGISTRY}${PROJECT_NAME}:gpu"
docker push "${REGISTRY}${PROJECT_NAME}:gpu-${VERSION}"
docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod"
docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod-${VERSION}"
;;
cpu)
docker push "${REGISTRY}${PROJECT_NAME}:cpu"
docker push "${REGISTRY}${PROJECT_NAME}:cpu-${VERSION}"
;;
all)
docker push "${REGISTRY}${PROJECT_NAME}:gpu"
docker push "${REGISTRY}${PROJECT_NAME}:gpu-${VERSION}"
docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod"
docker push "${REGISTRY}${PROJECT_NAME}:gpu-prod-${VERSION}"
docker push "${REGISTRY}${PROJECT_NAME}:cpu"
docker push "${REGISTRY}${PROJECT_NAME}:cpu-${VERSION}"
docker push "${REGISTRY}${PROJECT_NAME}:models"
docker push "${REGISTRY}${PROJECT_NAME}:models-${VERSION}"
;;
esac
echo -e "${GREEN}✓ Images pushed successfully${NC}"
fi
fi
# Show built images
echo -e "\n${GREEN}Built images:${NC}"
docker images | grep "${PROJECT_NAME}" | head -10
echo -e "\n${GREEN}Build complete!${NC}"
echo "Run with: docker-compose up -d" |