Improve docker compose performance (#347)   🤩

* Fix warning Integrity check: System parameters don't match

* Reduce commands required to use docker-compose and update quick-setup doc

Data will still persist when stopping and restarting containers.
To destroy the data can use docker-compose down --volumes

* Moved webpacker-dev-server to its own service

* cache bundle and yarn - improve volume performance - env conditional statements

* Fix inconsistent build results found during testing
This commit is contained in:
petebytes
2019-12-05 04:12:46 -07:00
committed by Sony Mathew
parent 3a1c0aef07
commit 3f403c9e7a
6 changed files with 88 additions and 37 deletions

View File

@@ -1,5 +1,16 @@
FROM ruby:2.6.5-slim
# ARG default to production settings
# For development docker-compose file overrides ARGS
ARG BUNDLE_WITHOUT="development:test"
ENV BUNDLE_WITHOUT ${BUNDLE_WITHOUT}
ARG RAILS_SERVE_STATIC_FILES=true
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 \
@@ -18,13 +29,24 @@ RUN apt-get update \
RUN mkdir -p /app
WORKDIR /app
COPY Gemfile Gemfile.lock ./
# Do not install development or test gems in production
RUN if [ "$RAILS_ENV" = "production" ]; then \
bundle install -j 4 -r 3 --without development test; \
else bundle install -j 4 -r 3; \
fi
COPY package.json yarn.lock ./
RUN yarn install
COPY . /app
ENV RAILS_SERVE_STATIC_FILES true
ENV RAILS_ENV=production
RUN bundle
RUN SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile
# generate production assets if production environment
RUN if [ "$RAILS_ENV" = "production" ]; then \
SECRET_KEY_BASE=precompile_placeholder bundle exec rake assets:precompile; \
fi
# Add a script to be executed every time the container starts.
COPY ./docker/entrypoint.sh /usr/bin/

View File

@@ -1,2 +0,0 @@
backend: ../bin/rails server -b 0.0.0.0 -p 3000
frontend: ../bin/webpack-dev-server

View File

@@ -5,4 +5,4 @@ set -e
rm -f /app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
exec "$@"