Created
March 18, 2019 03:19
-
-
Save sgyyz/df34acc4f130f6f1a78aca4dc6c30606 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The version of Alpine to use for the final image | |
# This should match the version of Alpine that the `elixir:1.7.2-alpine` image uses | |
ARG ALPINE_VERSION=3.8 | |
FROM elixir:1.7.2-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 | |
# The version of the application we are building (required) | |
ARG APP_VSN | |
# The environment to build with | |
ARG MIX_ENV=prod | |
# Set this to true if this release is not a Phoenix app | |
ARG SKIP_PHOENIX=false | |
# 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 \ | |
yarn \ | |
git \ | |
build-base && \ | |
mix local.rebar --force && \ | |
mix local.hex --force | |
# This copies our app source code into the build container | |
COPY . . | |
RUN rm -rf deps/ | |
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 && \ | |
yarn install && \ | |
yarn deploy && \ | |
cd .. && \ | |
mix phx.digest; \ | |
fi | |
RUN \ | |
mkdir -p /opt/built && \ | |
mix release --verbose && \ | |
cp _build/${MIX_ENV}/rel/${APP_NAME}/releases/${APP_VSN}/${APP_NAME}.tar.gz /opt/built && \ | |
cd /opt/built && \ | |
tar -xzf ${APP_NAME}.tar.gz && \ | |
rm ${APP_NAME}.tar.gz | |
# 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 | |
RUN apk update && \ | |
apk add --no-cache \ | |
bash \ | |
openssl-dev | |
ENV REPLACE_OS_VARS=true \ | |
APP_NAME=${APP_NAME} | |
WORKDIR /opt/app | |
COPY --from=builder /opt/built . | |
CMD trap 'exit' INT; /opt/app/bin/${APP_NAME} foreground |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment