本番環境でDockerを使うとなると、開発環境での活用に比べ慎重にならざるを得ない。何かトラブルが起こった際に、サービス提供に支障を来してしまうからだ。リスクを抑えるには、まずは再実行によってトラブルを回避できる処理などに限ってDocker上に実装するアプローチが現実的といえる。
ここでは、レシピコミュニティサイト「クックパッド」とWebサイトのテストサービス「ShouleBee」の事例を紹介する。
クックパッド
セットアップが面倒なソフトを動かす
クックパッドは、スマートフォンのWebブラウザーへ動画広告を配信するシステムでDockerを活用している(図1)。Dockerを使うのは、動画をスマホのWebブラウザー向けに自動変換する部分だ。
実は、現時点ではスマホのWebブラウザーで動画を自動再生できない。これはブラウザーベンダーが設けた制約による。そこで広告事業を担当する大野晋一氏(新規広告開発部 技術グループ エンジニア)は、複数の静止画をJavaScriptで連続表示することによって、スマホでも自動的に動画が再生される仕掛けを考案した。
それには、動画から静止画を一定間隔で切り出し、順番につなぎ合わせる必要がある。この作業には動画変換ソフトを2種類使うが、「どちらもコンパイルとセットアップが非常に面倒なソフトとして知られている」(大野氏)という曲者だった。従来は大野氏が毎回手動でセットアップして動画変換を実施していたが、なんとかそれを自動化したかった。そこで構築したのが、Dockerを使った動画変換サーバーだった。
Dockerのコンテナーには、エンコーダーである「FFmpeg」と画像処理ツール「ImageMagick」をインストールし、変換作業を実行する。まずはFFmpegで動画から指定した頻度で静止画を切り出し、それをImageMagickで加工して順番につなぎ合わせる。つなぎ合わせた画像はWebブラウザーが読み出せるストレージに配置しておく。スマートフォンのWebブラウザーがアクセスしてきたら、動画を自動再生するJavaScriptを埋め込んだWebページを返す、という仕組みだ。