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