Skip to content

Instantly share code, notes, and snippets.

@mattwelke
Last active November 16, 2021 01:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattwelke/6c2076a33f1aa7e77c410bcfc5bce724 to your computer and use it in GitHub Desktop.
Save mattwelke/6c2076a33f1aa7e77c410bcfc5bce724 to your computer and use it in GitHub Desktop.
jruby dockerize
FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu as build-java
# Create a custom Java runtime
RUN $JAVA_HOME/bin/jlink \
--add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.se,java.security.jgss,java.security.sasl,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml,java.xml.crypto,jdk.accessibility,jdk.attach,jdk.charsets,jdk.compiler,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.dynalink,jdk.editpad,jdk.hotspot.agent,jdk.httpserver,jdk.internal.ed,jdk.internal.jvmstat,jdk.internal.le,jdk.internal.opt,jdk.internal.vm.ci,jdk.internal.vm.compiler,jdk.internal.vm.compiler.management,jdk.jartool,jdk.javadoc,jdk.jcmd,jdk.jconsole,jdk.jdeps,jdk.jdi,jdk.jdwp.agent,jdk.jfr,jdk.jlink,jdk.jpackage,jdk.jshell,jdk.jsobject,jdk.jstatd,jdk.localedata,jdk.management,jdk.management.agent,jdk.management.jfr,jdk.naming.dns,jdk.naming.rmi,jdk.net,jdk.nio.mapmode,jdk.random,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported,jdk.unsupported.desktop,jdk.xml.dom,jdk.zipfs \
--strip-java-debug-attributes \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /javaruntime
FROM openjdk:11-jre-buster as build-ruby
# Prereqs for downloading JRuby
RUN apt-get update && apt-get install -y curl
# Download JRuby to download the gems and jars
ENV JRUBY_VERSION 9.3.1.0
ENV JRUBY_SHA256 4a9778c114452c0227e10e6718b2c5e128b310b9c6551be93bdd938888f3c418
RUN mkdir /opt/jruby \
&& curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
&& echo "$JRUBY_SHA256 /tmp/jruby.tar.gz" | sha256sum -c - \
&& tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
&& rm /tmp/jruby.tar.gz \
&& update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
ENV PATH /opt/jruby/bin:$PATH
# Skip installing gem documentation
RUN mkdir -p /opt/jruby/etc \
&& { \
echo 'install: --no-document'; \
echo 'update: --no-document'; \
} >> /opt/jruby/etc/gemrc
RUN gem install bundler:1.17.3 rake net-telnet xmlrpc
# Download gems
COPY Gemfile Gemfile.lock ./
RUN bundle _1.17.3_ install --binstubs
# Download jars
COPY Jarfile Jarfile.lock ./
RUN bundle exec jbundle
FROM debian:buster-slim
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-17-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
# Prereqs for downloading JRuby
RUN apt-get update && apt-get install -y curl
# Download JRuby to run the app
ENV JRUBY_VERSION 9.3.1.0
ENV JRUBY_SHA256 4a9778c114452c0227e10e6718b2c5e128b310b9c6551be93bdd938888f3c418
RUN mkdir /opt/jruby \
&& curl -fSL https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz -o /tmp/jruby.tar.gz \
&& echo "$JRUBY_SHA256 /tmp/jruby.tar.gz" | sha256sum -c - \
&& tar -zx --strip-components=1 -f /tmp/jruby.tar.gz -C /opt/jruby \
&& rm /tmp/jruby.tar.gz \
&& update-alternatives --install /usr/local/bin/ruby ruby /opt/jruby/bin/jruby 1
ENV PATH /opt/jruby/bin:$PATH
# Copy from builder images
COPY --from=build-java /javaruntime $JAVA_HOME
ENV _GEM_PATH /opt/jruby/lib/ruby/gems/shared
COPY --from=build-ruby $_GEM_PATH $_GEM_PATH
# Copy app code
COPY Gemfile ./
COPY Gemfile.lock ./
COPY Jarfile ./
COPY Jarfile.lock ./
COPY server.rb ./
EXPOSE 7000
ENTRYPOINT [ "ruby", "server.rb" ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment