MogensR commited on
Commit
af24482
·
1 Parent(s): ad0434e

Create docker/build.sh

Browse files
Files changed (1) hide show
  1. 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"