I have one docker-compose.yml file that build the phoenix container for backend and a elm app container for front-end:
You can access the repo here : GitHub - HETIC-MT-P2021/aio-group3-proj01: Elm application with Phoenix API on Docker : Edwin Vautier - Jack Maarek - Jason Gauvin · GitHub
Here is the docker-compose.yml:
version: '3.7'
services:
db:
image: postgres:9.6
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
PGDATA: /var/lib/postgresql/data/pgdata
restart: always
volumes:
- ./pgdata:/var/lib/postgresql/data
phoenix:
build: .docker/backend/.
volumes:
- ./source/backend/api_app:/backend
- .docker/backend/phoenix-setup.sh:/phoenix-setup.sh
command: ../phoenix-setup.sh
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGDATABASE: database_name
PGPORT: 5432
PGHOST: db
ports:
- 4000:4000
depends_on:
- db
elm-app:
build: .docker/frontend/.
volumes:
- ./source/frontend/:/elm-app
command: elm reactor
ports:
- 8000:8000
depends_on:
- phoenix
volumes:
pgdata:
The Docker file for backend api:
FROM elixir:latest
LABEL maintainer="Edouin Vautier, Jason Gauvin, Jack Maarek <https://github.com/HETIC-MT-P2021/aio-group3-proj01>"
RUN mix local.hex --force &&\
mix local.rebar --force &&\
mix archive.install hex phx_new 1.4.16 --force
RUN apt-get update && \
## install inotify-tool for phoenix hot reload
apt-get install -y inotify-tools && \
# Install postgres client
apt-get install -y postgresql-client && \
# Clear apt cache
rm -rf /var/lib/apt/lists/*
WORKDIR /backend
EXPOSE 4000
with a setup shell file :
#!/usr/bin/env bash
mix deps.get # install project depencies
mix ecto.create
mix ecto.migrate
exec mix phx.server
And the dockerfile for frontend:
FROM alpine:latest
RUN mkdir /elm-app
WORKDIR /elm-app
# Install curl package
RUN apk update && apk add --update curl && apk add --update nodejs npm && \
# Install elm
curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz && \
gunzip elm.gz && \
chmod +x elm && \
mv elm /usr/local/bin/
EXPOSE 8000






















