5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Phoenix用Dockerfile

5
Posted at

落ち着いてきたのでPhoenixにしっかり入門しようと思いPhoeinxの環境を構築してみた。
以前、雑にGKEに乗っけるための記事を書いたりしたがそこから期間が空いてしまいPhoenixに関するいろいろな記憶が失われていたため再構築中
今回は手元にDockerを使ってPhoenixの開発に必要な環境を構築したので備忘録とす

想定読者

  • ぼく
  • Phoenixを追いかけ始めた新米錬金術師

Dockerfile

早速ですが試行錯誤の末に完成したDockerfileです

FROM elixir:1.9.0

WORKDIR /app

RUN apt-get update && \
  curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
  apt-get install -y nodejs npm inotify-tools

RUN mix local.hex --force && \
  mix archive.install --force https://github.com/phoenixframework/archives/raw/master/phx_new.ez && \
  mix local.rebar --force

COPY mix.exs mix.exs
COPY mix.lock mix.lock
RUN mix deps.get && mix compile

COPY assets/package.json assets/package.json
COPY assets/package-lock.json assets/package-lock.json
RUN cd assets && npm install

EXPOSE 4000
COPY . .

ポイントはDockerfileの時点で mix deps.get && mix compileしていること
これしとくことでKubernetesに乗っけたときも即起動するはず...たぶん(動かしてない)

docker-compose.yml

こちらも早速

version: '3.2'
services:
  app:
    build: .
    ports:
      - "4000:4000"
    command: tail -f /dev/null # 開発用なのでコンテナ内でiex -S mix phx.serverする前提
    environment:
      - MIX_ENV=dev
      - PORT=4000
      - DATABASE_USER=postgres
      - DATABASE_PASSWORD=postgres
      - DATABASE_NAME=postgres
      - DATABASE_HOST=db
      - DATABASE_URL=ecto://postgres:postgres@db/postgres # NOTE: これはproductionで動かすときに使う
      - SECRET_KEY_BASE=
    volumes:
      - .:/app
    depends_on:
      - db
  db:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_HOST=db
      - POSTGRES_DB=postgres

先に書いたDockerfileを使ってローカルで開発するとちょっとボリュームの共有がやりづらくなってしまう(´・ω・`)
これはDockerfile内でassetsとpackageをコンパイルしているがローカルには存在しないため手元のコードをマウントすると_buildとassetsの成果物が失われるため(´・ω・`)
ただ、ローカル開発だけならパッケージを追加しない限りは一度 mix compileしておけば再コンパイルの必要はない。assetsも同じ

最初にやること


docker-compose pull
docker-compose build
docker-compose up -d
docker-compose exec app bash -c "cd assets && npm install"
docker-compose exec app mix deps.get && mix compile

↑のコードを順次実行することでローカル開発の準備完了

さいごに

これで手元のコードを編集して普段どおりに開発するだけで問題ないはず
Dockerfileの内容的にはKubernetesにデプロイしてもデプロイ後からmix compileが始まるみたいなことは起きないはずなので
安心して運用できる気がします(未検証)

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?