Dockerfile for building

This commit is contained in:
James Greenwood 2025-11-17 08:38:37 +00:00
parent de1b1bd484
commit 590be07076

72
Dockerfile Normal file
View File

@ -0,0 +1,72 @@
# syntax=docker/dockerfile:1.7
# Use the official Alpine Elixir image; keep the version in sync with mix.exs
ARG ELIXIR_VERSION=1.15
FROM elixir:${ELIXIR_VERSION}-alpine AS build
ENV LANG="en_US.UTF-8" \
MIX_ENV="prod" \
HOME="/app"
WORKDIR /app
RUN apk update && \
apk add --no-cache \
build-base \
sqlite-dev \
openssl-dev \
ca-certificates
RUN mix do local.hex --force, local.rebar --force
# Only copy files necessary to download deps to maximize layer caching
COPY mix.exs mix.lock ./
COPY config config
RUN mix deps.get --only ${MIX_ENV} && \
mix deps.compile
# Copy the rest of the application source
COPY lib lib
COPY priv priv
COPY assets assets
RUN mix compile
RUN mix assets.deploy
RUN mix release
# Minimal runtime image
FROM alpine:3.19 AS app
ENV LANG="en_US.UTF-8" \
MIX_ENV="prod" \
PORT="4000" \
PHX_SERVER="true" \
DATABASE_PATH="/app/data/action_requests_demo.db"
WORKDIR /app
RUN apk add --no-cache \
openssl \
ncurses-libs \
libstdc++ \
sqlite \
ca-certificates
# Keep SQLite data outside of the release directory so it can persist as a volume
RUN install -d -m 0755 /app/data
COPY --from=build /app/_build/prod/rel/action_requests_demo ./
RUN addgroup -S app && \
adduser -S app -G app && \
chown -R app:app /app
USER app
EXPOSE 4000
VOLUME ["/app/data"]
ENTRYPOINT ["./bin/action_requests_demo"]
CMD ["start"]