Dockerアーキテクチャの概要とDockerコンポーネント[初心者向け]

公開: 2020-12-31

最近コンテナの世界に出くわした場合、コンテナ化のメリットを提供するために連携する基本的な要素を理解することはおそらく悪い考えではありません。 しかしその前に、あなたが尋ねるかもしれない質問があります。 コンテナはどのような問題を解決しますか?

通常の開発ライフサイクルでアプリケーションを構築した後、開発者はテスト目的でアプリケーションをテスターに​​送信します。 ただし、開発環境とテスト環境が異なるため、コードは機能しません。

現在、主に、これには2つの解決策があります。仮想マシンを使用するか、Dockerなどのコンテナー化された環境を使用するかのいずれかです。 古き良き時代には、組織は複数のアプリケーションを実行するためにVMを展開していました。

では、なぜ彼らはVMよりもコンテナ化を採用し始めたのでしょうか。 この記事では、そのようなすべての質問について詳細に説明します。

この素晴らしいツールの背後には、同様によく考えられたアーキテクチャが必要です。 Dockerアーキテクチャーのコンポーネントについて知る前に、DockerコンテナーとそれらがVMよりも優れていることを理解しましょう。

目次

Dockerコンテナ

Dockerはオープンソースプロジェクトであり、コンテナーと呼ばれる、緩く分離された封じ込められた環境でアプリケーションを作成、パッケージ化、および実行する機能を提供します。

Dockerプラットフォームによって提供されるすべての分離とセキュリティにより、特定のホストで多数のコンテナーを同時に実行できます。

Dockerコンテナが広く採用されている理由には以下が含まれます

  • これにより、開発者はローカルでコードを記述し、コンテナーを使用してチームと作業を共有できます。
  • アプリケーションをコンテナであるテスト環境にプッシュし、自動テストを実行できます。
  • バグが見つかった場合は、開発環境内で修正してから再デプロイできます。
  • 修正を取得するのは、更新されたイメージを実稼働環境にプッシュするのと同じくらい簡単です。

トピックを深く掘り下げる前に、従来の仮想化手法と新世代のコンテナ化を区別する必要があります。

仮想マシンとDockerコンテナ

DevOpsプラクティスにコンテナ化を使用する前は、仮想マシンが最上位にありました。 以前は、アプリケーションごとにVMを作成していました。

VMはほとんどすべての必要性を満たしていましたが、VMを使用することの欠点は面倒であり、基盤となるホストマシンから必要なすべてのメモリとハードウェアリソースを割り当てました。

ただし、コンテナはOSレベルの仮想化を提供し、通常は必要なメモリが少ないため、コンテナ化では簡単に回避できました。 したがって、それは人気を博し、最終的にDevOpsコミュニティに採用されました。

画像ソース

上の図は、VMとコンテナーのアーキテクチャーの違いと、コンテナーが日常の開発プロセスでVMを上回った理由を示しています。 VMとは異なり、コンテナはコンテナエンジンの上に配置され、OSレベルの仮想化を提供するため、多くのリソースを節約できます。

Dockerエンジン

Dockerのさまざまなアーキテクチャーコンポーネントについて説明する前に、Dockerのワークフローを理解することが不可欠です。 Dockerエンジンとそのいくつかの部分を見てみましょう。これにより、Dockerシステムがどのように機能するかがわかります。 Docker Engineは、主に3つの主成分を持つ典型的なクライアントサーバーアプリケーションです。

サーバー(デーモン)

Dockerデーモンは、バックグラウンドで実行され、すべてのDockerオブジェクトを管理する継続的なプロセスです。 クライアントから送信されたDockerAPIリクエストをリッスンし、継続的に処理します。

RestAPI

これは、DockerクライアントがDockerデーモンと対話するために使用するインターフェースです。 クライアントはAPIを介してデーモンと通信し、デーモンに指示を与えることができます。

クライアント

Dockerクライアントは、デーモンと対話できるコマンドラインインターフェイス(CLI)です。 コンテナ管理のプロセス全体を簡素化します。

画像ソース

Dockerクライアント(CLIなどのHTTPクライアントの場合もあります)はデーモンと通信し、デーモンはコンテナーの作成、実行、共有という重いタスクを実行します。 クライアントとデーモンは、同じマシンで実行することも、クライアントをリモートデーモンに接続することもできます。 クライアントとデーモンは、ソケットまたはネットワークインターフェースを介してRestAPIを使用して相互に通信します。 Dockerクライアントは、ユーザーがコンテナー、イメージ、ボリュームなどのDockerオブジェクトを管理するのに役立ちます。Dockerプロジェクトの詳細

世界のトップ大学からのソフトウェア開発コースに登録します。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

建築コンポーネント

