Skip to content

Commit 5423492

Browse files
authored
Add docker build in tree (#101)
* Adds docker build and configure-from-env script to configure OIE server based on environment variables at container startup time. * Add github to dockerignore, fix ubuntu docker target Issue: #40 Signed-off-by: Mitch Gaffigan <mitch.gaffigan@comcast.net>
1 parent f844f6d commit 5423492

4 files changed

Lines changed: 412 additions & 0 deletions

File tree

‎.dockerignore‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Include any files or directories that you don't want to be copied to your
2+
# container here (e.g., local build artifacts, temporary files, etc.).
3+
#
4+
# For more help, visit the .dockerignore file reference guide at
5+
# https://docs.docker.com/go/build-context-dockerignore/
6+
7+
**/.DS_Store
8+
**/.classpath
9+
**/.dockerignore
10+
**/.env
11+
**/.factorypath
12+
**/.git
13+
**/.gitignore
14+
**/.idea
15+
**/.project
16+
**/.sts4-cache
17+
**/.settings
18+
**/.toolstarget
19+
**/.vs
20+
**/.vscode
21+
**/.next
22+
**/.cache
23+
**/*.dbmdl
24+
**/*.jfm
25+
**/charts
26+
**/docker-compose*
27+
**/compose.y*ml
28+
**/Dockerfile*
29+
**/secrets.dev.yaml
30+
**/values.dev.yaml
31+
**/vendor
32+
LICENSE
33+
README.md
34+
**/*.class
35+
**/*.iml
36+
**/*.ipr
37+
**/*.iws
38+
**/*.log
39+
**/.apt_generated
40+
**/.gradle
41+
**/.gradletasknamecache
42+
**/.nb-gradle
43+
**/.springBeans
44+
**/build
45+
**/dist
46+
**/gradle-app.setting
47+
**/nbbuild
48+
**/nbdist
49+
**/nbproject/private
50+
**/target
51+
*.ctxt
52+
.mtj.tmp
53+
.mvn/timing.properties
54+
buildNumber.properties
55+
dependency-reduced-pom.xml
56+
hs_err_pid*
57+
pom.xml.next
58+
pom.xml.releaseBackup
59+
pom.xml.tag
60+
pom.xml.versionsBackup
61+
release.properties
62+
replay_pid*
63+
.github/

‎Dockerfile‎

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
# syntax=docker/dockerfile:1.19.0
2+
# SPDX-License-Identifier: MPL-2.0
3+
# SPDX-FileCopyrightText: 2025 Mitch Gaffigan
4+
5+
# Stages:
6+
# 1. Builder Stage: Compiles the application and resolves dependencies. Produces
7+
# JAR files that can be deployed.
8+
# 1a. Install dependencies
9+
# 1b. Build the application
10+
# 2. Runner Stage: Creates a lightweight image that runs the application using the JRE.
11+
12+
FROM ubuntu:noble-20251013 AS builder
13+
WORKDIR /app
14+
# sdkman requires bash
15+
SHELL ["/bin/bash", "-c"]
16+
ARG ANT_BUILD_ARGS="-DdisableSigning=true"
17+
18+
# Stage 1a: Install dependencies
19+
# Install necessary tools
20+
COPY .sdkmanrc .
21+
RUN apt-get update\
22+
&& apt-get install -y zip curl\
23+
&& curl -s "https://get.sdkman.io?ci=true" | bash \
24+
&& source "$HOME/.sdkman/bin/sdkman-init.sh" && sdk env install \
25+
&& rm -rf /var/lib/apt/lists/*
26+
27+
# Stage 1b: Build the application
28+
# Copy the entire source tree (excluding .dockerignore files), and build
29+
COPY . .
30+
WORKDIR /app/server
31+
RUN source "$HOME/.sdkman/bin/sdkman-init.sh" \
32+
&& ANT_OPTS="-Dfile.encoding=UTF8" ant -f mirth-build.xml ${ANT_BUILD_ARGS}
33+
34+
##########################################
35+
#
36+
# Ubuntu JDK Image
37+
#
38+
##########################################
39+
40+
FROM eclipse-temurin:21.0.9_10-jdk-noble AS jdk-run
41+
42+
RUN groupadd engine \
43+
&& usermod -l engine ubuntu \
44+
&& adduser engine engine \
45+
&& mkdir -p /opt/engine/appdata \
46+
&& chown -R engine:engine /opt/engine
47+
48+
WORKDIR /opt/engine
49+
COPY --chown=engine:engine --from=builder \
50+
--exclude=cli-lib \
51+
--exclude=mirth-cli-launcher.jar \
52+
--exclude=mccommand \
53+
--exclude=manager-lib \
54+
--exclude=mirth-manager-launcher.jar \
55+
--exclude=mcmanager \
56+
/app/server/setup ./
57+
58+
VOLUME /opt/engine/appdata
59+
VOLUME /opt/engine/custom-extensions
60+
EXPOSE 8443
61+
62+
USER engine
63+
ENTRYPOINT ["./configure-from-env"]
64+
CMD ["./oieserver"]
65+
66+
##########################################
67+
#
68+
# Alpine JRE Image
69+
#
70+
##########################################
71+
72+
FROM eclipse-temurin:21.0.9_10-jre-alpine AS jre-run
73+
74+
# Alpine does not include bash by default, so we install it
75+
RUN apk add --no-cache bash
76+
# useradd and groupadd are not available in Alpine
77+
RUN addgroup -S engine \
78+
&& adduser -S -g engine engine \
79+
&& mkdir -p /opt/engine/appdata \
80+
&& chown -R engine:engine /opt/engine
81+
82+
WORKDIR /opt/engine
83+
COPY --chown=engine:engine --from=builder \
84+
--exclude=cli-lib \
85+
--exclude=mirth-cli-launcher.jar \
86+
--exclude=mccommand \
87+
--exclude=manager-lib \
88+
--exclude=mirth-manager-launcher.jar \
89+
--exclude=mcmanager \
90+
/app/server/setup ./
91+
92+
VOLUME /opt/engine/appdata
93+
VOLUME /opt/engine/custom-extensions
94+
95+
EXPOSE 8443
96+
97+
USER engine
98+
ENTRYPOINT ["./configure-from-env"]
99+
CMD ["./oieserver"]

0 commit comments

Comments
 (0)