windows + docker + phoenix framework

先日のAnniversary Updateによりbashが使えるようになったWindows 10。 結構いいスペックのWindows PCが放置されていたので、開発に使ってみようと思い立った。 尚、dockerを使っていて先のbashは関係ない。あしからず。

はじめに

やること

  • phoenix frameworkのトップ画面を開く

使うもの

  • Docker Toolbox
  • Virtual Machine

手順

1. phoenixプロジェクトのbootstrap

カレントディレクトリ(リポジトリ置いておくとこ)をゲストマシンの/codeにマウントして、プロジェクトを作成する。 カレントディレクトリ内にmy_new_appが作られる。

docker run -it --rm -v "$PWD":/code -w /phoenix marcelocg/phoenix mix phoenix.new /code/my_new_app

2. Dockerfileの作成

cd my_new_app && touch Dockerfile

FROM marcelocg/phoenix

# hexのインストール
RUN yes | mix local.hex

CMD mix phoenix.server

3. dependenciesのインストール

mix deps.get

docker run -it --rm -v "$PWD":/code marcelocg/phoenix mix deps.get

npm install

windowsディレクトリをvirtual boxのマシンでマウントしているとsymlinkが張れないので--no-bin-linkオプションが必要。

docker run -it --rm -v "$PWD":/code marcelocg/phoenix npm install --no-bin-links

4. データベースの設定

postgresの起動

docker run -p 5432:5432 --name postgres --env POSTGRES_PASSWORD=postgres POSTGRES_USER=postgres postgres

接続情報の設定

vim config/dev.exs

POSTGRES_PORT_5432_TCP_ADDRという環境変数は後述のステップでコンテナ同士をリンクしたときに自動設定される。

# Configure your database
config :my_new_app, MyNewApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "my_new_app_dev",
  hostname: System.get_env("POSTGRES_PORT_5432_TCP_ADDR"),
  pool_size: 10

DBの作成

docker run -it --rm -v -p 4000:4000 "$PWD":/code marcelocg/phoenix mix ecto.create

5. phoenix appの起動

docker run --link postgres -it --rm -v "$PWD":/code marcelocg/phoenix

docker-machine ipでホストしているマシンのIP調べて、{your_docker_machine_ip_addr}:4000にアクセスする。

感想

2-3年前は開発するならMacじゃないと無理だと思っていたけど、最近はツール群の発達でWindowsでも問題なく開発できそう。