Dockerとコンテナーを使用する理由

1981年に出版された本、  Nailing Jelly to a Treeは、ソフトウェアを「曖昧でしっかりと把握するのが難しい」と説明しています。それは1981年に真実であり、それ以来40年近くも真実です。ソフトウェアは、購入したアプリケーションであろうと、自分で作成したアプリケーションであろうと、展開、管理、実行が困難なままです。

Dockerコンテナーは、ソフトウェアを把握する方法を提供します。Dockerを使用して、アプリケーションのデプロイとランタイムの問題(ネットワーク上での公開方法、ストレージとメモリとI / Oの使用の管理方法、アクセス許可の制御方法)が処理されるようにアプリケーションをラップできます。アプリケーション自体の外部で、すべての「コンテナ化された」アプリ間で一貫した方法で。Dockerコンテナーは、DockerランタイムがインストールされているOS互換ホスト(LinuxまたはWindows)で実行できます。

Dockerには、この便利なカプセル化、分離、移植性、および制御以外にも、多くの利点があります。Dockerコンテナーは小さい(メガバイト)。彼らは即座に始まります。それらには、バージョン管理とコンポーネントの再利用のための独自の組み込みメカニズムがあります。これらは、パブリックDockerHubまたはプライベートリポジトリを介して簡単に共有できます。

この記事では、Dockerコンテナーを使用して、ソフトウェアのビルドとデプロイの両方を簡単にする方法について説明します。コンテナーが対処する問題、コンテナーが対処する方法、問題に対する正しい答えである場合とそうでない場合です。

Dockerコンテナの前

何年もの間、エンタープライズソフトウェアは通常、「ベアメタル」(つまり、基盤となるハードウェアを完全に制御するオペレーティングシステムにインストールされる)または仮想マシン(つまり、基盤となるハードウェアを共有するオペレーティングシステムにインストールされる)のいずれかに展開されてきました。他の「ゲスト」オペレーティングシステムと)。当然のことながら、ベアメタルにインストールすると、ソフトウェアの移動や更新が非常に困難になります。これは、ITがビジネスニーズの変化に迅速に対応することを困難にする2つの制約です。

その後、仮想化が登場しました。仮想化プラットフォーム(「ハイパーバイザー」とも呼ばれます)により、複数の仮想マシンが単一の物理システムを共有でき、各仮想マシンは、独自のオペレーティングシステム、ストレージ、およびI / Oを備えたシステム全体の動作を分離してエミュレートします。 。VMのクローン作成、コピー、移行、スピンアップまたはスピンダウンを行って需要に対応したり、リソースを節約したりできるため、IT部門はビジネス要件の変化により効果的に対応できるようになりました。

より多くのVMをより少ない物理マシンに統合できるため、仮想マシンもコスト削減に役立ちました。古いアプリケーションを実行しているレガシーシステムをVMに変換し、物理的に廃止して、さらに多くのコストを節約することができます。

しかし、仮想マシンにはまだ問題があります。仮想マシンは大きく(ギガバイト)、それぞれに完全なオペレーティングシステムが含まれています。非常に多くの仮想化アプリのみを単一のシステムに統合できます。VMのプロビジョニングにはまだかなりの時間がかかります。最後に、VMの移植性は制限されています。ある時点を過ぎると、VMは、動きの速い企業が要求するような速度、俊敏性、および節約を実現できなくなります。

Dockerコンテナのメリット

コンテナはVMと少し似ていますが、はるかに具体的で詳細な方法で機能します。これらは、単一のアプリケーションとその依存関係(アプリの実行に必要なすべての外部ソフトウェアライブラリ)を、基盤となるオペレーティングシステムと他のコンテナーの両方から分離します。コンテナ化されたすべてのアプリは、単一の共通のオペレーティングシステム(LinuxまたはWindows)を共有しますが、それらは相互に、およびシステム全体から区分されています。

Dockerコンテナーの利点は、多くの場所で見られます。Dockerとコンテナーの主な利点のいくつかを次に示します。

Dockerにより、システムリソースをより効率的に使用できます

コンテナ化されたアプリのインスタンスは、仮想マシンよりもはるかに少ないメモリを使用し、起動と停止が速く、ホストハードウェアにはるかに高密度にパックできます。これらはすべて、ITへの支出を削減することになります。

コスト削減は、使用中のアプリとそれらがどれほどリソースを消費するかによって異なりますが、コンテナーは常にVMよりも効率的に機能します。同じワークロードを実行するために必要なオペレーティングシステムインスタンスがはるかに少ないため、ソフトウェアライセンスのコストを節約することもできます。

