やってみよう!Elixir / Phoenix 関数型プログラミングの基礎①

webアプリ開発
目次

開発環境構築手順(Dockerコンテナの構築)

 

作業ディレクトリの作成

次のコマンドを実行してください。

~$ mkdir -p ~/projects/phx_sample
~$ cd ~/projects/phx_sample

mkdirに-pをつけると親ディレクトリも一緒に作成します。ホームディレクトリの下にサブディレクトリprojectsが作られ、さらにその下にphx_sampleが作られます。作業ディレクトリ(phx_sample)に移動してvs codeを開きましょう。

 

コンテナの構築、起動、停止

Dockerfileの作成

作業ディレクトリの下にDockerfileという名のファイルを新規作成し、次の内容を書き込んでください。

FROM elixir:1.18.4

ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NOWARNINGS yes

RUN apt-get update && apt-get -y install apt-file && apt-file update
RUN apt-get -y upgrade

RUN apt-get -y install bash git vim sudo curl inotify-tools cmake erlang-dev \
  ca-certificates gnupg postgresql-client libpq-dev

RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | \
  gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

ENV NODE_MAJOR=22
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" > /etc/apt/sources.list.d/nodesource.list
RUN apt-get update && apt-get -y install nodejs

RUN apt-get -y install build-essential libcairo2-dev libpango1.0-dev \
  libjpeg-dev libgif-dev librsvg2-dev
RUN npm install -g vega vega-lite canvas

RUN echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf

ARG UID=1000
ARG GID=1000

RUN groupadd -g $GID devel
RUN useradd -u $UID -g devel -m devel
RUN echo "devel ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

COPY --chown=devel:devel . /app

USER devel

WORKDIR /app

RUN mix local.hex --force
RUN mix local.rebar --force

 

compose.ymlの作成

続いて、作業ディレクトリの下にcompose.ymlという名のファイルを新規作成し、次の内容を書き込んでください。

services:
  app:
    build: .
    volumes:
      - .:/app:cached
    working_dir: /app
    ports:
      - "4000:4000"
    depends_on:
    - db
    tty: true
  db:
    image: postgres:15.8
    volumes:
      - pg:/var/lib/postgresql/data:cached
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: phx_sample_dev
    ports:
      - "5432:5432"
volumes:
  pg:

 

compose.ymlは、コンテナ群をどのように起動するかを記述したyaml形式の設定ファイルです。

compose.ymlでは、個々のコンテナにサービスという名前を与えます。上記のcompose.ymlでは、appという名前のサービスが定義されています。

 

コンテナの構築

次のコマンドを実行してください。

cd ~/projects/phx_sample
docker compose build

 

コンテナの起動

次のコマンドを実行してコンテナを起動してください。

docker compose up -d

 

起動中のコンテナのリスト確認

docker compose ps

 

Dockerコンテナの中に入る

次のコマンドを実行すると起動中のコンテナの中に入ることができます。

docker compose exec app bash

 

コンテナの停止

Dockerコンテナからexitコマンドを実行してコンテナを抜けてください。

次のコマンドを実行して起動中のコンテナを停止してください。

docker compose stop