mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 03:57:52 +00:00
Reduce docker image size (#394)
Reduce docker image size based on: https://cadu.dev/reduce-your-docker-images-an-example-with-ruby/
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
FROM ruby:2.6.5-slim
|
||||
# pre-build stage
|
||||
FROM ruby:2.6.5-alpine AS pre-builder
|
||||
|
||||
# ARG default to production settings
|
||||
# For development docker-compose file overrides ARGS
|
||||
ARG BUNDLE_WITHOUT="development:test"
|
||||
ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT}
|
||||
ENV BUNDLER_VERSION=2.1.2
|
||||
|
||||
ARG RAILS_SERVE_STATIC_FILES=true
|
||||
ENV RAILS_SERVE_STATIC_FILES ${RAILS_SERVE_STATIC_FILES}
|
||||
@@ -11,22 +13,20 @@ ENV RAILS_SERVE_STATIC_FILES ${RAILS_SERVE_STATIC_FILES}
|
||||
ARG RAILS_ENV=production
|
||||
ENV RAILS_ENV ${RAILS_ENV}
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get -qq -y install \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
imagemagick \
|
||||
libpq-dev \
|
||||
ENV BUNDLE_PATH="/gems"
|
||||
|
||||
RUN apk update \
|
||||
&& apk add \
|
||||
openssl \
|
||||
tar \
|
||||
build-base \
|
||||
tzdata \
|
||||
postgresql-dev \
|
||||
postgresql-client \
|
||||
&& curl -L https://deb.nodesource.com/setup_12.x | bash - \
|
||||
&& curl https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
|
||||
&& echo 'deb https://dl.yarnpkg.com/debian stable main' > /etc/apt/sources.list.d/yarn.list \
|
||||
&& apt-get update \
|
||||
&& apt-get -qq -y install nodejs yarn \
|
||||
&& gem install bundler \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
nodejs \
|
||||
yarn \
|
||||
&& mkdir -p /var/app \
|
||||
&& gem install bundler
|
||||
|
||||
RUN mkdir -p /app
|
||||
WORKDIR /app
|
||||
@@ -47,4 +47,42 @@ COPY . /app
|
||||
# generate production assets if production environment
|
||||
RUN if [ "$RAILS_ENV" = "production" ]; then \
|
||||
SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile; \
|
||||
fi
|
||||
fi
|
||||
|
||||
# final build stage
|
||||
FROM ruby:2.6.5-alpine
|
||||
|
||||
ARG BUNDLE_WITHOUT="development:test"
|
||||
ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT}
|
||||
ENV BUNDLER_VERSION=2.1.2
|
||||
|
||||
ARG EXECJS_RUNTIME="Disabled"
|
||||
ENV EXECJS_RUNTIME ${EXECJS_RUNTIME}
|
||||
|
||||
ARG RAILS_SERVE_STATIC_FILES=true
|
||||
ENV RAILS_SERVE_STATIC_FILES ${RAILS_SERVE_STATIC_FILES}
|
||||
|
||||
ARG RAILS_ENV=production
|
||||
ENV RAILS_ENV ${RAILS_ENV}
|
||||
ENV BUNDLE_PATH="/gems"
|
||||
|
||||
RUN apk add --update --no-cache \
|
||||
openssl \
|
||||
tzdata \
|
||||
postgresql-client \
|
||||
&& gem install bundler
|
||||
|
||||
RUN if [ "$RAILS_ENV" = "production" ]; then \
|
||||
rm -rf spec node_modules app/assets vendor/assets tmp/cache; \
|
||||
else apk add nodejs yarn; \
|
||||
fi
|
||||
|
||||
COPY --from=pre-builder /gems/ /gems/
|
||||
COPY --from=pre-builder /app /app
|
||||
|
||||
# Remove unecessary files
|
||||
RUN rm -rf /gems/ruby/2.6.0/cache/*.gem \
|
||||
&& find /gems/ruby/2.6.0/gems/ -name "*.c" -delete \
|
||||
&& find /gems/ruby/2.6.0/gems/ -name "*.o" -delete
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/bin/sh
|
||||
|
||||
set -x
|
||||
|
||||
@@ -17,10 +17,9 @@ done
|
||||
|
||||
echo "Database ready to accept connections."
|
||||
|
||||
YARN="yarn check --integrity"
|
||||
BUNDLE="bundle check"
|
||||
|
||||
until $YARN && $BUNDLE
|
||||
until $BUNDLE
|
||||
do
|
||||
sleep 2;
|
||||
done
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
rm -rf /app/tmp/pids/server.pid
|
||||
@@ -17,4 +17,4 @@ done
|
||||
|
||||
echo "Ready to run webpack development server."
|
||||
|
||||
exec "$@"
|
||||
exec "$@"
|
||||
|
||||
Reference in New Issue
Block a user