-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.layer2
More file actions
224 lines (183 loc) · 8.32 KB
/
Dockerfile.layer2
File metadata and controls
224 lines (183 loc) · 8.32 KB
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# Layer 2: Java Bench Image
# Extends Layer 1 (devbench-base) with Java specific tools
# Includes: OpenJDK 21, Maven, Gradle, Spring CLI, Java tools
FROM devbench-base:latest
# Container version labels
LABEL layer="2"
LABEL layer.name="java-bench"
LABEL layer.version="2.2.0"
LABEL layer.description="Java development tools and JDK (user-agnostic)"
LABEL bench.type="java"
# Everything runs as root
USER root
# ========================================
# JAVA JDK
# ========================================
# Install OpenJDK 21 (LTS) and zip (required by SDKMAN)
RUN apt-get update && apt-get install -y \
openjdk-21-jdk \
openjdk-21-jre \
zip \
&& rm -rf /var/lib/apt/lists/*
# Set JAVA_HOME
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
ENV PATH="$JAVA_HOME/bin:$PATH"
# ========================================
# BUILD TOOLS
# ========================================
# Install Maven
RUN apt-get update && apt-get install -y \
maven \
&& rm -rf /var/lib/apt/lists/*
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-8.5-bin.zip -P /tmp \
&& unzip -d /opt/gradle /tmp/gradle-8.5-bin.zip \
&& rm /tmp/gradle-8.5-bin.zip \
&& ln -s /opt/gradle/gradle-8.5/bin/gradle /usr/local/bin/gradle
ENV GRADLE_HOME=/opt/gradle/gradle-8.5
ENV PATH="$GRADLE_HOME/bin:$PATH"
# ========================================
# JAVA DEVELOPMENT TOOLS
# ========================================
# Install SDKMan system-wide
RUN curl -s "https://get.sdkman.io" | bash \
&& bash -c "source $HOME/.sdkman/bin/sdkman-init.sh" \
&& mv /root/.sdkman /opt/sdkman \
&& chmod -R a+rx /opt/sdkman
ENV SDKMAN_DIR=/opt/sdkman
# Install Spring Boot CLI via SDKMAN
RUN bash -c "source /opt/sdkman/bin/sdkman-init.sh && sdk install springboot" || true
# ========================================
# CONTAINER TOOLING
# ========================================
# Install Docker CLI (client only, daemon runs on host via socket mount)
RUN apt-get update && apt-get install -y \
ca-certificates gnupg lsb-release \
&& install -m 0755 -d /etc/apt/keyrings \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
&& chmod a+r /etc/apt/keyrings/docker.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list \
&& apt-get update && apt-get install -y docker-ce-cli docker-compose-plugin \
&& rm -rf /var/lib/apt/lists/*
# ========================================
# DATABASE CLIENTS
# ========================================
RUN apt-get update && apt-get install -y \
postgresql-client \
default-mysql-client \
sqlite3 \
redis-tools \
&& rm -rf /var/lib/apt/lists/*
# ========================================
# CODE QUALITY / STATIC ANALYSIS TOOLS
# ========================================
# Checkstyle
RUN mkdir -p /opt/checkstyle \
&& curl -fsSL https://github.com/checkstyle/checkstyle/releases/download/checkstyle-10.21.4/checkstyle-10.21.4-all.jar \
-o /opt/checkstyle/checkstyle.jar
# SpotBugs
RUN curl -fsSL https://github.com/spotbugs/spotbugs/releases/download/4.8.6/spotbugs-4.8.6.tgz \
-o /tmp/spotbugs.tgz \
&& tar -xzf /tmp/spotbugs.tgz -C /opt \
&& chmod +x /opt/spotbugs-4.8.6/bin/spotbugs \
&& ln -s /opt/spotbugs-4.8.6/bin/spotbugs /usr/local/bin/spotbugs \
&& rm /tmp/spotbugs.tgz
# PMD
RUN curl -fsSL https://github.com/pmd/pmd/releases/download/pmd_releases%2F7.9.0/pmd-dist-7.9.0-bin.zip \
-o /tmp/pmd.zip \
&& unzip -q /tmp/pmd.zip -d /opt \
&& ln -s /opt/pmd-bin-7.9.0/bin/pmd /usr/local/bin/pmd \
&& rm /tmp/pmd.zip
# SonarQube Scanner CLI
RUN curl -fsSL https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-6.2.1.4610-linux-x64.zip \
-o /tmp/sonar-scanner.zip \
&& unzip -q /tmp/sonar-scanner.zip -d /opt \
&& ln -s /opt/sonar-scanner-6.2.1.4610-linux-x64/bin/sonar-scanner /usr/local/bin/sonar-scanner \
&& rm /tmp/sonar-scanner.zip
# ========================================
# JVM COMPANION LANGUAGES
# ========================================
# Install Kotlin, Groovy, Scala via SDKMAN
RUN bash -c "source /opt/sdkman/bin/sdkman-init.sh \
&& sdk install kotlin \
&& sdk install groovy \
&& sdk install scala" || true
# ========================================
# SYSTEM UTILITIES
# ========================================
RUN apt-get update && apt-get install -y \
htop \
tree \
less \
ant \
&& rm -rf /var/lib/apt/lists/*
# ========================================
# FRAMEWORK CLIs
# ========================================
# Install Quarkus and Micronaut CLIs via SDKMAN
# (Spring Boot CLI already installed above)
RUN bash -c "source /opt/sdkman/bin/sdkman-init.sh \
&& sdk install quarkus \
&& sdk install micronaut" || true
# ========================================
# PERFORMANCE TESTING
# ========================================
# Apache JMeter 5.6.3
RUN curl -fsSL https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.tgz \
-o /tmp/jmeter.tgz \
&& tar -xzf /tmp/jmeter.tgz -C /opt \
&& ln -s /opt/apache-jmeter-5.6.3/bin/jmeter /usr/local/bin/jmeter \
&& rm /tmp/jmeter.tgz
ENV JMETER_HOME=/opt/apache-jmeter-5.6.3
# Gatling 3.10.5 (last traditional standalone bundle)
RUN curl -fsSL https://repo1.maven.org/maven2/io/gatling/highcharts/gatling-charts-highcharts-bundle/3.10.5/gatling-charts-highcharts-bundle-3.10.5-bundle.zip \
-o /tmp/gatling.zip \
&& unzip -q /tmp/gatling.zip -d /opt \
&& chmod +x /opt/gatling-charts-highcharts-bundle-3.10.5/bin/*.sh \
&& ln -s /opt/gatling-charts-highcharts-bundle-3.10.5/bin/gatling.sh /usr/local/bin/gatling \
&& ln -s /opt/gatling-charts-highcharts-bundle-3.10.5/bin/recorder.sh /usr/local/bin/gatling-recorder \
&& rm /tmp/gatling.zip
ENV GATLING_HOME=/opt/gatling-charts-highcharts-bundle-3.10.5
# ========================================
# WORKSPACE SETUP
# ========================================
# Create common Java project directories
RUN mkdir -p /workspace/projects \
&& mkdir -p /workspace/m2repo \
&& mkdir -p /workspace/.gradle
# Configure Maven to use workspace m2repo (in /etc/skel)
RUN mkdir -p /etc/skel/.m2 \
&& echo '<?xml version="1.0" encoding="UTF-8"?>' > /etc/skel/.m2/settings.xml \
&& echo '<settings>' >> /etc/skel/.m2/settings.xml \
&& echo ' <localRepository>/workspace/m2repo</localRepository>' >> /etc/skel/.m2/settings.xml \
&& echo '</settings>' >> /etc/skel/.m2/settings.xml
# ========================================
# SHELL CONFIGURATION (into /etc/skel)
# ========================================
# Add Java development aliases and environment to /etc/skel/.zshrc
RUN echo '' >> /etc/skel/.zshrc && \
echo '# Java Development Environment' >> /etc/skel/.zshrc && \
echo 'export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64' >> /etc/skel/.zshrc && \
echo 'export GRADLE_HOME=/opt/gradle/gradle-8.5' >> /etc/skel/.zshrc && \
echo 'export PATH="$JAVA_HOME/bin:$GRADLE_HOME/bin:$PATH"' >> /etc/skel/.zshrc && \
echo '' >> /etc/skel/.zshrc && \
echo '# Java Build aliases' >> /etc/skel/.zshrc && \
echo 'alias mvn-clean="mvn clean"' >> /etc/skel/.zshrc && \
echo 'alias mvn-package="mvn clean package"' >> /etc/skel/.zshrc && \
echo 'alias mvn-install="mvn clean install"' >> /etc/skel/.zshrc && \
echo 'alias mvn-test="mvn test"' >> /etc/skel/.zshrc && \
echo 'alias gradle-build="gradle build"' >> /etc/skel/.zshrc && \
echo 'alias gradle-clean="gradle clean"' >> /etc/skel/.zshrc && \
echo 'alias gradle-test="gradle test"' >> /etc/skel/.zshrc && \
echo 'alias spring-run="./mvnw spring-boot:run"' >> /etc/skel/.zshrc && \
echo '' >> /etc/skel/.zshrc && \
echo '# Performance Testing aliases' >> /etc/skel/.zshrc && \
echo 'alias jmeter-cli="jmeter -n"' >> /etc/skel/.zshrc && \
echo 'alias jmeter-report="jmeter -g"' >> /etc/skel/.zshrc
# Add SDKMan initialization
RUN echo '' >> /etc/skel/.zshrc && \
echo '# SDKMan initialization' >> /etc/skel/.zshrc && \
echo 'export SDKMAN_DIR="/opt/sdkman"' >> /etc/skel/.zshrc && \
echo '[[ -s "/opt/sdkman/bin/sdkman-init.sh" ]] && source "/opt/sdkman/bin/sdkman-init.sh"' >> /etc/skel/.zshrc
# Default command
CMD ["sleep", "infinity"]