前に説明したように、Dockerはクライアントサーバーアーキテクチャを使用します。このアーキテクチャでは、クライアントはRestAPIを介してデーモンと通信します。 Dockerアーキテクチャは、以下で説明するように、いくつかのコンポーネントで構成されています。

画像ソース

デーモン

クライアントによって開始されたAPIリクエストをリッスンし、コンテナ、イメージ、ボリューム、ネットワークなどのDockerオブジェクトを管理します。 また、他のデーモンと通信してDockerサービスを管理したり、特に大規模なDockerネットワークを管理したりすることもできます。

クライアント

Dockerユーザーは、Dockerクライアントを使用してデーモンと通信できます。 ユーザーは、CLIなどのクライアントを使用して「Dockerrun…」などのコマンドを実行し、その後、これらのコマンドをDocker(デーモン)に転送して、最終的に実行します。 Dockerクライアントは複数のデーモンと通信します。

レジストリ

Dockerイメージを保存し、パブリックまたはプライベートにすることができます。 Dockerは、DockerHubでデフォルトでイメージを検索するように構成されています。 クライアントがpullまたはrunコマンドを発行すると、イメージはリポジトリからプルされます。

Dockerオブジェクト

Dockerを使用する場合、コンテナー、イメージ、ボリューム、ネットワークなどのいくつかのオブジェクトを操作します。

これらのオブジェクトのいくつかは

画像

これは読み取り専用のテンプレートであり、コンテナーを作成するための手順が含まれています。 また、コンテナの機能を説明するメタデータも含まれています。 ユーザーは、Dockerレジストリからイメージをプルし、その上に書き込み可能なイメージレイヤーを作成して、アプリケーションの要件に合わせてカスタマイズされたイメージを作成できます。 人気のあるアイデアには、Ubuntu、Nginx、MySQLなどがあります。これらのアイデアはチーム間で共有できるため、チームがアプリケーションで共同作業するのに役立ちます。

コンテナ

コンテナは、アプリケーションに分離された環境を提供するイメージのインスタンスです。 それらは、それらを構築するために使用されるイメージによって定義されたリソースにのみアクセスできます。

通信網

Docker Networksを使用すると、同じネットワーク上の分離されたコンテナーが通信してリソースを共有できます。 Dockerが提供するネットワークには、ブリッジ、ホスト、オーバーレイ、Macvlanなどがあります。

保管所

Dockerを使用すると、ドライバーを使用して書き込み可能なコンテナーレイヤー内にデータを格納できます。 Dockerでは、永続ストレージに4つのオプション(Dockerボリューム、ボリュームコンテナー、ディレクトリマウント、ストレージプラグイン)を使用できます。

最も広く使用されているストレージオプションはボリュームです。 これらはホストファイルシステムに配置され、複数のコンテナがこれらのボリューム内でデータを共有および書き込みできるようにします。

結論

Dockerは、基盤となる最先端のテクノロジーのセットを使用して、効率的なコンテナー化サービスをユーザーに提供します。 間違いなく、近年、Dockerは開発者コミュニティの間で注目を集め始めており、今後もそうし続けるでしょう。

リソースの効率や拡張性など、コンテナによって提供されるさまざまなメリットにより、デッキの上での位置を正しく確保できます。

この記事では、Dockerワークフロー、そのアーキテクチャ、基盤となるテクノロジー、コンテナー、イメージ、レジストリ、ネットワークなどのいくつかのDockerオブジェクトなど、Dockerの最も重要な概念のいくつかについて説明しました。

これで、Dockerコンテナの美しい世界を深く掘り下げることができます。 これで、さまざまなDockerリソースがどのように連携して、アプリケーションをシームレスに構築、デプロイ、共有できるようにする一連の機能を提供するかをよりよく理解する必要があります。

upGradでDockerアーキテクチャを学ぶ

upGradを使用して、加速するペースでアプリケーション構築の旅を始めましょう。

upGradEducationPvt。 Ltd.は、DevOpsに特化したソフトウェア開発の専門コースを提供しています。これにより、志願者はITの巨人に夢中になります。

コースのハイライト

ビッグデータのソフトウェア開発スペシャライゼーションにおけるupGradのエグゼクティブPGプログラムは、12か月に分けられた慎重に設計されたオンラインコースです。

このカリキュラムでは、

  • データサイエンスと機械学習のコンテンツへの排他的アクセスを取得する
  • ライブプロジェクトと割り当てに取り組む
  • 360度のキャリアサポートを得る
  • 10のプログラミング言語とツールを学ぶ
  • 専用の学生メンターシップを取得する

upGradを使用してDevOpsアプリケーション開発の準備を整えてください。

なぜ待つのか

今すぐお申し込みください!

未来のキャリアに備える

ソフトウェアエンジニアリングの修士号を今すぐ申し込む