mirror of
https://github.com/docker-library/ruby.git
synced 2022-11-09 11:41:34 -05:00
Templatize our Dockerfiles
This commit is contained in:
parent
ccbf9e54f6
commit
abad497073
6 changed files with 224 additions and 15 deletions
|
@ -6,7 +6,7 @@ ENV RUBY_DOWNLOAD_SHA256 8690bd6b4949c333b3919755c4e48885dbfed6fd055fe9ef89930bd
|
|||
ENV RUBYGEMS_VERSION 2.5.2
|
||||
|
||||
# skip installing gem documentation
|
||||
RUN echo 'install: --no-document\nupdate: --no-document' > "$HOME/.gemrc"
|
||||
RUN echo 'install: --no-document\nupdate: --no-document' >> "$HOME/.gemrc"
|
||||
|
||||
# some of ruby's build scripts are written in ruby
|
||||
# we purge this later to make sure our final image uses what we just built
|
||||
|
|
81
Dockerfile-alpine.template
Normal file
81
Dockerfile-alpine.template
Normal file
|
@ -0,0 +1,81 @@
|
|||
FROM alpine:3.3
|
||||
|
||||
ENV RUBY_MAJOR %%VERSION%%
|
||||
ENV RUBY_VERSION %%FULL_VERSION%%
|
||||
ENV RUBY_DOWNLOAD_SHA256 %%SHA256%%
|
||||
ENV RUBYGEMS_VERSION %%RUBYGEMS%%
|
||||
|
||||
# skip installing gem documentation
|
||||
RUN echo -e 'install: --no-document\nupdate: --no-document' >> "$HOME/.gemrc"
|
||||
|
||||
RUN set -x \
|
||||
&& apk add --no-cache --virtual .ruby-builddeps \
|
||||
autoconf \
|
||||
bison \
|
||||
bzip2 \
|
||||
bzip2-dev \
|
||||
ca-certificates \
|
||||
coreutils \
|
||||
curl \
|
||||
gcc \
|
||||
gdbm-dev \
|
||||
glib-dev \
|
||||
libc-dev \
|
||||
libedit-dev \
|
||||
libffi-dev \
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
linux-headers \
|
||||
make \
|
||||
ncurses-dev \
|
||||
openssl-dev \
|
||||
procps \
|
||||
ruby \
|
||||
yaml-dev \
|
||||
zlib-dev \
|
||||
&& curl -fSL -o ruby.tar.gz "http://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR/ruby-$RUBY_VERSION.tar.gz" \
|
||||
&& echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.gz" | sha256sum -c - \
|
||||
&& mkdir -p /usr/src \
|
||||
&& tar -xzf ruby.tar.gz -C /usr/src \
|
||||
&& mv "/usr/src/ruby-$RUBY_VERSION" /usr/src/ruby \
|
||||
&& rm ruby.tar.gz \
|
||||
&& cd /usr/src/ruby \
|
||||
&& autoconf \
|
||||
# the configure script does not detect isnan/isinf as macros
|
||||
&& ac_cv_func_isnan=yes ac_cv_func_isinf=yes ./configure --disable-install-doc \
|
||||
&& make -j"$(nproc)" \
|
||||
&& make install \
|
||||
&& gem update --system $RUBYGEMS_VERSION \
|
||||
&& runDeps="$( \
|
||||
scanelf --needed --nobanner --recursive /usr/local \
|
||||
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
|
||||
| sort -u \
|
||||
| xargs -r apk info --installed \
|
||||
| sort -u \
|
||||
)" \
|
||||
&& apk add --virtual .ruby-rundeps $runDeps \
|
||||
bzip2 \
|
||||
ca-certificates \
|
||||
curl \
|
||||
libffi-dev \
|
||||
openssl-dev \
|
||||
yaml-dev \
|
||||
procps \
|
||||
zlib-dev \
|
||||
&& apk del .ruby-builddeps \
|
||||
&& rm -r /usr/src/ruby
|
||||
|
||||
# install things globally, for great justice
|
||||
ENV GEM_HOME /usr/local/bundle
|
||||
ENV PATH $GEM_HOME/bin:$PATH
|
||||
|
||||
ENV BUNDLER_VERSION %%BUNDLER%%
|
||||
|
||||
RUN gem install bundler --version "$BUNDLER_VERSION" \
|
||||
&& bundle config --global path "$GEM_HOME" \
|
||||
&& bundle config --global bin "$GEM_HOME/bin"
|
||||
|
||||
# don't create ".bundle" in all our apps
|
||||
ENV BUNDLE_APP_CONFIG $GEM_HOME
|
||||
|
||||
CMD [ "irb" ]
|
13
Dockerfile-onbuild.template
Normal file
13
Dockerfile-onbuild.template
Normal file
|
@ -0,0 +1,13 @@
|
|||
FROM ruby:%%VERSION%%
|
||||
|
||||
# throw errors if Gemfile has been modified since Gemfile.lock
|
||||
RUN bundle config --global frozen 1
|
||||
|
||||
RUN mkdir -p /usr/src/app
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ONBUILD COPY Gemfile /usr/src/app/
|
||||
ONBUILD COPY Gemfile.lock /usr/src/app/
|
||||
ONBUILD RUN bundle install
|
||||
|
||||
ONBUILD COPY . /usr/src/app
|
72
Dockerfile-slim.template
Normal file
72
Dockerfile-slim.template
Normal file
|
@ -0,0 +1,72 @@
|
|||
FROM debian:jessie
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
bzip2 \
|
||||
ca-certificates \
|
||||
curl \
|
||||
libffi-dev \
|
||||
libgdbm3 \
|
||||
libssl-dev \
|
||||
libyaml-dev \
|
||||
procps \
|
||||
zlib1g-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV RUBY_MAJOR %%VERSION%%
|
||||
ENV RUBY_VERSION %%FULL_VERSION%%
|
||||
ENV RUBY_DOWNLOAD_SHA256 %%SHA256%%
|
||||
ENV RUBYGEMS_VERSION %%RUBYGEMS%%
|
||||
|
||||
# skip installing gem documentation
|
||||
RUN echo 'install: --no-document\nupdate: --no-document' >> "$HOME/.gemrc"
|
||||
|
||||
# some of ruby's build scripts are written in ruby
|
||||
# we purge this later to make sure our final image uses what we just built
|
||||
RUN buildDeps=' \
|
||||
autoconf \
|
||||
bison \
|
||||
gcc \
|
||||
libbz2-dev \
|
||||
libgdbm-dev \
|
||||
libglib2.0-dev \
|
||||
libncurses-dev \
|
||||
libreadline-dev \
|
||||
libxml2-dev \
|
||||
libxslt-dev \
|
||||
make \
|
||||
ruby \
|
||||
' \
|
||||
&& set -x \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends $buildDeps \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& mkdir -p /usr/src/ruby \
|
||||
&& curl -fSL -o ruby.tar.gz "http://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR/ruby-$RUBY_VERSION.tar.gz" \
|
||||
&& echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.gz" | sha256sum -c - \
|
||||
&& tar -xzf ruby.tar.gz -C /usr/src/ruby --strip-components=1 \
|
||||
&& rm ruby.tar.gz \
|
||||
&& cd /usr/src/ruby \
|
||||
&& autoconf \
|
||||
&& ./configure --disable-install-doc \
|
||||
&& make -j"$(nproc)" \
|
||||
&& make install \
|
||||
&& gem update --system $RUBYGEMS_VERSION \
|
||||
&& rm -r /usr/src/ruby \
|
||||
&& apt-get purge -y --auto-remove $buildDeps
|
||||
|
||||
# install things globally, for great justice
|
||||
ENV GEM_HOME /usr/local/bundle
|
||||
ENV PATH $GEM_HOME/bin:$PATH
|
||||
|
||||
ENV BUNDLER_VERSION %%BUNDLER%%
|
||||
|
||||
RUN gem install bundler --version "$BUNDLER_VERSION" \
|
||||
&& bundle config --global path "$GEM_HOME" \
|
||||
&& bundle config --global bin "$GEM_HOME/bin" \
|
||||
&& bundle config --global silence_root_warning true
|
||||
|
||||
# don't create ".bundle" in all our apps
|
||||
ENV BUNDLE_APP_CONFIG $GEM_HOME
|
||||
|
||||
CMD [ "irb" ]
|
44
Dockerfile.template
Normal file
44
Dockerfile.template
Normal file
|
@ -0,0 +1,44 @@
|
|||
FROM buildpack-deps:jessie
|
||||
|
||||
ENV RUBY_MAJOR %%VERSION%%
|
||||
ENV RUBY_VERSION %%FULL_VERSION%%
|
||||
ENV RUBY_DOWNLOAD_SHA256 %%SHA256%%
|
||||
ENV RUBYGEMS_VERSION %%RUBYGEMS%%
|
||||
|
||||
# skip installing gem documentation
|
||||
RUN echo 'install: --no-document\nupdate: --no-document' >> "$HOME/.gemrc"
|
||||
|
||||
# some of ruby's build scripts are written in ruby
|
||||
# we purge this later to make sure our final image uses what we just built
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y bison libgdbm-dev ruby \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& mkdir -p /usr/src/ruby \
|
||||
&& curl -fSL -o ruby.tar.gz "http://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR/ruby-$RUBY_VERSION.tar.gz" \
|
||||
&& echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.gz" | sha256sum -c - \
|
||||
&& tar -xzf ruby.tar.gz -C /usr/src/ruby --strip-components=1 \
|
||||
&& rm ruby.tar.gz \
|
||||
&& cd /usr/src/ruby \
|
||||
&& autoconf \
|
||||
&& ./configure --disable-install-doc \
|
||||
&& make -j"$(nproc)" \
|
||||
&& make install \
|
||||
&& apt-get purge -y --auto-remove bison libgdbm-dev ruby \
|
||||
&& gem update --system $RUBYGEMS_VERSION \
|
||||
&& rm -r /usr/src/ruby
|
||||
|
||||
# install things globally, for great justice
|
||||
ENV GEM_HOME /usr/local/bundle
|
||||
ENV PATH $GEM_HOME/bin:$PATH
|
||||
|
||||
ENV BUNDLER_VERSION %%BUNDLER%%
|
||||
|
||||
RUN gem install bundler --version "$BUNDLER_VERSION" \
|
||||
&& bundle config --global path "$GEM_HOME" \
|
||||
&& bundle config --global bin "$GEM_HOME/bin" \
|
||||
&& bundle config --global silence_root_warning true
|
||||
|
||||
# don't create ".bundle" in all our apps
|
||||
ENV BUNDLE_APP_CONFIG $GEM_HOME
|
||||
|
||||
CMD [ "irb" ]
|
27
update.sh
27
update.sh
|
@ -25,22 +25,21 @@ for version in "${versions[@]}"; do
|
|||
| sed -r 's!.*<a href="ruby-([^"]+)\.tar\.bz2.*!\1!' \
|
||||
| sort -V | tail -1)"
|
||||
shaVal="$(echo $shaPage | sed -r "s/.*Ruby ${fullVersion}<\/a><br \/> sha256: ([^<]+).*/\1/")"
|
||||
(
|
||||
set -x
|
||||
sed -ri '
|
||||
s/^(ENV RUBY_MAJOR) .*/\1 '"$version"'/;
|
||||
s/^(ENV RUBY_VERSION) .*/\1 '"$fullVersion"'/;
|
||||
s/^(ENV RUBY_DOWNLOAD_SHA256) .*/\1 '"$shaVal"'/;
|
||||
s/^(ENV BUNDLER_VERSION) .*/\1 '"$bundler"'/;
|
||||
s/^(ENV RUBYGEMS_VERSION) .*/\1 '"$rubygems"'/;
|
||||
' "$version"{/,/*/}Dockerfile
|
||||
sed -ri 's/^(FROM ruby):.*/\1:'"$version"'/' "$version/"*"/Dockerfile"
|
||||
)
|
||||
for variant in alpine slim; do
|
||||
|
||||
sedStr="
|
||||
s!%%VERSION%%!$version!g;
|
||||
s!%%FULL_VERSION%%!$fullVersion!g;
|
||||
s!%%SHA256%%!$shaVal!g;
|
||||
s!%%RUBYGEMS%%!$rubygems!g;
|
||||
s!%%BUNDLER%%!$bundler!g;
|
||||
"
|
||||
for variant in alpine slim onbuild ''; do
|
||||
[ -d "$version/$variant" ] || continue
|
||||
travisEnv='\n - VERSION='"$version VARIANT=$variant$travisEnv"
|
||||
sed -r "$sedStr" "Dockerfile${variant:+-$variant}.template" > "$version/$variant/Dockerfile"
|
||||
if [ "$variant" != 'onbuild' ]; then
|
||||
travisEnv='\n - VERSION='"$version VARIANT=$variant$travisEnv"
|
||||
fi
|
||||
done
|
||||
travisEnv='\n - VERSION='"$version VARIANT=$travisEnv"
|
||||
done
|
||||
|
||||
travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)"
|
||||
|
|
Loading…
Reference in a new issue