search
LoginSignup
15

More than 5 years have passed since last update.

posted at

Elixir開発環境の構築をDockerでやる

はじめに

今年を振り返って、最もバズったキーワードは Docker であるということで、異論は無いと思います。
実際私も Docker を使っていて、Elixir と同様、美しく、便利で、楽しいと感じています。
今回は、Docker を使ってElixir の開発環境を構築するやり方をご紹介します。

Dockerで何ができるのか

端的に言うと、クリーンな環境を、任意の構成で、簡単に作り上げることができます。
軽量なので、同じ環境を何度も繰り返し作るのに向いています。
環境は冪等性が保証されており、CIやDevOpsへの応用が期待されます。

Elixirプログラマにとってのメリット

OS Xは、Elixirプログラミングをするには最高の環境だと思います。
しかし、我々の目指すところはElixirで作ったクールなコードをプロダクションで動作させることであり、大抵のプロダクション環境はLinuxだったりします。
Elixirを動作させるには、Erlang/OTP バージョン17のインストールが必要ですが、少なくとも大抵のメジャーなLinuxでは、これを自分でビルドしなければなりません。
さらに、ElixirもGitHubからクローンする必要があります。
brew install elixir でサクッと入るわけではないのです。(何度 make clean test したことか。)

Dockerを使えば、この悩みを解消することができます。
すなわち、Docker以外ほとんど何も入っていない状態のLinux上でも、サクッとElixirの開発環境を構築することができるのです。

今回の環境

Ubuntu 14.04 LTS

全体の手順

Dockerをインストール
|> Docker Hubからイメージをダウンロード
|> コンテナを起動
|> Elixirする

やってみよう

Dockerをインストール

$ sudo apt-get install -y docker

Docker Hubからイメージをダウンロード

ここでは、手順をシンプルにするため、予め私がビルドしてDocker Hubで公開しているイメージを使います。
Docker Hubのリポジトリはこちら。 https://hub.docker.com/u/keithseahus/

$ sudo docker pull keithseahus/elixir-ubuntu-14.04lts

初回は、ダウンロードに時間がかかります。コーヒー淹れるなりコード書くなりして待ちましょう。

コンテナを起動

$ sudo docker run -i -t keithseahus/elixir-ubuntu-14.04lts zsh

Elixirする

% iex

中身は何なのか

Dockerイメージの構成を定義するのがDockerfileですが、私が公開しているイメージは、複数のDockerfileから成り立っています。

  • base-ubuntu-14.04lts
  • erlang-otp-ubuntu-14.04lts
  • elixir-ubuntu-14.04lts

ベースは、公式のUbuntuイメージをベースに、どの開発にも共通して最低限必要となる(又は入っていると非常に嬉しい)ツールをインストールしたものです。また、いわゆるドットファイル(.emacsとか.tmux.confとか.zshrcとか)も、私のGitHubからクローンしており、コンテナを起動したら即座に開発を開始できるようにしています。
このイメージは汎用的に使うことを目的としたもので、他の言語向けイメージの土台にもなっています。

Erlang/OTPのイメージは、上記イメージにErlang/OTP 17をインストールしたものです。
Ubuntu 14.04 LTSのリポジトリにあるバージョンは16なので、ソースをダウンロードしてコンパイルしています。
その際に、configureオプションを指定し、極力多くの機能を有効にしています。なので、JavaもWxも入っていますし、HiPEも有効です。

そして、Elixirのイメージ。Elixirの最新版をダウンロードして make clean test しています。

自分でやるには

必要なDockerfileを作って、動作確認した後、GitHubで公開しましょう。(参考: https://github.com/keithseahus/dockerfiles )
Docker Hub から Automated Build を選ぶと、GitHubを連携して、Dockerfileのあるディレクトリ・パスを指定すると、Docker Hubが取り込んでくれます。
GitHubにpushしたら自動的にDocker Hubでビルドを行う設定もあります。ただ、私のように一つのGitHubリポジトリで複数のDockerfileを管理していると、一つpushしただけで、Docker Hubでは全部ビルドが走ってしまうのが玉にキズです。(かといって、GitHubでリポジトリを分けるのは、個人的にはやりたくないのですが。)

まとめ

Dockerを使ってElixirの開発環境をサクッと構築するやり方をご紹介しました。
実際、CIやDevOpsに向いていますので、これをベースにElixirのアプリケーションをJenkinsでテストする環境も、簡単に構築できますね。
また、今回Ubuntuでしたが、CentOS 7のイメージも近日作成しようと思います。

明日は @mtwtk_man さんです。

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
What you can do with signing up
15