# ---- Build Stage ---- FROM erlang:21 AS app_builder # Set environment variables for building the application ENV MIX_ENV=prod \ TEST=1 \ LANG=C.UTF-8 # Fetch the latest version of Elixir (once the 1.9 docker image is available you won't have to do this) RUN set -xe \ && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/v1.10.3.tar.gz" \ && ELIXIR_DOWNLOAD_SHA256="f3035fc5fdade35c3592a5fa7c8ee1aadb736f565c46b74b68ed7828b3ee1897" \ && curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL \ && echo "$ELIXIR_DOWNLOAD_SHA256 elixir-src.tar.gz" | sha256sum -c - \ && mkdir -p /usr/local/src/elixir \ && tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz \ && rm elixir-src.tar.gz \ && cd /usr/local/src/elixir \ && make install clean # Install hex and rebar RUN mix local.hex --force && \ mix local.rebar --force # Create the application build directory RUN mkdir /app WORKDIR /app # Copy over all the necessary application files and directories COPY config ./config COPY lib ./lib COPY priv ./priv COPY mix.exs . COPY mix.lock . # Fetch the application dependencies and build the application RUN mix deps.get RUN mix deps.compile RUN mix phx.digest RUN mix release # ---- Application Stage ---- FROM debian:stretch AS app ENV LANG=C.UTF-8 # Install openssl RUN apt-get update && apt-get install -y openssl # Copy over the build artifact from the previous step and create a non root user RUN useradd --create-home app WORKDIR /home/app COPY --from=app_builder /app/_build . RUN chown -R app: ./prod USER app # Run the Phoenix app CMD ["./prod/rel/podcast_feed/bin/podcast_feed", "start"]