| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- FROM ruby:2.6.3-alpine AS base
- ARG BUILD_PACKAGES="build-base git"
- ARG DEV_PACKAGES="postgresql-dev yarn"
- ARG RUBY_PACKAGES="tzdata"
- # Add git to clone Rspec repositories and build-base to compile nokogiri gem
- # Additionally, we need to set timezone information
- RUN apk update && apk add --no-cache $BUILD_PACKAGES $DEV_PACKAGES $RUBY_PACKAGES
- # Make an app directory, just like Heroku.
- RUN mkdir /app
- WORKDIR /app
- ################################################################################
- FROM base AS builder
- # Copying the Gemfile separately allows the image to be cached.
- # These steps are not rerun unless the Gemfile or Gemfile.lock is changed.
- COPY Gemfile Gemfile.lock /app/
- RUN bundle install --jobs 4 --retry 5 --without development test
- # Again, copy seperately so we can cache this step.
- COPY package.json yarn.lock /app/
- RUN yarn install
- # Copy our app over now
- COPY . /app
- # And compile our assets, removing unneeded node_modules directory afterwards
- RUN rails assets:precompile && \
- rm -rf node_modules tmp/cache app/assets log spec
- # Copy the docker configurations over
- COPY config/database.yml.docker config/database.yml
- ################################################################################
- FROM base AS dev
- ENV RAILS_ENV=development
- # We want to include all of our dependencies, so grab what we have already
- COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
- COPY --from=builder /app/ /app/
- # Re-add items removed from the builder
- COPY app/assets/ /app/app/assets/
- COPY spec/ /app/spec/
- # (Re)install the missing development dependencies
- RUN bundle install --jobs 4 --retry 5 --with development test && \
- yarn install
- ################################################################################
- # We want a tiny image, so don't start from base
- FROM ruby:2.6.3-alpine AS prod
- ENV RAILS_ENV=production
- RUN apk add --update --no-cache $RUBY_PACKAGES
- # Grab everything from the builder
- COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
- COPY --from=builder /app/ /app/
- # Run the server
- EXPOSE 3000
- CMD ["rails", "server", "-b", "0.0.0.0"]
|