Files
rynDNS/Dockerfile
2021-02-25 01:02:06 -05:00

69 lines
1.9 KiB
Docker

ARG RUBY_VERSION=2.7.2
## BUILD ENV
FROM ruby:${RUBY_VERSION}-alpine AS build_env
ARG BUILD_PACKAGES="build-base curl-dev git"
ARG DEV_PACKAGES="sqlite-dev"
ARG RUBY_PACKAGES="tzdata"
ARG RAILS_ROOT=/app
ENV RAILS_ENV=production
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
WORKDIR $RAILS_ROOT
# install packages
RUN apk update \
&& apk upgrade \
&& apk add --update --no-cache $BUILD_PACKAGES $DEV_PACKAGES $RUBY_PACKAGES
# copy app and cleanup dev environment in case this is not a clean git clone
COPY . .
RUN rm -rf .bundle vendor .vendor tmp/* db/*.sqlite3 log/* spec
# install gems
RUN gem install bundler:2.2.9 \
&& bundle config --global frozen 1 \
&& bundle config --local path 'vendor/bundle' \
&& bundle config set without 'development:test:assets' \
&& bundle install -j4 --retry 3 \
# Remove unneeded files (cached *.gem, *.o, *.c)
&& rm -rf vendor/bundle/ruby/*/cache/*.gem \
&& find vendor/bundle/ruby/*/gems/ -name "*.c" -delete \
&& find vendor/bundle/ruby/*/gems/ -name "*.o" -delete
# remove folders not needed in resulting image
RUN rm -rf tmp/cache app/assets vendor/assets spec docker
## DEPLOY ENV
FROM ruby:${RUBY_VERSION}-alpine
ARG PACKAGES="tzdata sqlite-libs"
ARG RAILS_ROOT=/app
ENV RAILS_ENV=production
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
ARG USER_UID=12001
ARG USER_GID=12001
ARG GROUP_NAME=ryndns
ARG USER_NAME=ryndns
WORKDIR $RAILS_ROOT
# make user
RUN set -eux; \
addgroup -g $USER_UID $GROUP_NAME; \
adduser -u $USER_UID -G $GROUP_NAME -s /sbin/nologin -D $USER_NAME;
# install packages
RUN apk update \
&& apk upgrade \
&& apk add --update --no-cache $PACKAGES
# get app from build env and add entrypoint
COPY --from=build_env $RAILS_ROOT $RAILS_ROOT
COPY ./docker/files/entrypoint.sh /
# create persistent folder and change permission of app
RUN mkdir -p $RAILS_ROOT/data \
&& chown -R $USER_NAME:$GROUP_NAME $RAILS_ROOT
USER $USER_NAME
EXPOSE 3000
ENTRYPOINT ["/entrypoint.sh"]