CircleCI上でFigを使ってDockerの構成管理をする

こんにちは、CircleCI芸人です。

最近はローカル環境もboot2dockerを使ってDocker環境を構築して開発しています。扱うコンテナが増えてくるとdockerコマンドはオプションも多いし、なかなかつらたんな面が多いわけですが、そんなときの構成管理にはFigを使っています。

で、fig.ymlを作ってコンテナを構成すればよいわけですが、これをローカルのみならずCircleCI上でもやれたらいいよねっていうTipsです。

circle.yml

CircleCIでfigするにはcircle.ymlを整備するだけでOKです。重要なとこだけ説明するので、本質じゃない箇所は完全に省きます。

machineフェーズ

machineフェーズはビルドの序盤で走る、コンテナの設定やサービスの起動、ツールのインストール等を行うフェーズです。

machine:

  services:
    - docker

  pre:
    - curl -L https://github.com/docker/fig/releases/download/1.0.1/fig-`uname -s`-`uname -m` > ~/bin/fig
    - chmod +x ~/bin/fig

  • まずservicesでdockerを起動
  • pre(postでも良いが)でfigの実行ファイルをGitHubから落としてきて保存して、実行権限あげる

これで準備完了

dependenciesフェーズ

dependenciesフェーズはまさにビルドのためのフェーズです。

dependencies:

  pre:
    - fig up -d

dependenciesフェーズの本処理(preの後で実行される)が実際のビルド処理なので、その前に片付けておくべきタスクはpreに記述します。 ここではpreでfigからDockerのコンテナを起動させて常駐させてます。

fig up自体はDockerイメージさえダウンロードされればすぐ終わってしまいますが、Dockerコンテナでフォアグラウンドになってるプロセスが完全に準備完了になってないケースもある(起動に時間がかかるサーバ等)ので、それが完了せずに次のタスクでコンテナに依存するような処理を書くと準備できてなくて失敗することもあります。 というわけで、コンテナに乗るアプリケーションの特性に合わせて、必要に応じてsleepを数秒入れるとかっていう対応が必要になったりするので注意が必要ですね。はい。

といったかんでこんなTipsを今後もシェアしていきます。