Dockerfile example used to build an elixir/phoenix project on linux and output a tarball
FROM elixir:1.11.2 AS build | |
## instll some dependencies (webpack basically) | |
RUN \ | |
apt-get update -y && \ | |
curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ | |
apt-get install -y nodejs && node -v && npm -v | |
# Required environment variables passed in via --build-arg flags | |
ARG DATABASE_URL | |
ARG SECRET_KEY_BASE | |
# prepare build dir | |
WORKDIR /app | |
# install hex + rebar | |
RUN mix local.hex --force && \ | |
mix local.rebar --force | |
# set build ENV | |
ENV MIX_ENV=prod | |
# install mix dependencies | |
COPY mix.exs mix.lock ./ | |
COPY config config | |
RUN mix deps.get --only prod | |
RUN mix deps.compile | |
# copy lib first, otherwise tailwind's purgeCSS or other tree-shaking tools will purge everything. | |
COPY lib lib | |
# clean install of package-lock | |
COPY assets/package.json assets/package-lock.json ./assets/ | |
RUN npm --prefix ./assets ci --progress=false --no-audit --loglevel=error | |
# build assets | |
COPY priv priv | |
COPY assets assets | |
RUN npm run --prefix ./assets deploy | |
RUN mix phx.digest | |
# compile and build release | |
# uncomment COPY if rel/ exists | |
# COPY rel rel | |
RUN mix do compile, release | |
FROM scratch AS app | |
WORKDIR /app | |
COPY --from=build /app/_build/prod/my_app-*.tar.gz ./ | |
CMD ["/bin/bash"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment