Dockerアーキテクチャ:なぜそれが重要なのですか?



このブログでは、Dockerアーキテクチャとそのさまざまなコンポーネントについて説明しています。人気の理由を教えてくれるDockerの機能を強調しています。

私たちの多くは、Dockerがの不可欠な部分であると信じています 。したがって、この素晴らしいツールの背後には、素晴らしいアーキテクチャが必要です。このブログでは、Dockerアーキテクチャについて知っておく必要のあるすべてのことを取り上げます。これらは私がここで議論するポイントです:

  1. 従来の仮想化とDocker
  2. Dockerのワークフロー
  3. Dockerアーキテクチャ

従来の仮想化とDocker

VM(仮想マシン)とは何ですか?

VMは、ハードウェアサーバーをエミュレートする仮想サーバーです。仮想マシンは、システムの物理ハードウェアに依存して、アプリケーションをインストールするのとまったく同じ環境をエミュレートします。ユースケースに応じて、システム仮想マシン(OS全体をプロセスとして実行し、仮想マシンの代わりに実マシンを使用できる)を使用することも、仮想マシンでコンピューターアプリケーションのみを実行できる仮想マシンを処理することもできます。環境。





以前は仮想マシンを作成していましたが、各VMには多くのスペースを必要とするOSがあり、重くなりました。

Dockerとは何ですか?

Dockerは、コンテナーと呼ばれるソフトウェア開発ソリューションを提供するオープンソースプロジェクトです。 Dockerを理解するには、コンテナーとは何かを知る必要があります。による Docker コンテナは、それを実行するために必要なすべてのものを含むソフトウェアの軽量でスタンドアロンの実行可能パッケージです。



コンテナーはプラットフォームに依存しないため、DockerはWindowsベースとLinuxベースの両方のプラットフォームで実行できます。実際、必要に応じてDockerを仮想マシン内で実行することもできます。 Dockerの主な目的は、分散アーキテクチャでマイクロサービスアプリケーションを実行できるようにすることです。

Javaコードをコンパイルする方法

仮想マシンと比較すると、Dockerプラットフォームは、リソースの抽象化をハードウェアレベルからオペレーティングシステムレベルに移動します。これにより、コンテナのさまざまなメリットを実現できます。アプリケーションの移植性、インフラストラクチャの分離、および自己完結型のマイクロサービス。

つまり、仮想マシンはハードウェアサーバー全体を抽象化しますが、コンテナーはオペレーティングシステムカーネルを抽象化します。これは仮想化に対するまったく異なるアプローチであり、結果としてはるかに高速で軽量なインスタンスになります



vm vsdocker-dockerアーキテクチャ-edureka

Dockerのワークフロー

まず、Docker Engineとそのコンポーネントを見て、システムがどのように機能するかについての基本的な考え方を理解しましょう。 Docker Engineを使用すると、次のコンポーネントを使用してアプリケーションを開発、アセンブル、出荷、および実行できます。

  1. Dockerデーモン :Dockerイメージ、コンテナー、ネットワーク、およびストレージボリュームを管理する永続的なバックグラウンドプロセス。 Dockerデーモンは常にDockerAPIリクエストをリッスンし、それらを処理します。

  2. Docker Engine REST API :APIは、Dockerデーモンと対話するためにアプリケーションによって使用されます。 HTTPクライアントからアクセスできます。

  3. DockerCLI :Dockerデーモンと対話するためのコマンドラインインターフェイスクライアント。これにより、コンテナインスタンスの管理方法が大幅に簡素化され、開発者がDockerの使用を好む主な理由の1つになります。

最初に、DockerクライアントはDockerデーモンと通信します。Dockerデーモンは、Dockerコンテナーの配布だけでなく、建物の重労働を実行します。基本的に、Dockerクライアントとデーモンの両方を同じシステムで実行できます。 Dockerクライアントをに接続することもできますリモートDockerデーモン。さらに、REST API、Dockerクライアントとデーモンを使用して、UNIXソケットまたはネットワークインターフェイスを介して通信します。

Dockerアーキテクチャ

Dockerのアーキテクチャは、クライアントサーバーモデルを使用し、Dockerのクライアント、Dockerホスト、ネットワークおよびストレージコンポーネント、およびDockerレジストリ/ハブで構成されます。これらのそれぞれについて詳しく見ていきましょう。

Dockerのクライアント

Dockerユーザーは、クライアントを介してDockerと対話できます。 dockerコマンドが実行されると、クライアントはそれらをdockerdデーモンに送信します。dockerdデーモンはそれらを実行します。 Docker APIは、Dockerコマンドによって使用されます。 Dockerクライアントが複数のデーモンと通信する可能性があります。

Dockerホスト

Dockerホストは、アプリケーションを実行および実行するための完全な環境を提供します。これは、Dockerデーモン、イメージ、コンテナー、ネットワーク、およびストレージで構成されています。前述のように、デーモンはすべてのコンテナ関連のアクションを担当し、CLIまたはRESTAPI。また、他のデーモンと通信してサービスを管理することもできます。

