Skip to content

Instantly share code, notes, and snippets.

@sjava
Created November 1, 2018 03:17
Show Gist options
  • Save sjava/7b015117008c74edf1154a8d54ea5577 to your computer and use it in GitHub Desktop.
Save sjava/7b015117008c74edf1154a8d54ea5577 to your computer and use it in GitHub Desktop.
docker-for-phoenix

使用方法

ファイルの設置

以下のファイルをPhoenixプロジェクトのルートディレクトリ配下に設置します。

  • Dockerfile
  • docker-compose.yml

バージョンの修正

各ファイルに定義されている以下のバージョンを適切なものに修正します。

  • Dockerfile
    • Elixirのバージョン
    • Phoenixのバージョン
    • Nodeのバージョン
    • npmのバージョン
  • docker-compose.yml
    • MySQLのバージョン

開発用設定ファイルの修正

config/dev.exs に定義されているMySQLのusernameとdatabaseを以下のように修正します。 (databaseの名前は適切に書き変えてください)

# Configure your database
config :my_app, MyApp.Repo,
  adapter: Ecto.Adapters.MySQL,
  username: "root",
  password: "password",
  database: "my_app_dev",
  hostname: "db",
  pool_size: 10

docker-composeの実行

以下のコマンドを実行してdockerコンテナの生成し、Phoenixアプリケーションを実行します。 (docker-composeでコンテナを立ち上げると同時に、 mix phx.server が実行されます)

$ docker-compose up -d

DBの作成

以下のコマンドを実行してMySQLのDBを作成します。

$ docker-compose run web mix ecto.create && mix ecto.migrate

以下のURLにアクセスして、Phoenixアプリケーションを開くことができれば成功です http://localhost:4000

コンテナとのインタラクション

dockerコンテナでshellを操作するには、以下のコマンドを実行します。

$ docker exec -it {コンテナのID} bash

コンテナの停止

docker-composeで立ち上げたコンテナを停止するには、次のコマンドを実行します。

$ docker-compose stop

なお、 docker-compose down でコンテナを削除すると、開発用DBのデータも削除されるので注意してください。(DBデータを維持するにはVolumeを指定する必要あり)

注意点

6/5 時点で、MySQLのドライバであるMariaexは、MYSQL8.0に接続できない問題がある模様。 xerions/mariaex#222

version: '3.2'
services:
web:
build: .
ports:
- "4000:4000"
command: mix phx.server
environment:
- MIX_ENV=dev
- PORT=4000
volumes:
- .:/app
db:
image: mysql:5.7
hostname: db
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: "password"
FROM elixir:1.6.5
ENV NODE_VERSION 8.x
ENV NPM_VERSION 6.1.0
ENV PHOENIX_VERSION 1.3.2
RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION} | bash \
&& apt-get install -y nodejs
RUN npm install npm@${NPM_VERSION} -g
RUN mix local.hex --force && \
mix archive.install --force https://github.com/phoenixframework/archives/raw/master/phx_new-${PHOENIX_VERSION}.ez && \
mix local.rebar --force
WORKDIR /app
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment