Last active
June 26, 2022 03:40
-
-
Save rlb3/6c0916cf581a7eb043bef34bd1d134a2 to your computer and use it in GitHub Desktop.
Elixir Dockerfile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ARG MIX_ENV="prod" | |
# 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/saturn ./ | |
ENTRYPOINT ["bin/saturn"] | |
CMD ["start"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment