こんにちは、PhybbitのBobです。

大分遅れておりますが、PhybbitAdventCalendarの8日目です。

概要

今回は、前回作った
PhoenixのアプリケーションをDockerを使って動かす設定をしてみます。

動機

1日目 や、 3日目
で、ErlangとElixirのセットアップをしてみましたが、
色々と躓くポイントが有り辛かった為です (T T)

設定

今回はまっさらな状態からスタートして大丈夫です

Dockerfileを作成

まず、以下の様なDockerfileを作成します

今回は、簡単のため、DockerHubから、Elixirインストール済みの
イメージを使用します。
軽量なイメージを使いたい場合は alpineの方を使用しましょう。

FROM elixir:1.5.2
ENV DEBIAN_FRONTEND=noninteractive

# Elixirの依存関係のインストール
RUN mix local.hex --force
RUN mix local.rebar --force
RUN mix archive.install --force https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez

# nodeのインストール
RUN curl -SL https://deb.nodesource.com/setup_8.x | bash -
RUN apt-get install -y -q nodejs


WORKDIR /app
ADD . /app

※ とりあえず動作させる為なので、ユーザなどは作成しません

Docker Compose を作成

今回Phoenixを動作させるためには、 web サーバと Database が必要なので
それらのコンテナの設定を行います

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: mix phoenix.server
    volumes:
      - .:/app
    ports:
      - "4000:4000"
    depends_on:
      - db

アプリケーションの準備

まず、コンテナを起動します。

docker-compose up -d

起動が完了したら、Phoenixアプリケーションを作成します

docker-compose run  web mix phoenix.new  hi_phoenix

これで ./hi_phoenix が作成されました。
現在のディレクトリに中身を移します。

mv -nv ./hi_phoenix/* ./
mv ./hi_phoenix/.gitignore ./
rm -fr ./hi_phoenix

次に、データベースの設定を更新します
デフォルトだと開発環境では localhost を参照しますが、
今回は、コンテナで設定している db を設定するようにします。

# config/dev.exs
config :hi_pohenix, HiPhoenix.Repo.
  adapter: ...
  hostname: "db,
  ...

更新したら、データベースを作成します。

docker-compose run web mix ecto.create

データベースを作成後、アプリケーションを再起動します

docker-compose restart web

これで localhost:4000 にアクセスするとアプリケーションが動いている状態になります。

まとめ

ローカルの環境設定で手間取るばあいは、Dockerを使うと手早く環境が
構築できて便利です。