Last active
July 16, 2022 13:37
-
-
Save csalmeida/4ee0a58cc060bf0a2fadbdfefc30e287 to your computer and use it in GitHub Desktop.
Rails Dockerfile
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
.git | |
tmp | |
!tmp/pids | |
log | |
public/assets | |
public/packs | |
.bundle | |
db/*.sqlite3 | |
db/*.sqlite3-* | |
storage | |
config/master.key | |
config/credentials/*.key | |
node_modules |
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
# syntax = docker/dockerfile:experimental | |
ARG RUBY_VERSION=2.7.3 | |
ARG VARIANT=jemalloc-slim | |
FROM quay.io/evl.ms/fullstaq-ruby:${RUBY_VERSION}-${VARIANT} as base | |
ARG NODE_VERSION=16 | |
ARG BUNDLER_VERSION=2.3.9 | |
ARG RAILS_ENV=production | |
ENV RAILS_ENV=${RAILS_ENV} | |
ENV RAILS_SERVE_STATIC_FILES true | |
ENV RAILS_LOG_TO_STDOUT true | |
ARG BUNDLE_WITHOUT=development:test | |
ARG BUNDLE_PATH=vendor/bundle | |
ENV BUNDLE_PATH ${BUNDLE_PATH} | |
ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT} | |
RUN mkdir /app | |
WORKDIR /app | |
RUN mkdir -p tmp/pids | |
SHELL ["/bin/bash", "-c"] | |
RUN curl https://get.volta.sh | bash | |
ENV BASH_ENV ~/.bashrc | |
ENV VOLTA_HOME /root/.volta | |
ENV PATH $VOLTA_HOME/bin:/usr/local/bin:$PATH | |
RUN volta install node@${NODE_VERSION} && volta install yarn | |
FROM base as build_deps | |
ARG DEV_PACKAGES="git build-essential libpq-dev wget vim curl gzip xz-utils libsqlite3-dev" | |
ENV DEV_PACKAGES ${DEV_PACKAGES} | |
RUN --mount=type=cache,id=dev-apt-cache,sharing=locked,target=/var/cache/apt \ | |
--mount=type=cache,id=dev-apt-lib,sharing=locked,target=/var/lib/apt \ | |
apt-get update -qq && \ | |
apt-get install --no-install-recommends -y ${DEV_PACKAGES} \ | |
&& rm -rf /var/lib/apt/lists /var/cache/apt/archives | |
FROM build_deps as gems | |
RUN gem install -N bundler -v ${BUNDLER_VERSION} | |
COPY Gemfile* ./ | |
RUN bundle install && rm -rf vendor/bundle/ruby/*/cache | |
FROM build_deps as node_modules | |
COPY package*json ./ | |
COPY yarn.* ./ | |
RUN if [ -f "yarn.lock" ]; then \ | |
yarn install; \ | |
elif [ -f "package-lock.json" ]; then \ | |
npm install; \ | |
else \ | |
mkdir node_modules; \ | |
fi | |
FROM base | |
ARG PROD_PACKAGES="postgresql-client file vim curl gzip libsqlite3-0" | |
ENV PROD_PACKAGES=${PROD_PACKAGES} | |
RUN --mount=type=cache,id=prod-apt-cache,sharing=locked,target=/var/cache/apt \ | |
--mount=type=cache,id=prod-apt-lib,sharing=locked,target=/var/lib/apt \ | |
apt-get update -qq && \ | |
apt-get install --no-install-recommends -y \ | |
${PROD_PACKAGES} \ | |
&& rm -rf /var/lib/apt/lists /var/cache/apt/archives | |
COPY --from=gems /app /app | |
COPY --from=node_modules /app/node_modules /app/node_modules | |
ENV SECRET_KEY_BASE 1 | |
COPY . . | |
RUN bundle exec rails assets:precompile | |
ENV PORT 8080 | |
ARG SERVER_COMMAND="bundle exec puma -C config/puma.rb" | |
ENV SERVER_COMMAND ${SERVER_COMMAND} | |
CMD ${SERVER_COMMAND} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment