今はあまり意味がないかもしれませんが、今後もしつかうことがあるかもしれない(ないかもしれない) Dockerデプロイについて、少し書きます。
Docker オーケストレーションツールって?
Dockerは、そもそもLinuxのcgroupやchroot相当の方法で、システムコールをフックして、プロセスをあたかも仮想マシンレベルに隔離できるようにしたものです。
でもそれだけじゃプロセスごとに扱いめんどくさいよね、って話です。
数百台ののコンテナを、ネットワークや冗長、スケールアウトも考えて、実際の業務に簡単に使えるようにしたのがオーケストレーションツールです。コンテナを指揮するオーケストラ的な意味合いです。
OpenstackやCloudstackのDockerコンテナ版、なんて言ったらわかりやすいかもしれません。
たとえば、docker-composeやkubernetesなどがこれにあたります。
openshift と openshift origin について
Openshiftは、ことしか去年にRedhatが公開したSaaS型のオーケストレーションツールです。
SaaSなので、AWSのようにRedhatにお金を払ってクラウド上のコンテナに対してマウスでぽちぽちサーバー立てたりデプロイしたりします。
そして、Redhatがこれをコミュニティ向けに公開したものがOpenshift originです。
自分たちのサーバで動かすことができるOSSで、一度構築してしまえばOpenstackと同じ感覚で操作ができます。
技術的な構成
Openshift(以下、長いのでos)は、内部的にはkubernetes(以下、k8s)とプロジェクト アトミックを使用しています。k8sはgoogleが開発したDockerのオーケストレーションツールです。
でもただGoogleをパクっただけではなく、法人が本番サーバスに使えるように機能がたくさん追加されています。
Atomicは、軽量なOSの名前で、とても軽量です。コンテナのOSとして使われます。
構成
(画像を http://nekop.github.io/slides/OpenShiftJJUG.html#/3 からお借りしました)
構築したos全体を「クラスタ」と呼びます。
物理的なサーバー、もちろん仮想マシンでもいいですが話がごちゃごちゃになるのでここでは物理サーバーとします。
osのソフトが動作してる一台一台のマシンを「ノード」と呼びます。
コンテナはそのまま「コンテナ」と呼ばれます。
コンテナはだいたい1プロセスが動作しています。そして、コンテナの空間を接続したもの、つまりストレージとネットワークをほぼ共有したものを、ポッドと呼びます。これが従来のVMみたいなものです。
このVMは、基本的に永続ストレージをのぞいて内部のコンテナとともに作成、破棄を繰り返されます。
これが、今までと違うライフサイクルです。いつでもデプロイ用のマシンは破棄されてもいいように、また起動されてもいいようにという概念です。
そして、複数ポッドを作ることができます。作られたポッドはノードに分散され、一つ物理マシンが壊れても他のノードで自動的にポッドが複製されます。
複数作るポッドの数は設定でき、簡単に言えば全く同じマシンの冗長構成ができます。
そして最後に、複数のポッドが冗長されている時に、まとめてフローティングなグローバルipを割り振ったりtcpでロードバランシングするものが、「サービス」です。
以上のコンポーネントが組み合わさりosは動作します。
何が嬉しいか
- インフラas a Codeです。ポッドの状態やコンテナの状態をすべてJSONファイルで設定できます。
- コンテナは起動も終了もとても早いです。内部的にはプロセスkillとかわりません。
- 素早くスケールアウトでき、またノードが壊れた時の復旧も早いです。
まとめ
こんな感じにさらっと書いて見ました。詳しいことは英語の公式ドキュメントが一番いいと思います。
今までDockerは本番には使えないと言われてきましたが、実際こんなものが開発されているのを知ってみるとこれからデプロイの幅が広がると思います。