From 9b48e3221a0afeefaec050e6c1159f63220bdb54 Mon Sep 17 00:00:00 2001 From: Khemissi Amir Date: Mon, 15 May 2023 19:39:18 +0100 Subject: [PATCH] CI: Reducing Greenlight Docker image size (#5073) * CI: Limited more local files from propagating to image. * CI: Reduced the image size. --------- Co-authored-by: Ahmad Farhat --- .dockerignore | 29 ++++++++++++--------- Dockerfile | 72 ++++++++++++++++++++++----------------------------- 2 files changed, 48 insertions(+), 53 deletions(-) diff --git a/.dockerignore b/.dockerignore index 9d969004f0..78765505cc 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,26 +4,31 @@ README.md SECURITY.md .github +.gitlab-ci.yml +.rvmrc # Rails .env* *.rbc capybara-*.html .rspec -log -tmp +**/.bundle/ +*.dev +.rubocop.yml +log/* +tmp/* +storage/* /db/**/*.sqlite3 /db/**/*.sqlite3-journal /db/production /db/production-postgres -public/assets -public/b +public/**/assets/ coverage/ -.rvmrc -vendor/bundle -.bundle -Dockerfile -.gitlab-ci.yml -.rubocop.yml -spec -test +vendor/* +Dockerfile* +spec/ +test/ +**/node_modules/ +app/assets/builds/* +dockerfiles/ +!**/.keep diff --git a/Dockerfile b/Dockerfile index 82d7b1ab12..f7687b5fed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,56 +1,46 @@ -FROM alpine:3.17 AS alpine +FROM ruby:alpine3.17 AS base ARG RAILS_ROOT=/usr/src/app ENV RAILS_ROOT=${RAILS_ROOT} - -FROM alpine AS base -WORKDIR $RAILS_ROOT -RUN apk add --no-cache \ - libpq \ - libxml2 \ - libxslt \ - ruby \ - ruby-irb \ - ruby-bigdecimal \ - ruby-bundler \ - ruby-json \ - tzdata \ - bash \ - shared-mime-info - -FROM base -RUN apk add --no-cache \ - build-base \ - curl-dev \ - git \ - gettext \ - imagemagick \ - libxml2-dev \ - libxslt-dev \ - pkgconf \ - postgresql-dev \ - ruby-dev \ - nodejs npm \ - yarn \ - yaml-dev \ - zlib-dev \ - && ( echo 'install: --no-document' ; echo 'update: --no-document' ) >>/etc/gemrc -COPY . ./ -RUN bundle install -j4 \ - && yarn install - ARG RAILS_ENV ENV RAILS_ENV=${RAILS_ENV:-production} +ARG NODE_ENV +ENV NODE_ENV=${RAILS_ENV} ARG RAILS_LOG_TO_STDOUT ENV RAILS_LOG_TO_STDOUT=${RAILS_LOG_TO_STDOUT:-true} ARG RAILS_SERVE_STATIC_FILES ENV RAILS_SERVE_STATIC_FILES=${RAILS_SERVE_STATIC_FILES:-true} ARG PORT ENV PORT=${PORT:-3000} - -EXPOSE ${PORT} - ARG VERSION_TAG ENV VERSION_TAG=$VERSION_TAG +ENV PATH=$PATH:$RAILS_ROOT/bin +WORKDIR $RAILS_ROOT +RUN bundle config --local deployment 'true' \ + && bundle config --local without 'development:test' + +FROM base as build + +ARG PACKAGES='alpine-sdk libpq-dev' +COPY Gemfile Gemfile.lock ./ +RUN apk update \ + && apk add --update --no-cache ${PACKAGES} \ + && bundle install --no-cache \ + && bundle doctor + +FROM base as prod +ARG PACKAGES='libpq-dev tzdata imagemagick yarn bash' +COPY --from=build $RAILS_ROOT/vendor/bundle ./vendor/bundle +COPY package.json yarn.lock ./ +RUN apk update \ + && apk add --update --no-cache ${PACKAGES} \ + && yarn install --production --frozen-lockfile \ + && yarn cache clean +COPY . ./ +RUN apk update \ + && apk upgrade \ + && update-ca-certificates + +EXPOSE ${PORT} ENTRYPOINT [ "./bin/start" ]