Docker Compose로 Elixir/Phoenix 개발 환경 구축

소개



이 기사에서는 Docker Compose를 사용한 Phoenix 애플리케이션 개발 환경 구축에 대해 설명합니다. 이 기사는 다음 버전을 기반으로 설명합니다.

Elixir: 1.8.1
Phoenix: 1.4.3
Node.js: 10.x
Docker: 18.09

또, 이후의 설명은 my-app 디렉토리에 my_app 라고 하는 어플리케이션을 구축한다고 전제로 진행합니다.

Docker 파일 만들기



먼저 Docker 파일을 프로젝트 디렉토리에 넣습니다. 적절한 위치에 my-app라는 디렉토리를 만들고 다음에 표시된 Dockerfiledocker-compose.yml를 디렉토리에 저장하십시오.

my-app/Dockerfile
FROM elixir:1.8.1

ENV NODE_VERSION 10.x

RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION} | bash \
  && apt-get install -y nodejs

RUN npm install npm@latest -g

RUN mix local.hex --force && \
  mix archive.install hex phx_new 1.4.3 --force && \
  mix local.rebar --force

WORKDIR /app

my-app/docker-compose.yml
version: '3.2'
services:
  web:
    build: .
    ports:
      - '4000:4000'
    command: mix phx.server
    environment:
      - MIX_ENV=dev
      - PORT=4000
    volumes:
      - .:/app

  db:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_HOST=db

Phoenix 프로젝트 준비



프로젝트 생성



이제 mix phx.new 명령으로 새 Phoenix 프로젝트를 만듭니다. my-app 디렉토리에서 다음 명령을 실행하십시오.
$ docker-compose run web mix phx.new . --app my_app

실행하는 동안 다음과 같은 확인 메시지가 표시되지만 y를 입력하여 처리를 계속하십시오.
  • The directory /app already exists. Are you sure you want to continue? [Yn]
  • Fetch and install dependencies? [Yn]

  • 위의 작업이 완료되면 다음과 같은 파일/디렉토리가 만들어져야 합니다.
    my-app
    ├── _build
    ├── assets
    ├── config
    ├── deps
    ├── libs
    ├── priv
    ├── test
    ├── .formatter.exs
    ├── .gitignore
    ├── docker-compose.yml
    ├── Dockerfile
    ├── mix.exs
    ├── mix.lock
    └── README.md
    

    DB 설정



    그런 다음 DB를 설정합니다. Phoenix 는 디폴트로 PostgreSQL 를 사용하므로, 여기서는 그대로 PostgreSQL 를 이용하는 것으로 합니다.

    설정 파일 변경


    my-app/config/dev.exs를 열고 Postgres hostname을 다음과 같이 변경하십시오.

    my-app/config/dev.exs
    ...
    
    # Configure your database
    config :my_app, MyApp.Repo,
      adapter: Ecto.Adapters.Postgres,
      username: "postgres",
      password: "postgres",
      database: "my_app_dev",
      hostname: "db",
      pool_size: 10
    

    docker-compose 실행


    docker-compose.yml 로 정의하고 있는 각 service 를 기동합니다. 다음 docker-compose 명령을 실행하십시오.
    $ docker-compose up -d
    

    컴파일 및 마이그레이션



    마지막으로 다음 명령을 실행하여 종속 라이브러리를 컴파일하고 DB를 마이그레이션합니다.
    $ docker-compose run web bash -c "mix deps.compile && mix ecto.create && mix ecto.migrate"
    

    실행 확인



    브라우저에서 http://localhost:4000라는 URL을 지정하십시오. 다음과 같은 Phoenix 기본 초기 페이지가 표시되면 성공합니다.


    개발 중 작업



    Docker 컨테이너에서 명령 실행



    실행 중인 Docker 컨테이너에 대해 명령을 실행하려면 다음과 같이 docker-compose run 을 사용합니다.
    $ docker-compose run web mix hex.info
    

    여기서는 web라는 service에 대해 mix hex.info라는 명령을 실행합니다.

    또한 ssh와 같이 컨테이너에서 계속 명령을 실행하려면 docker exec -it을 사용하십시오.
    $ docker exec -it {コンテナのID} bash
    

    컨테이너 중지


    docker-compose up -d 에서 시작한 Docker 컨테이너를 중지하려면 다음 명령을 실행합니다.
    $ docker-compose stop
    

    또한 컨테이너를 중지할 뿐만 아니라 컨테이너, 볼륨을 삭제할 때까지 다음과 같이 다운 을 지정합니다.
    $ docker-compose down
    

    이 명령을 실행하면 개발 중에 PostgreSQL에 저장된 데이터도 삭제됩니다.

    참고



    Dockerizing a Phoenix Application

    좋은 웹페이지 즐겨찾기