Dockerの誤解と神話。識者が語るDockerの使いどころとは? Docker座談会(前編)

2016年2月22日(月)
高橋 正和
DockerについてはThinkITでもこれまで何度か解説してきた。今回はDockerを仕事で扱っている方々に、Dockerをどう使っているか、どう使うのがよいかについて、座談会形式で話していただいた。(※この座談会は2015年に実施されたものです)

パネリストは4名。SIerからはTIS株式会社の松井暢之氏。サービス事業者からはさくらインターネット株式会社の横田真俊氏。Dockerを採用した製品を出しているRed Hatからレッドハット株式会社の平初氏。公式パートナー企業であるクリエーションライン株式会社の前佛雅人氏。4名それぞれが異なる視点から、Dockerについて語った。

前編である今回は、それぞれ自分および周辺でDockerを使っているか、そこからわかったDockerの使いどころは、といったテーマでお送りする。

Dockerをどう使っている?

まずは自己紹介を。ご自身とDockerとの関係をまじえてお話しください。

松井:TIS株式会社の松井です。われわれはSIerですので、お客様の悩みを解決するのが役割です。Dockerについても、何ができて何ができないか、どこにメリットがあってどこが危険なのか、といったことを調べようとしているところです。あとは個人的に、Dockerのソースを読んだりもしています。

TIS株式会社 松井 暢之氏

:レッドハット株式会社でクラウドエバンジェリストをしている平です。Dockerとの関わりは2点。1つは、RHEL(Red Hat Enterprise Linux)にDockerが含まれていること。もう1つは、OpenShiftのコアコンポーネントとしてDockerを利用していることです。つまり、Dockerのコアテクノロジーと、PaaSとしての味付けの、両面を見ている立場です。

レッドハット株式会社 平 初氏

前佛:クリエーションライン株式会社の前佛です。テクノロジー・エバンジェリストの肩書で、DockerやHashiCorp製品などの調査・普及活動をしています。ちなみに、会社としてもDocker社公認のトレーニングパートナーです。

クリエーションライン株式会社 前佛 雅人氏

横田:さくらインターネット株式会社の横田です。クラウド開発室という、主に「さくらのクラウド」を作っている部署にいて、私は開発以外の企画や広報の支援などをしています。Dockerとの関わりは、われわれはIaaSを提供しているので、コンテナーやDockerについて情報収集をしている立場です。コンテナーを提供できないかという調査もしています。

さくらインターネット株式会社 横田 真俊氏

では本題に入ります。まず、Dockerは何がいいのか、あるいはどういうことには向かないか。実際に仕事で関わっている立場から語ってください。

松井:SIerをやっていて、最近はお客様からDockerという言葉が出てくるようになりました。とあるお客様からは、Solarisコンテナーで動いているシステムが古いので乗り換えたい、そのためにDockerはどうかと具体的な話を聞かれました。一方、「Dockerってどう?」と漠然とした話をいただいて、お客様の環境でしたらこう使えます、という話をすることもあります。
実案件まではまだありません。アプリケーションが対応していないと使えない、という話になることが多い。Dockerでは、いままでのアプリをそのまま使おうとすると、失敗すると思います。

前佛:無理をしてDockerを入れるのは違うと思いますね。Docker社が、仮想化を置きかえるというような見せ方をしていたのが誤解を招いているかも(笑)
使いどころとしては、クリエーションラインではデザイナーさんが使っています。DjangoのWebアプリケーション環境を作るのに、いままではエンジニアが用意しなくてはならなかったのが、Dockerを使って自分たちでできるようになりました。

松井:そうした使い方でいうと、私のチームではツールを開発してオープンソースで公開しているのですが、そのテスト環境にDockerを使っています。仮想マシンやAWSでは、環境を起動するまでに時間がかかるし、並列テストすると数がいるので、Dockerが向いています。動かしてすぐ環境を捨てられますし。

横田:立ち上げたらすぐ捨てる前提というのは、みなさんそういう使い方ですね。さくらインターネットでは、サーバーをPXEブートでディスクレスで立ち上げて、Dockerを動かして、すぐ環境を捨てるという使い方をけっこうしています。

:Red Hatでは社内にDockerのレジストリがあって、社内であれば誰でも使えるようになっています。特に社内のサポートスタッフが製品の問題を解決するときに、Dockerを使えば周辺のアプリケーションを迅速に展開できる。商用アプリや認証サーバーなどをDockerで動かして、それを使って対象のミドルウェアを検証する、といった場合です。アプリケーションのポータビリティと再現性が、Dockerによってもたらされるのは、仮想化と違うメリットです。
お客様の例としては、とあるECサイトがあります。仮想マシンで動かしていたインフラを、アプリケーションをすべて見直して、およそ1年前から、数百のDockerコンテナーがサービスを支えています。サービスに投入するのも切り戻しも速くできるのが、Dockerの真価だと思います。

松井:開発や運用のプロセスがいままでどおりのまま、仮想マシンのかわりにDockerというのは無理、というのは、そう思います。本当に使いたいなら、全部考えなおす必要がある。やりたいことの出発点が違う。