Dockerにより、ソフトウェア配信サイクルが高速化されます

エンタープライズソフトウェアは、変化する条件に迅速に対応する必要があります。つまり、需要を満たすための簡単なスケーリングと、ビジネスの必要に応じて新しい機能を追加するための簡単な更新の両方を意味します。 

Dockerコンテナーを使用すると、新しいビジネス機能を備えた新しいバージョンのソフトウェアを簡単に本番環境に移行でき、必要に応じて以前のバージョンにすばやくロールバックできます。また、ブルー/グリーン展開などの戦略の実装も容易になります。

Dockerはアプリケーションの移植性を可能にします

エンタープライズアプリケーションを実行する場所が重要です。ファイアウォールの背後で、物事を近くに安全に保つためです。またはパブリッククラウドで、パブリックアクセスを容易にし、リソースの弾力性を高めます。Dockerコンテナーは、アプリケーションの実行に必要なすべてのもの(およびそれらのみ)をカプセル化するため、アプリケーションを環境間で簡単にシャトルできます。Dockerランタイムがインストールされているホスト(開発者のラップトップまたはパブリッククラウドインスタンス)は、Dockerコンテナーを実行できます。

Dockerはマイクロサービスアーキテクチャに輝いています

軽量でポータブルな自己完結型のDockerコンテナーを使用すると、先進的な方針に沿ってソフトウェアを簡単に構築できるため、昨日の開発方法で明日の問題を解決しようとはしません。

コンテナが容易にするソフトウェアパターンの1つは、アプリケーションが多くの疎結合コンポーネントで構成されるマイクロサービスです。マイクロサービスは、従来の「モノリシック」アプリケーションを個別のサービスに分解することで、基幹業務アプリのさまざまな部分を個別にスケーリング、変更、およびサービスできるようにします。必要に応じて、個別のチームと個別のタイムラインでビジネス。 

コンテナーはマイクロサービスを実装する必要はありませんが、マイクロサービスのアプローチや一般的なアジャイル開発プロセスに完全に適しています。

Dockerコンテナが解決しない問題

コンテナについて最初に覚えておくべきことは、どのソフトウェアテクノロジにも当てはまるアドバイスと同じです。これは特効薬ではありません。ドッカーコンテナそれ自身では、すべての問題を解決することはできません。特に:

Dockerはセキュリティの問題を修正しません

コンテナ内のソフトウェアは、デフォルトではベアメタルで実行されるソフトウェアよりも安全ですが、ドアがロックされている家は、ドアがロックされていない家よりも安全であると言っているようなものです。近所の様子、泥棒を誘惑する貴重品の目に見える存在、そこに住む人々の日常生活などについては何も述べていません。コンテナはアプリにセキュリティのレイヤーを追加できますが、それはコンテキスト内でアプリを保護する一般的なプログラムの一部としてのみです。

Dockerはアプリケーションを魔法のようにマイクロサービスに変えません

既存のアプリをコンテナ化すると、リソースの消費が減り、デプロイが簡単になります。ただし、アプリのデザインや他のアプリとの相互作用を自動的に変更するわけではありません。これらのメリットは、すべてをコンテナーに移動するという義務だけでなく、開発者の時間と労力によってのみもたらされます。

昔ながらのモノリシックまたはSOAスタイルのアプリをコンテナーに入れると、最終的には古いアプリがコンテナーに入れられます。それはあなたの仕事にそれ以上有用にはなりません。どちらかといえば、それはそれをあまり役に立たないものにするかもしれません。 

Dockerは仮想マシンの代わりにはなりません

コンテナの永続的な神話の1つは、VMを時代遅れにするというものです。以前はVMで実行されていた多くのアプリをコンテナーに移動できますが、すべてのアプリが移動できる、または移動する必要があるわけではありません。たとえば、規制要件が厳しい業界では、VMはコンテナよりも分離度が高いため、コンテナをVMに交換できない場合があります。

Dockerコンテナの場合

エンタープライズ開発作業は、隠れたものであり、変化への反応が遅いことで有名です。エンタープライズ開発者は、ITによって課せられた制限、ビジネス全体からの要求など、常にそのような制約に逆らいます。Dockerとコンテナーは、開発者が切望する自由度を高めると同時に、変化するビジネス条件に迅速に対応するビジネスアプリを構築する方法を提供します。