Put your Elixir app inside minimal Docker image. Based on alpine linux and distillery releases.
- Add
mix_dockerto your list of dependencies inmix.exs:
```elixir
def deps do
[{:mix_docker, "~> 0.3.0"}]
end
```
- Configure Docker image name
```elixir
# config/config.exs
config :mix_docker, image: "recruitee/hello"
```
-
Run
mix docker.initto init distillery release configuration -
Run
mix docker.build&mix docker.releaseto build the image. See Usage for more.
Run mix docker.build to build a release inside docker container
Run mix docker.release to put the release inside minimal docker image
Run mix docker.publish to push newly created image to docker registry
Run mix docker.shipit
Run mix docker.customize
Using ENV variables.
The provided Docker images contain REPLACE_OS_VARS=true, so you can use "${VAR_NAME}" syntax in config/prod.exs
like this:
config :hello, Hello.Endpoint,
server: true,
url: [host: "${DOMAIN}"]
config :hello, Hello.Mailer,
adapter: Bamboo.MailgunAdapter,
api_key: "${MAILGUN_API_KEY}"The easiest way is to docker exec into running container and run the following command,
where CID is the app container IO and hello is the name of your app.
docker exec -it CID /opt/app/bin/hello remote_consoleFirst, run mix docker.customize to copy Dockerfile.build and Dockerfile.release into your project directory.
Now you can add whatever you like using standard Dockerfile commands.
Feel free to add some more apk packages or run some custom commands.
TIP: To keep the build process efficient check whether a given package is required only for
compilation (build) or runtime (release) or both.