Switch the webapp to a multi-stage build to reduce size and rebuilds

This should help avoid unnecessary incremental builds locally
This commit is contained in:
R. Tyler Croy 2017-12-21 09:30:46 -08:00
parent a2131dddd8
commit 662861bac1
No known key found for this signature in database
GPG Key ID: 1426C7DC3F51E16F
1 changed files with 23 additions and 11 deletions

View File

@ -1,27 +1,39 @@
FROM ruby:2.3-alpine
FROM ruby:2.3-alpine as builder
ARG BUILD_PKGS="ruby-dev openssl-dev gcc make libc-dev binutils"
ARG APP_DIR=/webapp
RUN mkdir -p ${APP_DIR}/vendor
WORKDIR ${APP_DIR}
ARG BUILD_PKGS="ruby-dev openssl-dev gcc make libc-dev binutils"
ENV GEM_HOME=${APP_DIR}/vendor/gems
ENV BUNDLE_PATH=${APP_DIR}/vendor/gems
ENV BUNDLE_APP_CONFIG=${APP_DIR}/vendor/gems/.bundle
ENV BUNDLE_DISABLE_SHARED_GEMS=true
RUN mkdir -p ${APP_DIR}/vendor
WORKDIR ${APP_DIR}
ADD Gemfile* ${APP_DIR}/
RUN apk add -U ${BUILD_PKGS} && \
bundle install && \
apk del ${BUILD_PKGS} && \
rm -rf /var/cache/apk/*
# Doing a multi-stage build to reset some stuff for a smaller image
FROM ruby:2.3-alpine
ARG APP_DIR=/webapp
WORKDIR ${APP_DIR}
COPY --from=builder ${APP_DIR} .
ENV GEM_HOME=${APP_DIR}/vendor/gems
ENV BUNDLE_PATH=${APP_DIR}/vendor/gems
ENV BUNDLE_APP_CONFIG=${APP_DIR}/vendor/gems/.bundle
ENV BUNDLE_DISABLE_SHARED_GEMS=true
ADD app.rb ${APP_DIR}/
ADD monkeys.txt ${APP_DIR}/
ADD config.ru ${APP_DIR}/
ADD views ${APP_DIR}/views/
ADD assets ${APP_DIR}/assets/
RUN apk add -U ${BUILD_PKGS} && \
bundle install && \
apk del ${BUILD_PKGS} && \
rm -rf /var/cache/apk/*
CMD bundle exec puma