Skip to content

Commit b208a58

Browse files
committed
Added Docker Support by BalioFVFX#3
1 parent 76b92a3 commit b208a58

4 files changed

Lines changed: 71 additions & 22 deletions

File tree

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
2-
distributionPath=wrapper/dists
32
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4-
networkTimeout=10000
5-
validateDistributionUrl=true
6-
zipStoreBase=GRADLE_USER_HOME
3+
distributionPath=wrapper/dists
74
zipStorePath=wrapper/dists
5+
zipStoreBase=GRADLE_USER_HOME

VideoServer/Dockerfile

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Stage 1: Build the application using Eclipse Temurin JDK 22
2+
FROM eclipse-temurin:22-jdk AS build
3+
4+
# Set working directory inside the build container
5+
WORKDIR /app
6+
7+
# Copy Gradle wrapper scripts and related files for build setup
8+
COPY gradlew /app/gradlew
9+
COPY gradlew.bat /app/gradlew.bat
10+
COPY gradle/wrapper/gradle-wrapper.jar /app/gradle/wrapper/gradle-wrapper.jar
11+
COPY gradle/wrapper/gradle-wrapper.properties /app/gradle/wrapper/gradle-wrapper.properties
12+
13+
# Copy Gradle build files (build.gradle, settings.gradle)
14+
COPY build.gradle settings.gradle /app/
15+
16+
# Copy application source code to container
17+
COPY src /app/src
18+
19+
# Ensure Gradle wrapper has execute permission
20+
RUN chmod +x gradlew
21+
22+
# Execute Gradle build to clean and create a shadow (fat) JAR
23+
RUN ./gradlew clean shadowJar
24+
25+
# Stage 2: Prepare runtime image
26+
FROM eclipse-temurin:22-jdk
27+
28+
# Set working directory inside the runtime container
29+
WORKDIR /app
30+
31+
# Copy the built shadow JAR from the build stage
32+
COPY --from=build /app/build/libs/VideoServer-1.0-SNAPSHOT.jar /app/VideoServer.jar
33+
34+
# Copy static asset required by the application
35+
COPY device_offline.jpg /app/device_offline.jpg
36+
37+
# Define container start command to run the JAR
38+
ENTRYPOINT ["java", "-jar", "/app/VideoServer.jar"]
39+
40+
# Expose ports used by the application services
41+
# 1234: WebSocket Server
42+
# 4444: MJPEG Streaming Server
43+
# 4321: Camera Server
44+
EXPOSE 1234
45+
EXPOSE 4444
46+
EXPOSE 4321
47+
48+
# Docker usage instructions:
49+
# Build image: sudo docker build -t videoserver:latest .
50+
# Run container detached with port mappings:
51+
# sudo docker run -d -p 1234:1234 -p 4444:4444 -p 4321:4321 videoserver

VideoServer/build.gradle

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
plugins {
2-
id 'org.jetbrains.kotlin.jvm' version '1.7.21'
2+
id 'org.jetbrains.kotlin.jvm' version '2.0.0'
33
id 'com.github.johnrengelman.shadow' version '8.1.1'
44
}
55

6-
group = 'org.example'
6+
group = 'com.videoserver'
77
version = '1.0-SNAPSHOT'
88

99
repositories {
@@ -16,31 +16,29 @@ dependencies {
1616
testImplementation 'org.jetbrains.kotlin:kotlin-test'
1717
}
1818

19-
test {
20-
useJUnitPlatform()
21-
}
22-
23-
compileKotlin {
24-
kotlinOptions.jvmTarget = '1.8'
19+
java {
20+
toolchain {
21+
languageVersion = JavaLanguageVersion.of(22)
22+
}
2523
}
2624

27-
compileTestKotlin {
28-
kotlinOptions.jvmTarget = '1.8'
25+
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
26+
kotlinOptions {
27+
jvmTarget = '22'
28+
}
2929
}
3030

31-
jar {
32-
manifest {
33-
attributes(
34-
'Main-Class': 'MainKt'
35-
)
36-
}
31+
test {
32+
useJUnitPlatform()
3733
}
3834

3935
shadowJar {
4036
archiveBaseName.set('VideoServer')
41-
archiveClassifier.set('')
4237
archiveVersion.set('1.0-SNAPSHOT')
38+
archiveClassifier.set('')
4339
manifest {
44-
attributes('Main-Class': 'MainKt')
40+
attributes 'Main-Class': 'com.videoserver.MainKt'
4541
}
4642
}
43+
44+
build.dependsOn(shadowJar)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
33
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4+
networkTimeout=10000
5+
validateDistributionUrl=true
46
zipStoreBase=GRADLE_USER_HOME
57
zipStorePath=wrapper/dists

0 commit comments

Comments
 (0)