Dockerオブジェクト

1.画像

画像は、コンテナを構築できる読み取り専用のバイナリテンプレートに他なりません。また、コンテナの機能とニーズを説明するメタデータも含まれています。画像は、アプリケーションの保存と出荷に使用されます。イメージを単独で使用してコンテナーを構築したり、カスタマイズして要素を追加して現在の構成を拡張したりできます。

プライベートコンテナレジストリを使用して企業内のチーム間でコンテナイメージを共有したり、DockerHubなどのパブリックレジストリを使用して世界と共有したりできます。イメージは、以前は不可能だった方法で開発者間のコラボレーションを可能にするため、Dockerエクスペリエンスのコア要素です。

2.コンテナ

コンテナは、アプリケーションを実行するカプセル化された環境の一種です。コンテナは、ネットワーク接続やストレージオプションを含むがこれらに限定されない、コンテナの起動時に提供されるイメージと追加の構成オプションによって定義されます。イメージをコンテナーにビルドするときに追加のアクセスが定義されていない限り、コンテナーはイメージで定義されているリソースにのみアクセスできます。

コンテナの現在の状態に基づいて新しいイメージを作成することもできます。コンテナーはVMよりもはるかに小さいため、数秒でスピンでき、サーバー密度が大幅に向上します。

3.ネットワーク

Dockerネットワーキングは、分離されたすべてのコンテナーが通信するための通路です。 dockerには主に5つのネットワークドライバーがあります。

Javaでトリミングする方法
    1. ブリッジ :コンテナのデフォルトのネットワークドライバです。このネットワークは、アプリケーションがスタンドアロンコンテナー、つまり同じDockerホストと通信する複数のコンテナーで実行されている場合に使用します。

    2. ホスト :このドライバーは、DockerコンテナーとDockerホスト間のネットワーク分離を削除します。ホストとコンテナの間にネットワークを分離する必要がない場合に使用できます。

    3. オーバーレイ :このネットワークにより、スウォームサービスは相互に通信できます。コンテナーを異なるDockerホストで実行する場合、または複数のアプリケーションによってスウォームサービスを形成する場合に使用します。

    4. 無し :このドライバーはすべてのネットワークを無効にします。

    5. macvlan :このドライバーは、コンテナーにMACアドレスを割り当てて、コンテナーを物理デバイスのように見せます。 Macアドレスを介してコンテナ間のトラフィックをルーティングします。このネットワークは、VMセットアップの移行中など、コンテナーを物理デバイスのように見せたい場合に使用します。

4.保管

コンテナーの書き込み可能なレイヤー内にデータを格納できますが、ストレージドライバーが必要です。非永続的であるため、コンテナが実行されていないときはいつでも消滅します。さらに、このデータを転送することは容易ではありません。永続ストレージに関して、Dockerには4つのオプションがあります。

    1. データ量 :永続ストレージを作成する機能と、ボリュームの名前を変更したり、ボリュームを一覧表示したり、ボリュームに関連付けられているコンテナーを一覧表示したりする機能を提供します。データボリュームは、コンテナのコピーオンライトメカニズムの外部にあるホストファイルシステムに配置され、かなり効率的です。

    2. ボリュームコンテナ :これは、専用コンテナーがボリュームをホストし、そのボリュームを他のコンテナーにマウントする代替アプローチです。この場合、ボリュームコンテナーはアプリケーションコンテナーから独立しているため、複数のコンテナー間で共有できます。

    3. ディレクトリマウント :別のオプションは、ホストのローカルディレクトリをコンテナにマウントすることです。前述の場合、ボリュームはDockerボリュームフォルダー内にある必要がありますが、ディレクトリマウントに関しては、ホストマシン上の任意のディレクトリをボリュームのソースとして使用できます。

    4. ストレージプラグイン :ストレージプラグインは、外部ストレージプラットフォームに接続する機能を提供します。これらのプラグインは、ストレージをホストからストレージアレイやアプライアンスなどの外部ソースにマップします。ストレージプラグインのリストは、Dockerのプラグインページで確認できます。

Dockerのレジストリ

Dockerレジストリは、イメージを保存およびダウンロードできる場所を提供するサービスです。つまり、Dockerレジストリには、1つ以上のDockerイメージをホストするDockerリポジトリが含まれています。パブリックレジストリには、DockerHubとDockerCloudの2つのコンポーネントが含まれています。プライベートレジストリを使用することもできます。レジストリを操作する際の最も一般的なコマンドには、docker push、docker pull、dockerrunが含まれます。

Dockerアーキテクチャを理解したので、これをチェックしてください 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 Edureka DevOps認定トレーニングコースは、学習者がDevOpsとは何かを理解し、SDLCの複数のステップを自動化するためのPuppet、Jenkins、Nagios、Ansible、Chef、Saltstack、GITなどのさまざまなDevOpsプロセスとツールの専門知識を習得するのに役立ちます。

質問がありますか?この「Dockerアーキテクチャ」のコメントセクションにその旨を記載してください。折り返しご連絡いたします。