:そのほか、負荷テストでロードジェネレーターを作るとき、同じプログラムをパラメータも同じでたくさん起動するのに、Dockerが使えます。仮想マシンでもちょっと面倒ですし、いっせいに止めるという場合に仮想マシンだとその仕組みを作らないといけない。

Dockerを使うにはアプリケーションや業務プロセスを変える

仮想マシンとDockerの使い方の違いについて、より詳しく教えてください。

:たとえると、仮想化技術はサイロで、動物をたくさん飼えます。それに対してDockerは小屋で、動物を一匹だけ飼うことができるものです。小屋はサイロの中でもそうでなくてもいい。
つまり、仮想マシンはたくさんプロセスを動かせるのに対し、Dockerは1コンテナー1プロセスで動かすのがうまくいくようになっています。そのため、粒度を把握してからDockerに移すことを考えるのがよいと思います。

松井:あと、アプリケーションの作り方が、いつ捨ててもいつ増やしてもいいようなイミュータブルになっていれば、Dockerは使いやすい。
Tomcatで動作するような一般的なWebアプリですと、セッションレプリケーションの仕組み上、増やすときにどう設定するかの問題があって、そういうものだとハマる。

横田:クラウドネイティブなアプリケーションの作り方がよく言われますよね。ステートレスな作り方にするなど。そのように設計していないと難しい。

松井:本番環境では、そうです。なので、開発環境を簡単に立ち上げる用途なら使いやすい。ただ、お客様に「開発環境だけで」と言ってもお金を出してくれないのが難しいですね(笑)

前佛:私はどちらかというと、個人でDockerを使っていますが、一番いいと思うのは速さですね。コンテナーがすぐ立ち上がる。これまでの仮想化と比べて断然速く、何分間も待たされていたのが、すぐ立ち上がるようになる。Web系や個人はうれしい。
企業でも、その速さが業務フローを考えなおすいいきっかけになるのではないかと思います。速いと、開発のやりかたも運用のやりかたも変わってくる。そこから逆算して、組織も変えましょう、という話につながるんじゃないかと思います。

横田:個人や開発ですと、Jenkinsを使うときなど、仮想マシンのかわりになるのかも。楽ですし。

松井:Jenkinsは公式イメージがある※1ので、動かすのが楽ですね。

横田:JenkinsやWordpressなど、公式なイメージが増えてきましたね。

※1 編注:Jenkinsのほか、 様々な公式イメージがDocker Hub上で共有されている。

セキュリティは用途ごとのコスト対効果しだい

松井:ただ、Docker Hubにあるイメージは、自分個人では使えるが、お客様には使えない。お客様のところでとなると、Red HatのRHELイメージなどをベースに、自分でイメージを作ると思う。

横田:使う規模や用途によるんじゃないかと思います。ちょっとブログ立ち上げるということなら、オフィシャルなWordpressをdocker runするのでいいじゃないかと。一方、それとは違う世界もあります。企業の規模や世界によって、どのぐらいのセキュリティが必要になるかが違ってくる。

:Dockerの評価できるところに、ローカルにレジストリを作る手段を用意していることがあります。責任分界点をきちんと切れる。

松井:AWSを使うのでも、ちゃんと使う場合、誰が作ったかわからないAMIは使わない。それとあまり変わらないのかなと思います。そこはコスト対効果で、どこまでコストをかけるか。個人であれば面白ければやってみようというのはありですし、一方それを企業で提供するかどうかは別問題です。
Docker社も、Dockerプロセスがrootで上がっているという問題など、セキュリティは気にしているようです。

:プロセスの問題は、SELinuxなどの強制アクセス制御(MAC)と組み合わせることでカバーする方向になると思います。また、現時点で確実に分離するには、テナントごとに仮想マシンを作って分離して、その上でコンテナーを動かすのが安全です。

松井:ハイパーバイザーで分離するのは現実的ですね。最悪、プロセスが暴走しても、影響は自分だけですし。ただ、エンタープライズではそれでいいかと思いますが、PaaSだとそれではリソース効率が落ちてしまいますね。

横田:PaaSの場合は、コンテナーはPaaSベンダーのコントロール下になるので、ある程度は安心なのかなあ、というのはありますね。
一方で、ユーザーがコンテナーをそのまま渡して動かせるPaaSもありますが、それだとフォーク爆弾(プロセスが高速に増殖し続ける状態)とか恐いよね、という話もあります。まあそういうPaaSベンダーは自社でいろいろ開発しているので、問題はないかと思いますが。

ちなみに、さくらインターネットでそういったサービスを計画していたりはしませんか?

横田:企画レベルでは、コンテナーのホスティングを検討しています。docker runしてコンテナーが動くという、Dockerを使う人のホスティングです。そこから下のOS以下は、ユーザーは見なくていい。

Dockerの性能はどう?

実際に使ってみて、Docker上で動かす場合の性能はどうでしょうか。

