Fig で Libreboard 環境を構築してみた

前回 は Docker 上で Libreboard を動かしてみたが、今のところ Libreboard の開発は非常に活発で、更新を Docker コンテナに反映させるたびに長々としたコマンドを叩くのが不便に感じてきたため、 Fig を使って必要なコマンドなどをあらかじめ定義しておき、 fig buildfig up で楽に更新適用ができるようにしてみた。以下はその手順

  1. Fig をインストール。今回は手元のサーバが Gentoo だったので emerge で入れてしまったが、 Installing Fig を見る限り、他の環境でも簡単に導入できると思う
  2. Fig の作業ディレクトリを適当に作成して移動する

    mkdir fig_libreboard
    cd fig_libreboard
    
  3. fig.yml を作成する。今回は下記のようにしてみた

    libreboard:
      build: ../libreboard
      links:
        - mongo
      ports:
        - "5555:8080"
      environment:
        ROOT_URL: "http://libreboard.example.com"
      command: "sh -c 'export MONGO_URL=mongodb://$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/libreboard; /meteor-run.sh'"
    data:
      image: busybox
      volumes:
        - /data/db
    backup:
      image: busybox
      volumes_from:
        - data
    mongo:
      image: mongo
      volumes_from:
        - data
      entrypoint: mongod
    

    libreboard, data, backup, mongo の 4 台構成になっている。それぞれの役割は、

    • libreboard はアプリケーションを稼働させるコンテナ。先ほど作った fig_libreboard と同一階層の libreboard ディレクトリにある Dockerfile を読み込んで Docker イメージを構築し、それを実行する。データストアとなる MongoDB コンテナとリンクして、起動時に環境変数経由で接続を行っている。
    • dataManaging data in containers - Docker Documentation で言うところのデータボリュームコンテナで、 MongoDB のデータを保持するためだけに使われている。
    • mongo は実際に MongoDB が稼働するコンテナ。 data のボリュームに接続してデータをそこに保存している。
    • backup は、 data からは /data/db の中身が見えなかったため、確認作業などのために便宜上作成しておいたコンテナ。これがあると気軽に fig run --rm backup ls -al /data/db などと打って中身を確認したり、 tar でのバックアップ作業がやりやすくなる。が、特別稼働そのものには関係ないので、なくてもかまわない

    といったところ。起動コマンドやポートの設定は 前回 のものを引き継ぐ形で指定している

  4. 上記設定ができたら、 fig up を実行してコンテナ群を起動する。初回は libreboard コンテナ用のイメージのビルドが実行されるので、少しばかり時間がかかる。無事に起動してウェブブラウザで 5555 番ポートにアクセスしてログイン画面が出れば成功。バックグラウンドでの起動に切り替えたい場合は、いったん Ctrl-c を入力してコンテナ群を停止し、改めて fig up -d で起動すればよい。

  5. Libreboard の更新があった場合は fig build を実行して Docker イメージを再作成する。イメージ作成に成功したら fig up -d を実行して環境を再起動すればよい

Fig を使うと、このような感じで一度 fig.yml を書くだけで、機能ごとに分割した複数のコンテナを保持しつつ、日常の操作は簡単な fig コマンドを実行するだけで済むようになる。今回の Libreboard に限らず、 Fig を使うことでホスト側の環境にあれこれ手を入れずとも気軽にウェブアプリケーションの実行環境を用意できるので、単一ホスト内で実行させたいウェブアプリケーションの管理には非常に優れていると思う