DockerCon Docker は今朝シアトルで DockerCon 2016 カンファレンスを開始し、一連の発表を行いました。OS X および Windows Docker クライアントはベータ ソフトウェアとして公開され、誰でも試用できるようになります。また、Docker 1.12 ではすぐに使用できるオーケストレーションが導入され、Amazon の AWS および Microsoft の Azure との統合も進行中です。
まず、OS XとWindowsのクライアントです。これらはプライベートベータ版として約7万人の開発者に提供されていましたが、ソフトウェアへのアクセスには丁寧なリクエストが必要でした。徹底的にテストされ、クラッシュも修正された後、コードは誰でも試用できるようになりました。クライアントを使えば、ラップトップやワークステーションでDockerコンテナを簡単かつシームレスに取得、作成、起動できます。
OS XクライアントはAppleの組み込みハイパーバイザーフレームワークを使用しています。そう、AppleはひっそりとデスクトップOSにハイパーバイザーAPIを組み込んでいたのです。以前はOracleのVirtualBoxとDockerを使う必要がありましたが、これはかなり面倒な設定で、OracleがVBoxをいじらないことを前提としていました。しかし今、クライアントはOS Xアプリとしてきちんとパッケージ化されており、基盤となるフレームワークを使って、ターミナルでキーボードをひらひらと叩くだけでLinuxコンテナを起動できます。
Appleのハイパーバイザーフレームワークは、Intel搭載MacのVT-x仮想化ハードウェアへのインターフェースを提供し、仮想マシンと仮想CPUの作成、処理の割り当て、シャットダウンを可能にします。Dockerは、この上に薄いハイパーバイザーレイヤーを提供し、Linuxカーネルの実行環境を構築します。そして、その上にソフトウェアコンテナが配置されます。Windowsでは、DockerはMicrosoftのHyper-Vを使用します。
興味深いことに、Dockerの創業者兼CTOであるソロモン・ハイクス氏はThe Registerに対し、1月にDockerに買収されたUnikernel Systemsの専門家が両クライアントの開発に携わったと語った。英国ケンブリッジのスタートアップ企業であるUnikernel Systemsには、元Xenハイパーバイザープログラマーが所属しており、チームはハイパーバイザー上のサンドボックスで実行される単一のアドレス空間にカーネルとマイクロサービスを統合するオールインワンのソフトウェアスタックの開発に取り組んでいる。
「OS XとWindowsのクライアントは、ソフトウェアを基盤となるハイパーバイザーと統合するために、内部で多くのユニカーネル技術を使用しています」とHykes氏は語った。
クライアント側の作業の80%はユニカーネル技術です。ネイティブシステムの機能を可能な限り活用するようにしています。macOSには独自のハイパーバイザーがバンドルされているので、それを使用していますが、それでも上に薄いハイパーバイザーを開発する必要があります。WindowsにはHyper-Vがあるので、それを使用しています。VirtualBoxのバンドルも検討しましたが、バンドルするには大掛かりな作業でした。
OS Xクライアントのインストールは非常に簡単で、使い始めると数百MBのディスク容量を消費し、セットアップには管理者パスワードが必要です。インストール後はメニューバーのアイコンからアクセスでき、メモリ容量とCPUの数を設定できます。Dockerはユーザーインターフェースの改良にあたり、モバイルゲーム業界のデザイナーを起用したとのことです。
最初はイメージはインストールされていません。それでは、シンプルなHello Worldを起動してUbuntuイメージをプルしてみましょう。OS Xターミナルを開き、docker run --rm ubuntu /bin/echo 'Hello world' を実行してください。
ダウンロードが完了し、コンテナがビルドされると(1分ほどかかります)、Dockerによって起動され、 Ubuntu Linuxでは/bin/echo 'Hello world'が実行され、OS Xターミナルにテキストが出力されます。この部分は、私のような貧弱なハッカーの2012年中盤のCore i7 MacBook Proではほぼ瞬時に実行されます。インスタンスが起動し、コマンドが実行され、すべてが終了します。
docker イメージを使用してシステム上に存在するイメージを確認すると、小さな Ubuntu が準備完了で次のコマンドまたはワークロードを待機していることがわかります。再度取得する必要はありません。
これで、Mac上でベアメタルに限りなく近い、小型ながらも高性能なLinuxインストールが完成しました。これは、SSH接続でワンショットLinux仮想マシンに接続するのと同じように使えます。例えば、/proc/cpuinfoを開いてfree -mを実行することで、CPUとRAMの情報を確認できます。
実行間でデータを保持したい場合は、ボリュームを作成する必要があります。
もしこの時点で頭を掻きむしり、なぜこんなことにこだわる必要があるのかと疑問に思っているなら(フィリップ・K・ディックの小説の登場人物みたいに聞こえたらごめんなさい)、頭を整理してコンテナ化について考えてみてください。多くのReg読者と同じように、私もクラウドと自宅に、ビルドサーバーからVPNボックスまで、様々なタスクのために仮想システムとベアメタルシステムを構築しています。それらはすべてSSHで接続できます。では、なぜラップトップでLinuxアプリを動かすのにDockerが必要なのでしょうか?
ポイントは、ソフトウェアのコンテナ イメージ (特定のタスクを実行するために必要な依存関係とサービスの小さなバンドル) を作成し、それをローカルでテストし、他の開発者にも自分と同じ健全な環境があることを認識させながら使用させて、最終的にコンテナを展開することです。
家で4時間もある映画のディレクターズカット版ブルーレイを観ていて、その後バーに行って、テレビ用にカットされた90分版しか観ていない友達と映画について語り合うようなものだと想像してみてください。映画にはあなたが観たシーンがあるのに、友達は観ていないので、あなたの話は彼らにはほとんど意味をなさないでしょう。そして口論になり、せっかくの夜が台無しになってしまいます。
翌日、二人ともNetflixに行って同じ映画を観ると、突然すべてがうまく収まり、皆が再び幸せな気分になります。コンテナは、このソフトウェア面の問題を解決します。二人とも、同じライブラリ、ツール、そしてサービスをインストールして実行します。
オーケストレーション、つまりソフトウェアに特定の処理を実行させること
では、次のパートに移りましょう。つまり、大規模に、場合によっては数千個ものコンテナをデプロイし、管理する方法です。Docker Swarmはこれを実現するためのツールですが、メインクライアントとは別のツールです。また、KubernetesやMesosなど、サーバー上で稼働するコンテナを管理してくれるユーティリティも数多く存在します。
7 月にリリース予定の Docker 1.12 では、Swarm の機能が組み込まれ、追加のツールなしで簡単に使用できるように設計されています。
「コンテナ化でやったことと同じことをオーケストレーションでやっているんです」とHykes氏は語った。
「現在のオーケストレーションは使いやすくなく、専門家向けになっています。コミュニティから寄せられた声は、Dockerは気に入っているものの、オーケストレーションが複雑だというものです。まず、1万種類ものツールから選び、特定のモデルを選ぶ必要があります。そして、ツールやプラットフォームを選んだ後、Hello Worldのサンプルとして設定して使用するのと、本番環境で実際に使用するのとでは、実際には非常に手間がかかることに気づきます。」
「これは非常に専門的な仕事で、GoogleやUber、あるいは運用チームを雇えるような企業で働くようなエンジニアが必要です。私たちは、アプリケーションをデプロイして拡張したい人なら誰でも使えるようにしたいと考えています。」
Docker Engine 1.12 の新機能、いわゆる Swarm モードはオプションです。Kubernetes などのツールを使いたい場合は、無効にすることができます。Swarm モードは自己組織化と自己修復を実現するように設計されており、言い換えれば、ソフトウェアが自動的に設定どおりに動作し、サーバーがダウンした場合でもワークロードのバランスを再調整することを意味します。
基本的に、 docker service createを実行すると、複数のマネージャーが起動します。マネージャーはサービスをタスクに分割し、ワーカーノードに割り当てます。ワーカーノードはコンテナを実行してサービスを提供します。
(これらのサービス、タスク、コンテナは、JSON 形式を使用する分散アプリケーション バンドル (.dab ファイル) を使用してオプションで記述できます。これは実験的な機能です。DAB ファイルは Docker 1.13 で正式に導入される予定です。)
マネージャーはIPアドレスを割り当て、ワーカーが常に稼働していることを確認します。何かがダウンした場合は、所定の状態に再起動されます。サービスデプロイメントAPIが提供されるため、ソフトウェアと管理者はスウォームの設定と制御を行うことができます。また、マルチホストオーバーレイネットワーク、DNSベースのサービス検出、ラウンドロビン方式の負荷分散をすぐに利用できるルーティングメッシュ機能も備えています。
Swarmノードは、デフォルトでエンドツーエンドのTLS暗号化を使用し、ローテーション証明書と暗号化されたIDを使用して通信を保護するように設定されています。この暗号化は自動的かつサイレントに処理されます。基本的に、これがDocker Engine 1.12の特徴です。Swarmの機能をDockerに組み込み、セットアップを可能な限り自動化し、手間をかけずに行えるようにしています。
AzureとAWSの統合
ついにDockerはDocker 1.12をMicrosoft AzureおよびAmazon AWSクラウドに統合しました。これはプライベートベータ版です。アクセスはこちらからお申し込みいただけます。これらのオフプレミスシステムでは既にDockerを問題なく実行できますが、この統合により、数クリックでDocker Swarmをデプロイできます。Docker EngineノードはエンドツーエンドのTLS暗号化によって自動的に保護され、クラウドのオートスケーリング、ロードバランシング、ストレージ機能に直接アクセスできます。
以上がDockerの本日の発表の概要です。今週のDockerConでさらに詳しい情報をお伝えします。®
ブートノート
そうですね、最近は OS X ではなく macOS と呼ばれていることは知っています。Apple が実際に電話機を取り上げたときには、その変更を受け入れるつもりです。