[add] added docker
This commit is contained in:
69
Dockerfile
Normal file
69
Dockerfile
Normal file
@@ -0,0 +1,69 @@
|
||||
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"]
|
||||
Reference in New Issue
Block a user