コンテナという言葉の意味
container
con-「共に」tain「つかんで離さない」-er「人、もの」英単語 container の語源と意味 - Gogengo! - 英単語は語源でたのしく
- >何かをとどめようとするもの
- > 【名】入れもの、コンテナ
コンテナ (英: container)とは、内部に物を納めるための容器のことである。コンテナーとも呼ばれる。
コンテナ - Wikipedia
コンピュータにおけるコンテナ
商用OSの世界でも、SolarisゾーンやHP-UX Containersなどのように、コンピュータ資源を分離する「コンテナ技術」が発展していきました。ここで、コンテナという言葉が出てきます。コンテナとは船や列車などの貨物輸送で使われる容器です。一隻に大量のコンテナを積載して運ぶ貨物輸送船を思い浮かべて下さい。
なぜ貨物でコンテナが利用されるのでしょう。容器を直方体の箱にすれば船の限られたスペースにすき間なく積み上げて効率よく配置でき、異なる種類のコンテナ同士で内容物が混ざるといったトラブルも避けられます。依頼主にも管理側にもメリットがあるからです。
この「隙間なく積み上げて配置できること」と「内容物が混ざるトラブルが発生しないこと」という点が非常に重要です。コンピュータにおけるコンテナも同じ考え方です。コンピュータにおいて、一隻のコンテナ船はホストOSです。その上に載る大量のコンテナの群れには、それぞれさまざまなアプリのプロセスが稼働しています。隙間なく積まれたコンテナの群れをよく目を凝らしてみてみると、コンテナ同士はぴったりとくっついて配置されていますが、お互いのコンテナは、となりのコンテナの内容物(プロセス)は知り得ません。すなわち、ホストOSであるコンテナ船から見た人は、コンテナという分離された空間がいくつも存在するかのように見えます。これが、分離された空間=コンテナと呼ばれるゆえんです。
第4回 「Dockerのクジラロゴ」が意味するもの (2/3) - ITmedia エンタープライズ
また、船の平らな甲板にコンテナが直接触れて置かれている点も重要です。平らであるということをコンピュータに置き換えると、ホストOSとコンテナが直接触れているということは、ホストOSとコンテナの間にはハイパーバイザーのような介在者がいないことになります。すなわち、コンテナで稼働するアプリのプロセスは、ホストOSから直接起動されているのです。
コンテナの歴史
chroot が生まれた背景
一般的にアプリなどの稼働テストにおいて、実際の本番環境のファイルなどを直接作成、変更、削除するのは、非常に危険です。chroot監獄は、このような本番環境で試すと危険をともなう場合と比べ、ソフトウェアの開発やテスト環境を安全に行うことができます。当時は非力な計算機を使って、BSDなどのUNIX向けにさまざまなソフトウェアの開発が研究機関において行われていました。このような「監獄」の考え方が出現したのは、ソフトウェア開発者が1台のマシンで本番環境をシミュレートして、効率的にかつ安定的に開発を行いたいというニーズが背景にあったためです。
第1回 Dockerと「昭和54年」の深〜い関係 - ITmedia エンタープライズ
本番機と開発機を2重に持たず、本番機で開発するのは非常に危険。そこで、本番用のファイルシステムの一部を分離(隔離)するという考えが生まれた
chroot の応用例
chroot監獄は開発の場面だけでなく、システムファイルの破損や、操作ミスなどで誤ってファイルを削除してしまい、OSが起動不能になった場合に、インストールメディアのレスキューモードを使ってOSを復旧させるシーンにおいても使われています。
具体的には、インストールメディアで対象となるマシンを起動後、破損したOSのルートディレクトリを適当な名前のディレクトリ(/mnt/sysimageなど)にマウントすることに成功すれば、そのディレクトリにchrootを実行することで、破損したOSのルートディレクトリに遷移できます。これにより、起動不能だったOSのコマンド群を使えるようになり、復旧作業を行うことができます。
また、セキュリティの面においても「ハニーポット(蜜の壺/おとりサーバ)」と呼ぶクラッカー対策にchrootが利用されます。現在(2015年)では、chrootを使ったハニーポットに代わる新しいセキュリティ対策の仕組みがいろいろと研究されていますが、基本的にはchrootの考え方を踏襲しており、2015年現在でもフリーOSなどで利用されています。
第1回 Dockerと「昭和54年」の深〜い関係 - ITmedia エンタープライズ
chrootの応用例。chrootのファイルシステムの分離機能はソフトウェアの開発だけでなく、さまざまな分野で応用されている
FreeBSD Jail
2000年、オープンソース界隈であるホットなニュースが飛び交いました。
chroot監獄を大幅に発展させた機能が、フリーOSで利用可能となったのです。その名も「FreeBSD Jail(フリー・ビーエスディ・ジェイル)」です。「あるディレクトリ配下をルートディレクトリに見せる」というファイルシステムを取り扱う概念に加え、さらにアプリのプロセスIDも監獄ごとに分離できるようになりました。
このFreeBSD Jailは、監獄の中からホストOS側を見ると、ホストOSの各種資源の一部分だけがあたかもすべての資源のように見せることができる画期的なものです。FreeBSD Jailはとても軽く、洗練されたアーキテクチャとして知られており、日本やロシアで根強い人気があるFreeBSDと呼ばれるBSD系のフリーOSにおける強力なOS空間の分離機能として発展し、2015年現在でも広く利用されています。
その後FreeBSD Jailは、VIMAGEと呼ぶネットワークに関する分離機能も追加されました。
第4回 「Dockerのクジラロゴ」が意味するもの (1/3) - ITmedia エンタープライズ
Dockerが生まれた背景
Googleでのコンテナ
つまり私たちが利用するGoogleのすべてのサービスも、Googleの社内で使われているツールもすべて、すでにGoogleではDockerのようなコンテナ型仮想化技術の上で実行されているということのようです。
「We start over 2billion containers per week.」(私たちは毎週20億個以上のコンテナを起動している)とも書いてあり、Google内部ではすさまじい数のコンテナが実稼働していることになります。
いまDockerを中心にコンテナ型仮想化が話題になっていますが、Googleではすでにコンテナがあたりまえの技術になっている、ということなのでしょう。
すでにGoogleは全部のソフトウェアをコンテナに乗せており、毎週20億個ものコンテナを起動している - Publickey
Kubernetes
Kubernetesとは
Kubernetesはオープンソースの「コンテナオーケストレーション」ツールです。公式サイトのトップページにおいてもそう明示されていますが、「コンテナオーケストレーション」には明確な定義がまだありません。そこで本連載では、コンテナオーケストレーションを「コンテナ型仮想化を本番環境で活用するために必要な機能を提供すること」と定義します。(中略)
Kubernetesの起源
Kubernetesの起源をたどる際には、Googleのエンジニアが執筆したサービス管理に関する有名な論文が参考になります。この論文では、「Googleのサービスは、クラスタマネジャー『Borg』上で動作するコンテナを用いて提供されており、Borgと同様の仕組み(+Borgにおける反省を踏まえた対応策)を備えたオープンソースソフトウェアとしてKubernetesを開発した」旨が記載されています。Googleのサービスを支えている基盤と同様の仕組みを備えていることから、「KubernetesはGoogleで既にその有効性を実証済みである」という意味で大きな注目を浴びたといえるでしょう。
「Kubernetes」とは何か――コンテナ型仮想化の本番利用に向けた課題:先行事例に学ぶKubernetes企業活用の現実(1) - @IT
Kubernetesは要するに、プロセッシングのリソース管理の問題などを解決するためのオーケストレーションソフトウェアです。
HadoopからDocker、そしてKubernetesの登場 分散システムの歴史を紐解く - ログミーTech
プロセッシングだとか、ハイアベイラビリティだとかを。Kubernetesと、あとKubernetesが動作の前提とするEtcdという分散キーバリューストアをペアにして解決していくというものになりますが。
参考
- コンテナの性能分析
2011年7月1日
米国の新興クラウドベンダである「DotCloud」が、ベータ期間を終了し、正式サービスを開始しました。
DotCloudの最大の特徴は、PHPやPerl、Ruby、Java、Python、Node.jsなど複数の言語と、MySQL、PostgreSQL、Cassandra、MongoDB、CouchDB、Redisなど複数のデータベースやMemcached、RabbitMQ、Hadoopなどのさまざまなソフトウェアを開発者が自由に組み合わせてプラットフォームを構成することができ、それがクラウド上のPaaSとして提供されるという点です。(中略)
元シックスアパートの宮川達彦氏が、4月にDotCloudへ転職したことをブログで明らかにしていますが、そのエントリで宮川氏はこのように書いています。
I hope to see Perl deployments beat Ruby and Node.js on DotCloud some day :)クラウド上の言語としてPerlが使えるプラットフォームはこれまでほとんどありませんでした。果たして、新しい世代のPaaSではどのような言語やデータベースが主流となるのでしょうか?
プログラミング言語やデータベースが選べる新世代PaaS「DotCloud」が正式サービス開始
1番のポイントは、PDBがいくつあってもインスタンスは1つだけというところです。PDBごとにメモリやプロセスを割り当てていたのでは、従来型のデータベースを複数作成する場合と同じで無駄なリソースを多く使用してしまいます。インスタンスを各PDBが共同利用することで、リソースを節約しようというのがOracle Multitenantの考え方なのです。こうして集約率を高め、さらにPDBとして独立性を持たせることで、スキーマ名の競合やセキュリティの見直しといった統合にありがちな課題まで、まとめて解決することができます。
徹底解説!Oracle Database 12cのすべて Vol.1 | アシスト
Webコンテナ(ウェブコンテナ、Web container)とは、Java Platform, Enterprise Edition (Java EE) アーキテクチャのWebコンポーネント規約を実装するソフトウェア[1]。Java Servletの実行環境となることからServletコンテナ(サーブレットコンテナ、Servlet container)とも呼ばれる。
この規約では、コンピュータセキュリティ、並列性、ライフサイクル管理、トランザクション処理、デプロイやその他のサービスを含むWebコンポーネントの実行環境を規定している。WebコンテナはJava EEプラットフォームAPIを利用したJSPコンテナとしての機能も提供する。
Webコンテナ - Wikipedia
- コントロールプレーン/データプレーンの語源
データプレーン、コントロールプレーン
Dockerのネットワークを理解するためのネットワーク技術入門 – PAYFORWARD
Docker container networking:overlay networkで出て来る。
Docker EE networking features
Docker container networking:overlay network
The following two features are only possible when using Docker EE and managing your Docker services using Universal Control Plane (UCP):
上のスライドの黒塗り箇所が YouTube では見れる