松井:われわれでプログラマーが、ストレージドライバーとディストリビューションごとにI/O性能を検証※2しました。やはり生より遅い。ただ、正確なところは、きちんとIOPSを計測しないとわからない。

※2 編注:ストレージドライバは、「Dockerコンテナのパフォーマンス劣化とチューニング」、ディストリビューションの性能比較は、「DockerとLinux OSのリソース共有状況の調査」に詳しい

どのストレージドライバーが速いでしょうか。

松井:測ってみないと確かなところは言えませんね。RHELはDevice Mapperでしょうか?

:Device Mapperのストレージドライバーには2種類あります。ファイルシステム上にディスクイメージを作ってDevice Mapperでマッピングするタイプと、直接LVMボリュームグループをマッピングして作るタイプです。このうち、後者でないと性能が出ません。ちなみにデフォルトでAtomic Hostは後者ですが、RHEL 7は前者です。

松井:aufsはほぼchrootなので、あまりオーバーヘッドなさそうかなと思います。ただ、そのへんは、やりたいことによって変わりますね。WebサーバーはI/OよりメモリとCPUで性能が決まるというように、使い分けかなと。

:セオリーとしては、ファイルの配信などは、Dockerコンテナーに入れるのではなく、オブジェクトストレージからというのが、キレイなイメージにするコツです。

松井:エフェメラル(短命)なデータはDockerに接続したストレージでいいんでしょうけど、永続化したいデータはそこに置かなくていいじゃないかという気はします。使い分けかなと。

:いままでNASだったものをオブジェクトストレージに変え、DBはDBaaS(DB as a service)のようなものに変えるというのが、コンテナーをきれいに構成にすることになると思います。あるいは、データベースは仮想マシンとか。
コンテナーをサービスとして提供しているクラウドプロバイダーは、オブジェクトストレージのサービスもやってますし、やっているところはDBのサービスもしていますし。

松井:Dockerは、もともとPaaSのためのdotCloud※3のシステムが元ですからね。

※3 編注:Docker社の前身であるdotCloud社が提供していたPaaSのクラウドサービス。現在はcloudControl社に売却済み。

Dockerの誤解と神話

前佛:Dockerにはいろいろ誤解がありますよね。Dockerを使うとみんな速くてカッコいいというような。

松井:昔の「クラウド」も同じような感じでしたね。

前佛:たとえば、「ポータビリティ」も独り歩きしていて、どこでも自由に持っていけるかのような誤解が先走っています。Windows Serverもコンテナーに対応して、これでLinuxにもWindowsにも持っていける、といった誤解です。

:Dockerのポータビリティは、Intel x86_64アーキテクチャのLinuxでのポータビリティであって、ARMやPOWERはどうするんだという話になる。

横田:Raspberry PiでもDockerがあって、動くんですが、ほとんどイメージがない。Raspberry PiのようなARMはまだしも、ほかのCPUはもっと厳しいですね。なんでも動くといっても、前提がある。
Dockerのポータビリティとしては、AWSやいろいろなクラウドプロバイダーがDockerのサービスをやっていて、そこでは便利ですね。去年、前佛さんと私で、ニフティクラウドで立ち上げたイメージをさくらのクラウドで立ち上げ、というのはデモしました。だだ、そういう話が独り歩きして拡大解釈されちゃうと困るというのはある。

前佛:手元の開発環境と本番環境でのポータビリティというのが、Dockerのポータビリティの典型例ですね。
Dockerを使うとみんないいという誤解については、想像ですが、仮想化からクラウドに変わってうまくいった成功体験をお持ちの方のほうが、「コンテナーを使えばもっと」と誤解しているんじゃないかという気もしています。

横田:何年か前の「クラウド」や、何年か前の「Linux」も、同じような注目からいまに至っていると思うので、「Docker」もきっとそのように普及してくるんでしょうかね。昔は企業がLinuxを入れただけで「日経コンピュータ」の記事になったし、ちょっと前は銀行がパブリッククラウドを使って記事になった(笑)。たぶん、4〜5年したら、銀行がDockerを使ったと記事になるんですよ(笑)

後編に続く

フリーランスのライター&編集者。IT系の書籍編集、雑誌編集、Web媒体記者などを経てフリーに。現在、「クラウドWatch」などのWeb媒体や雑誌などに幅広く執筆している。なお、同姓同名の方も多いのでご注意。

連載バックナンバー

運用・管理

事例から考えるDockerの本番利用に必要なこと

2016/5/26
本番環境へのDockerの導入が進むために必要な条件を、各社の事例を元に考察する。
運用・管理技術解説

Dockerコンテナ環境のバックアップツール「Convoy」を使う

2016/3/30
Docker環境のバックアップツールとして注目されるConvoyのインストールから使用方法までを解説します。
運用・管理技術解説

CoreOS&Docker環境においてOracle Database 11g Release 2をインストールするためのポイント

2016/3/23
データベースの定番であるOracle Databse 11g Release 2を、コンテナ環境に導入する手順を紹介します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています