Skip to content

Instantly share code, notes, and snippets.

@Nitrino
Created February 21, 2020 17:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nitrino/2faab487ba12d59327d27d9b6976fdcf to your computer and use it in GitHub Desktop.
Save Nitrino/2faab487ba12d59327d27d9b6976fdcf to your computer and use it in GitHub Desktop.
# ---- Build Stage ----
# The version of Alpine to use for the final image
# This should match the version of Alpine that the builder image uses
ARG ALPINE_VERSION=3.10
FROM elixir:1.9.4-alpine AS builder
# The following are build arguments used to change variable parts of the image.
# The name of your application/release (required)
ARG APP_NAME=sip_gateway
# The version of the application we are building (required)
ARG APP_VSN=0.1.0
# The environment to build with
ARG MIX_ENV=prod
# Set this to true if this release is not a Phoenix app
ARG SKIP_PHOENIX=true
# If you are using an umbrella project, you can change this
# argument to the directory the Phoenix app is in so that the assets
# can be built
ARG PHOENIX_SUBDIR=.
ENV SKIP_PHOENIX=${SKIP_PHOENIX} \
APP_NAME=${APP_NAME} \
APP_VSN=${APP_VSN} \
MIX_ENV=${MIX_ENV}
# By convention, /opt is typically used for applications
WORKDIR /opt/app
# This step installs all the build tools we'll need
RUN apk update && \
apk upgrade --no-cache && \
apk add --no-cache \
nodejs \
npm \
git \
build-base && \
mix local.rebar --force && \
mix local.hex --force
# This copies our app source code into the build container
COPY . .
RUN mix do deps.get, deps.compile, compile
# This step builds assets for the Phoenix app (if there is one)
# If you aren't building a Phoenix app, pass `--build-arg SKIP_PHOENIX=true`
# This is mostly here for demonstration purposes
RUN if [ ! "$SKIP_PHOENIX" = "true" ]; then \
cd ${PHOENIX_SUBDIR}/assets && \
npm install && \
npm run deploy && \
cd .. && \
mix phx.digest; \
fi
RUN \
mkdir -p /opt/built && \
mix release && \
cp -a _build/${MIX_ENV}/rel/${APP_NAME}/ /opt/built
# ---- Application Stage ----
# From this line onwards, we're in a new image, which will be the image used in production
FROM alpine:${ALPINE_VERSION}
# The name of your application/release (required)
ARG APP_NAME=sip_gateway
RUN apk update && \
apk add --no-cache \
bash \
openssl-dev
WORKDIR /opt/app
COPY --from=builder /opt/built/sip_gateway .
RUN apk add --no-cache libstdc++
# HEALTHCHECK CMD ["curl", "--fail", "http://localhost/api/ping"]
RUN chmod -R 755 /opt/app
CMD ["./bin/sip_gateway", "start"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment