41 lines
969 B
Docker
41 lines
969 B
Docker
FROM elixir:1.17-alpine AS build
|
|
|
|
WORKDIR /app
|
|
|
|
# Install hex and rebar
|
|
RUN mix local.hex --force && \
|
|
mix local.rebar --force
|
|
|
|
# Copy mix files for dependency resolution
|
|
COPY mix.exs mix.lock* ./
|
|
RUN mix deps.get --only prod
|
|
|
|
# Copy source code
|
|
COPY lib ./lib
|
|
COPY run.exs ./
|
|
|
|
# Compile the project (don't run yet)
|
|
RUN MIX_ENV=prod mix compile
|
|
|
|
# Runtime stage
|
|
FROM elixir:1.17-alpine
|
|
|
|
WORKDIR /app
|
|
|
|
# Install hex and rebar in runtime
|
|
RUN mix local.hex --force && \
|
|
mix local.rebar --force
|
|
|
|
# Copy built application from build stage
|
|
COPY --from=build /app/_build /app/_build
|
|
COPY --from=build /app/deps /app/deps
|
|
COPY --from=build /app/lib /app/lib
|
|
COPY --from=build /app/run.exs /app/run.exs
|
|
COPY --from=build /app/mix.exs /app/mix.exs
|
|
|
|
# Set mix environment to skip Mix.install
|
|
ENV MIX_ENV=prod
|
|
ENV ERL_FLAGS="-pa _build/prod/lib/*/ebin -pa deps/*/ebin"
|
|
|
|
# Run the application
|
|
CMD ["elixir", "-pa", "_build/prod/lib/*/ebin", "-pa", "deps/*/ebin", "run.exs"]
|