Dockerfile to build Ruby trunk
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# see https://github.com/docker-library/ruby/blob/e5d5ed23036c66c5797c39e0e156de5d006dbfc0/2.5/alpine3.7/Dockerfile | |
FROM alpine:3.7 | |
# skip installing gem documentation | |
RUN mkdir -p /usr/local/etc \ | |
&& { \ | |
echo 'install: --no-document'; \ | |
echo 'update: --no-document'; \ | |
} >> /usr/local/etc/gemrc | |
ENV RUBYGEMS_VERSION 2.7.4 | |
ENV BUNDLER_VERSION 1.16.1 | |
# some of ruby's build scripts are written in ruby | |
# we purge system ruby later to make sure our final image uses what we just built | |
# readline-dev vs libedit-dev: https://bugs.ruby-lang.org/issues/11869 and https://github.com/docker-library/ruby/issues/75 | |
RUN set -ex \ | |
\ | |
&& apk add --no-cache --virtual .ruby-builddeps \ | |
autoconf \ | |
bison \ | |
bzip2 \ | |
bzip2-dev \ | |
ca-certificates \ | |
coreutils \ | |
dpkg-dev dpkg \ | |
gcc \ | |
gdbm-dev \ | |
glib-dev \ | |
libc-dev \ | |
libffi-dev \ | |
libressl \ | |
libressl-dev \ | |
libxml2-dev \ | |
libxslt-dev \ | |
linux-headers \ | |
make \ | |
ncurses-dev \ | |
procps \ | |
readline-dev \ | |
ruby \ | |
tar \ | |
xz \ | |
yaml-dev \ | |
zlib-dev \ | |
git \ | |
\ | |
&& git clone https://github.com/ruby/ruby.git \ | |
&& cd ruby \ | |
\ | |
# hack in "ENABLE_PATH_CHECK" disabling to suppress: | |
# warning: Insecure world writable dir | |
&& { \ | |
echo '#define ENABLE_PATH_CHECK 0'; \ | |
echo; \ | |
cat file.c; \ | |
} > file.c.new \ | |
&& mv file.c.new file.c \ | |
\ | |
&& autoconf \ | |
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ | |
# the configure script does not detect isnan/isinf as macros | |
&& export ac_cv_func_isnan=yes ac_cv_func_isinf=yes \ | |
&& ./configure \ | |
--build="$gnuArch" \ | |
--disable-install-doc \ | |
--enable-shared \ | |
&& make -j "$(nproc)" \ | |
&& make install \ | |
\ | |
&& runDeps="$( \ | |
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ | |
| tr ',' '\n' \ | |
| sort -u \ | |
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ | |
)" \ | |
&& apk add --virtual .ruby-rundeps $runDeps \ | |
bzip2 \ | |
ca-certificates \ | |
libffi-dev \ | |
libressl-dev \ | |
procps \ | |
yaml-dev \ | |
zlib-dev \ | |
&& apk del .ruby-builddeps \ | |
&& cd / \ | |
&& gem update --system "$RUBYGEMS_VERSION" \ | |
&& gem install bundler --version "$BUNDLER_VERSION" --force | |
# install things globally, for great justice | |
# and don't create ".bundle" in all our apps | |
ENV GEM_HOME /usr/local/bundle | |
ENV BUNDLE_PATH="$GEM_HOME" \ | |
BUNDLE_BIN="$GEM_HOME/bin" \ | |
BUNDLE_SILENCE_ROOT_WARNING=1 \ | |
BUNDLE_APP_CONFIG="$GEM_HOME" | |
ENV PATH $BUNDLE_BIN:$PATH | |
RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" \ | |
&& chmod 777 "$GEM_HOME" "$BUNDLE_BIN" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment