少し前に、Linuxカーネルバージョン3のリリースの前後に、名前空間とコンテナー化の概念がlxc(Linuxコンテナー)と呼ばれるモジュールを通じて導入されました。
コンテナの背後にある考え方は、仮想マシンの考え方に似ています。たとえば、仮想化では、KVMやVMwareなどを実行しているサーバー(「ホスト」)があります。その下で実行されているマシンはゲストと呼ばれます。これらは完全に自己完結型のコンピューターであり、ホスト上で実行されます。
コンテナは、この概念を次のレベルに引き上げます。コンテナは、特に開発者(およびシステム管理者)がアプリケーションまたはサービスを迅速にデプロイするのに役立ちます。コンテナは、通常のLinuxプロセス(ユーザースペース内)として実行される非常に小さなLinuxマシンです。 )。平均的なLinuxサーバーのサイズはギガバイトであり、あらゆる種類のハードウェアなどに対応する便利なドライバーが豊富なカーネルを備えています。逆に、コンテナのサイズはわずか数百メガバイトです。 VMは数分で起動し、コンテナは目的のアプリケーションを含めて数秒以内に起動します。通常のLinuxアプリケーションの実行と同じように実行されます。つまり、psコマンドを使用して確認できるプロセスとして実行されます。
以下のCoreOSの関係者の図は、コンテナとオペレーティングシステムの関係をよく示しています。上部には、Java、nginxウェブサーバーなど、想像できるすべての通常のサービスを実行している通常のLinuxサーバーが表示されています。また、他にもいくつかのアプリケーションが実行されている可能性があります。
図2に、コンテナ化を対象としたオペレーティングシステムの例を示します。実行中のsshサーバーなど、限られた最小限のアプリケーションしかありません。他のすべてのアプリケーションは、完全に分離されたコンテナ内で実行されています。
儚い存在
コンテナーは、本質的に単一の目的で作成されるのが理想的です。JBossとPostgreSQLを使用するアプリケーションがあると想像してください。 JBossとPostgreSQLの両方のコンポーネント用のコンテナがある可能性があります。 2つのコンテナは互いに分離されていますが、リンクされている可能性があるため、相互に通信できます。コンテナも一時的なものになるように設計されています。目的が達成されたら、それを吹き飛ばすと、いつでも数秒で別のコンテナをスピンアップできます。これは、コンテナ内に保存されているデータがないことも意味します 持続的。データベースやWebサイトなどのデータを残しておきたい場合は、それらをホストサーバー上のエクスポートされたストレージボリュームに配置できます。セキュリティのベストプラクティスでは、ベースイメージを新しいパッチまたはセキュリティ強化手順で更新してから、アプリケーションをロールオンします。この後、先週からコンテナを破棄し、次の週には新しい、より安全なコンテナを使用します。
コンテナーはSaaS全体(サービスモデルとしてのソフトウェア)に最適であり、開発者と運用スタッフがより友好的な方法で共同作業できるようにします(DevOpsの方法を読んでください)。しかし、ここで先を行くのはやめましょう。ツールは文化的な問題を解決するものではありません。それはまったく「別のWebサイトの別のトピックです!
Docker
Dockerはしばらく前から存在しています。 Dockerは、lxcでは不可能だった使いやすさをLinuxに取り入れました。開発者は、ラップトップでDockerコンテナを起動するだけで、他の場所のサーバーでもまったく同じように動作することが保証され、非常に簡単に動作することがどれほど強力であるかを理解すると、すぐに簡単になりました。
Dockerには批評家がいます(coreOSチームのように)Dockerは十分に安全ではないと信じており、商業化されすぎています(そのため、Dockerの競合相手としてrktを作成しました)が、Dockerにはアマゾンやグーグルのように、あなたが期待する企業だけでなく、膨大な数のフォロワーがいます。
続きを読む
コンテナ化の詳細については、次のWebサイトを参照してください。
LinuxContainers.org
Docker:Dockerとは何ですか?
アマゾンAWS: コンテナ?
Rkt(ロケットと発音)、CoreOSから