ARG MIX_ENV="prod" ARG DATABASE_URL ARG PORT ARG POOL_SIZE ARG SECRET_KEY_BASE # build stage FROM hexpm/elixir:1.12.3-erlang-24.1.2-alpine-3.14.2 AS build # install build dependencies RUN apk add --no-cache build-base git python3 curl # sets work dir WORKDIR /app # install hex + rebar RUN mix local.hex --force && \ mix local.rebar --force ARG MIX_ENV ENV MIX_ENV="${MIX_ENV}" # install mix dependencies COPY mix.exs mix.lock ./ RUN mix deps.get --only $MIX_ENV # copy compile configuration files RUN mkdir config COPY config/config.exs config/$MIX_ENV.exs config/ # compile dependencies RUN mix deps.compile # copy assets COPY priv priv COPY assets assets # Compile assets RUN mix assets.deploy # compile project COPY lib lib RUN mix compile # copy runtime configuration file COPY config/runtime.exs config/ # assemble release RUN mix release # app stage FROM alpine:3.14.2 AS app ARG MIX_ENV # install runtime dependencies RUN apk add --no-cache libstdc++ openssl ncurses-libs ENV USER="elixir" WORKDIR "/home/${USER}/app" # Create unprivileged user to run the release RUN \ addgroup \ -g 1000 \ -S "${USER}" \ && adduser \ -s /bin/sh \ -u 1000 \ -G "${USER}" \ -h "/home/${USER}" \ -D "${USER}" \ && su "${USER}" # run as user USER "${USER}" # copy release executables COPY --from=build --chown="${USER}":"${USER}" /app/_build/"${MIX_ENV}"/rel/railwayphoenix ./ ENTRYPOINT ["bin/railwayphoenix"] CMD ["start"]