これは Docker の概念を非常にわかりやすく説明した記事かもしれません。

これは Docker の概念を非常にわかりやすく説明した記事かもしれません。

Docker は最も人気のあるソフトウェア コンテナ プラットフォームなので、Docker の概念を理解するには、まずコンテナから始める必要があります。

[[235098]]

この記事では、Docker の概念について比較的詳しく説明するだけであり、Docker 環境のインストールや Docker の一般的な操作やコマンドなどについては説明しません。

まずはコンテナについて理解しましょう

コンテナとは何ですか?

まず、コンテナのより公式な説明を見てみましょう。

  • コンテナ イメージは、コード、ランタイム環境、システム ツール、システム ライブラリ、設定など、ソフトウェアの実行に必要なすべてのものが含まれる、軽量で実行可能なスタンドアロンのソフトウェア パッケージです。
  • コンテナ化されたソフトウェアは、Linux ベースと Windows ベースの両方のアプリケーションで動作し、あらゆる環境で一貫して実行されます。
  • コンテナは、ソフトウェアを外部環境の違い(開発環境とステージング環境の違いなど)から独立させ、同じインフラストラクチャ上で異なるソフトウェアを実行するときにチーム間で発生する競合を軽減するのに役立ちます。

コンテナを一言でまとめると、コンテナは開発、配信、展開のために標準化された単位にパッケージ化されたソフトウェアです。

コンテナのより一般的な説明を見てみましょう。コンテナを一般的な方法で説明すると、ランドセルにさまざまな文房具を入れたり、ワードローブにさまざまな服を入れたり、靴棚にさまざまな靴を入れたりできるように、コンテナは物を保管する場所であると考えます。

現在コンテナと呼ばれているものは、おそらく Web サイト、プログラム、さらにはシステム環境などのアプリケーションに近いものでしょう。

物理マシン、仮想マシン、コンテナの図

仮想マシンとコンテナの比較については後ほど詳しく紹介します。ここでは、物理マシン、仮想マシン、コンテナについての理解を深めるために、インターネット上の画像のみを使用します。

物理マシン

仮想マシン

容器

上記の 3 つの抽象的な図から、大まかに類推してまとめることができます。コンテナーはハードウェアではなくオペレーティング システムを仮想化し、コンテナーは同じオペレーティング システム リソース セットを共有します。

仮想マシン テクノロジーは、ハードウェア セットを仮想化し、その上で完全なオペレーティング システムを実行することです。したがって、コンテナの分離レベルはわずかに低くなります。

上記の説明により、コンテナという馴染みのない概念と馴染みのない概念の両方について、皆さんが予備的な理解を得られたと思います。次に、Docker のいくつかの概念について説明します。

Dockerのいくつかの概念について話す

[[235101]]

Dockerとは

正直に言うと、Docker が何であるかを説明するのは簡単ではありません。 Docker とは何かを説明する 4 つのポイントを以下に示します。

  • Docker は、主要なソフトウェア コンテナ プラットフォームです。
  • Docker は、Google がリリースした Go 言語を使用して開発および実装されています。 Linux カーネルの cgroup、名前空間、UnionFS などのテクノロジを使用して、プロセスをカプセル化および分離します。これは、オペレーティング システム レベルでの仮想化テクノロジです。

分離されたプロセスはホストや他の分離されたプロセスから独立しているため、コンテナとも呼ばれます。 Docke はもともと LXC に基づいて実装されました。

  • Docker は、開発環境のセットアップや構成などの反復的なタスクを自動化し、開発者が本当に重要なこと、つまり優れたソフトウェアの構築に集中できるようにします。
  • ユーザーはコンテナを簡単に作成して使用し、独自のアプリケーションをコンテナに配置できます。コンテナは、通常のコードの管理と同様に、バージョン管理、コピー、共有、変更することもできます。

Dockerのアイデア:

  • 容器
  • 標準化:①輸送方法、②保管方法、③APIインターフェース
  • 分離

Docker コンテナの機能:

  • 軽量で、単一のマシン上で実行される複数の Docker コンテナは、マシンのオペレーティング システム カーネルを共有できます。すぐに起動でき、コンピューティング リソースとメモリ リソースをほとんど消費しません。

イメージはファイル システム レイヤーを使用して構築され、いくつかの共通ファイルを共有します。これにより、ディスク使用量が最小限に抑えられ、画像のダウンロードが速くなります。

  • Docker コンテナはオープン スタンダードに基づいており、すべての主要な Linux ディストリビューション、Microsoft Windows、VM、ベア メタル サーバー、クラウドなどのあらゆるインフラストラクチャで実行できます。
  • セキュリティ: Docker がアプリケーションに提供する分離は、アプリケーション同士の分離に限定されるのではなく、基盤となるインフラストラクチャからも独立しています。

Docker はデフォルトで最適な分離を提供するため、アプリケーションに問題が発生した場合でも、それは単一のコンテナの問題であり、マシン全体に影響することはありません。

なぜ Docker なのか?

Docker を使用すると、次のような利点があります。

  • 一貫した運用環境。 Docker イメージはカーネルを除く完全なランタイム環境を提供し、アプリケーション ランタイム環境の一貫性を保証するため、「このコードは私のマシンでは正常に動作します」などの問題は発生しなくなります。
  • 起動時間が短縮されます。起動時間は数秒、あるいは数ミリ秒単位で達成できます。開発、テスト、展開にかかる時間を大幅に節約できます。
  • 分離。リソースが他のユーザーによって簡単に影響を受ける可能性があるパブリック サーバーは避けてください。
  • 弾力的なスケーリングと急速な拡張。サーバー使用負荷の集中的なバーストを処理するのに適しています。
  • 移行が簡単です。あるプラットフォームで実行されているアプリケーションは、動作環境の変更によりアプリケーションが正常に実行できなくなることを心配することなく、別のプラットフォームに簡単に移行できます。
  • 継続的な配信とデプロイメント。 Docker を使用すると、アプリケーション イメージをカスタマイズして、継続的インテグレーション、継続的デリバリー、およびデプロイメントを実現できます。

コンテナについて話すときは、必ず仮想マシンと比較する必要があります。

コンテナとVM

簡単に言えば、コンテナと仮想マシンはリソースの分離と割り当てに関して同様の利点がありますが、コンテナはハードウェアではなくオペレーティング システムを仮想化するため、移植性と効率性に優れており、機能が異なります。

2つの比較表

従来の仮想マシン テクノロジーは、ハードウェア セットを仮想化し、その上で完全なオペレーティング システムを実行し、その後、システム上で必要なアプリケーション プロセスを実行します。

コンテナ内のアプリケーション プロセスは、ホストのカーネル上で直接実行されます。コンテナには独自のカーネルがなく、ハードウェア仮想化を実行しません。したがって、コンテナは従来の仮想マシンよりも移植性に優れています。

コンテナと仮想マシン (VM) の概要:

  • コンテナは、コードと依存リソースをまとめてパッケージ化するアプリケーション レベルの抽象化です。複数のコンテナを同じマシン上で実行できます。オペレーティング システム カーネルを共有しますが、各コンテナはユーザー空間で独立したプロセスとして実行されます。

仮想マシンと比較すると、コンテナは占有するスペースが少なく(コンテナ イメージのサイズは通常数十メガバイト程度)、瞬時に起動できます。

  • 仮想マシン (VM) は、1 台のサーバーを複数のサーバーに変換する物理的なハードウェア レベルの抽象化です。ハイパーバイザーを使用すると、単一のマシン上で複数の VM を実行できます。

各 VM には、完全なオペレーティング システム、1 つ以上のアプリケーション、必要なバイナリ、およびライブラリ リソースが含まれているため、大量のスペースを占有します。また、VM の起動も非常に遅いです。

Docker の公式サイトを通じて、Docker の多くの利点を知ることができますが、両者の使用シナリオは異なるため、仮想マシン技術を完全に否定する必要はありません。

仮想マシンは、オペレーティング環境全体を完全に分離するのに適しています。たとえば、クラウド サービス プロバイダーは、さまざまなユーザーを分離するために仮想マシン テクノロジを使用することが多いです。 Docker は、フロントエンド、バックエンド、データベースなどのさまざまなアプリケーションを分離するためによく使用されます。

私としては、誰が誰に代わるかは問題ではなく、両者が調和して共存できると考えています。

Docker には非常に重要な基本概念が 3 つあります。これら 3 つの概念を理解すれば、Docker のライフサイクル全体を理解できるようになります。

Docker の基本概念

Docker には 3 つの基本概念が含まれています。

  • 画像
  • 容器
  • リポジトリ

画像: 特殊なファイルシステム

オペレーティング システムはカーネルとユーザー スペースに分かれています。 Linux の場合、カーネルの起動後、ユーザー スペースのサポートを提供するためにルート ファイル システムがマウントされます。 Docker イメージはルート ファイル システムに相当します。

Docker イメージは、コンテナ ランタイムに必要なプログラム、ライブラリ、リソース、構成、およびその他のファイルを提供するだけでなく、ランタイム用に用意されたいくつかの構成パラメーター (匿名ボリューム、環境変数、ユーザーなど) も含む特別なファイル システムです。

イメージには動的なデータは含まれておらず、作成後にその内容は変更されません。

Docker は設計時に、Union FS テクノロジを最大限に活用し、階層型ストレージ アーキテクチャとして設計されました。イメージは実際には複数の層のファイル システムで構成されています。

イメージを構築するときは、前のレイヤーが次のレイヤーの基礎となり、レイヤーごとに構築されます。各レイヤーが構築されると、それ以降は変更されません。次のレイヤーでの変更は、このレイヤーでのみ発生します。

たとえば、前のレイヤーのファイルを削除する操作では、前のレイヤーのファイルは実際には削除されず、現在のレイヤーのファイルが削除済みとしてマークされるだけです。

最終コンテナの実行中、このファイルは表示されませんが、実際には常にイメージに従います。

したがって、イメージを構築するときは、各レイヤーにはそのレイヤーに追加する必要があるものだけが含まれるように細心の注意を払い、レイヤーを構築する前に余分なコンテンツをすべてクリーンアップする必要があります。

階層化ストレージ機能により、画像の再利用やカスタマイズも容易になります。以前に作成したイメージをベース レイヤーとして使用し、さらに新しいレイヤーを追加して必要なものをカスタマイズし、新しいイメージを作成することもできます。

コンテナ: 実行時のエンティティ

イメージとコンテナの関係は、オブジェクト指向プログラミングにおけるクラスとインスタンスの関係に似ています。イメージは静的な定義であり、コンテナはイメージの実行時のエンティティです。コンテナは作成、開始、停止、削除、一時停止などが可能です。

コンテナの本質はプロセスですが、ホスト上で直接実行されるプロセスとは異なり、コンテナ プロセスは独自の独立した名前空間で実行されます。前述したように、イメージは階層化ストレージを使用し、コンテナーも同様です。

コンテナストレージ層のライフサイクルはコンテナのライフサイクルと同じです。コンテナが消滅すると、コンテナ ストレージ レイヤーも消滅します。したがって、コンテナが削除されると、コンテナ ストレージ レイヤーに保存されている情報はすべて失われます。

Docker のベスト プラクティスの要件によれば、コンテナーはストレージ層にデータを書き込んではならず、コンテナー ストレージ層はステートレスのままである必要があります。

すべてのファイル書き込み操作では、データ ボリュームを使用するか、ホスト ディレクトリをバインドする必要があります。これらの場所での読み取りと書き込みでは、コンテナ ストレージ層をスキップし、ホスト (またはネットワーク ストレージ) に直接読み取りと書き込みを行うため、パフォーマンスと安定性が向上します。

データ ボリュームのライフ サイクルはコンテナーとは独立しています。コンテナが消えても、データボリュームは消えません。したがって、データ ボリュームを使用した後は、データを失うことなくコンテナーを削除して自由に再実行できます。

ウェアハウス: 画像ファイルを集中的に保存する場所

イメージがビルドされると、現在のホスト上で簡単に実行できます。ただし、このイメージを他のサーバーで使用する必要がある場合は、イメージを集中的に保存および配布するサービスが必要になります。 Docker Registry はそのようなサービスです。

Docker レジストリには複数のリポジトリを含めることができます。各リポジトリには複数のタグを含めることができます。各タグは画像に対応します。

したがって、イメージ リポジトリは、以前使用したコード リポジトリと同様に、Docker がイメージ ファイルを集中的に保存するために使用する場所です。

通常、リポジトリには同じソフトウェアの異なるバージョンのイメージが含まれており、ソフトウェアの異なるバージョンに対応するためにタグがよく使用されます。

<ウェアハウス名>:<ラベル> の形式を使用して、どのバージョンのソフトウェアがミラーであるかを指定できます。タグが指定されていない場合、デフォルトのタグは最新になります。

ここで、Docker Registry パブリック サービスとプライベート Docker Registry の概念を追加します。

Docker Registry パブリック サービスは、ユーザーに公開され、ユーザーがイメージを管理できるレジストリ サービスです。

一般的に、このような公開サービスでは、ユーザーは公開画像を無料でアップロードおよびダウンロードできますが、非公開画像を管理するための有料サービスが提供される場合もあります。

最も一般的に使用されているレジストリ公開サービスは公式の Docker Hub です。これはデフォルトのレジストリでもあり、多数の高品質の公式イメージを備えています。 URL は hub.docker.com/ です。

中国での Docker Hub へのアクセスは遅くなる可能性があります。中国には、Docker Hub と同様のパブリック サービスを提供するクラウド サービス プロバイダーもいくつかあります。

パブリック サービスを使用するだけでなく、ユーザーはローカルでプライベート Docker レジストリを構築することもできます。 Docker は Docker Registry イメージを公式に提供しており、これをプライベート Registry サービスとして直接使用できます。

オープンソースの Docker Registry イメージは、Docker コマンドをサポートするのに十分であり、使用には影響しない Docker Registry API のサーバー側実装のみを提供します。ただし、グラフィカル インターフェイスや、イメージのメンテナンス、ユーザー管理、アクセス制御などの高度な機能は含まれていません。

***トーク: 構築、出荷、実行

Docker の公式 Web サイトを検索すると、「Docker - あらゆるアプリをどこでもビルド、出荷、実行」という単語が見つかります。

では、Build、Ship、Run は具体的に何を行うのでしょうか?

  • ビルド(イメージのビルド):イメージはファイルや動作環境などのリソースを含むコンテナのようなものです。
  • 船(輸送イメージ):ホストと倉庫間の輸送。ここの倉庫はスーパードックのようなものです。
  • 実行 (実行イメージ): 実行イメージはコンテナであり、コンテナはプログラムが実行される場所です。

Docker の実行プロセスは、ウェアハウスに移動してイメージをローカルにプルし、コマンドを使用してイメージを実行してコンテナーに変換することです。

そのため、Docker はよく dock worker または dock loader と呼ばれますが、これは Docker の中国語訳である porter とまったく同じです。

要約する

この記事では主にDockerにおける一般的な概念について詳しく説明しますが、Dockerのインストール、イメージの使用、コンテナの操作などについては触れません。この部分については、読者が書籍や公式ドキュメントを読んで習得できることを願っています。

<<:  分散会計はすべてブロックチェーンではないので、混同しないでください。

>>:  データセンターの仮想化による 10 大メリット

推薦する

アイ・レ・フオのショッピングガイドコミュニティへの変革は不確実な未来を秘めており、金色の飯碗を持つ乞食たちは

AiLeHuo が最初に作成されたとき、それは「Baidu の中間ページ プラットフォームの橋渡し」...

SEO の悲劇?涅槃復活!あなたが業界を選び、業界があなたを選ぶ

最近プロモーションの仕事が忙しくて、SEOの記事を長い間書いていませんでした。 4月19日にウェブサ...

草の根ウェブマスターがあなたの質問に答えます: SEOはそれほど神秘的ではありません

ウェブサイトの運営とプロモーションの過程で、SEO最適化は欠かせない手段であるため、近年、多くのウェ...

クラウドでの ERP 運用に関する 8 つの誤解に惑わされないでください

多くの CIO がコア アプリケーションをクラウドに移行していますが、SaaS ERP に関するよく...

APPプロモーション実践情報:史上最も包括的なAPP運営・プロモーションチャンネル!

ビッグニュースがやってくる史上最も包括的なAPPプロモーションチャンネル   アプリプロモーションの...

クラウドネイティブデータベースの探索

翻訳者 |李睿校正 |梁策と孫淑娟現在、「クラウド ネイティブ」という概念は、主にアプリケーション ...

ハイパースケールからハイブリッドクラウドへ: クラウドコンピューティングの可能性を解き放つ

今日のクラウド コンピューティング市場は、幅広いインフラストラクチャおよびプラットフォーム サービス...

眉毛にこだわりを持つシャオ・ウーがエンターテインメント業界に参入。ブランドは彼を活用して何ができるだろうか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来です“眉毛の描き方を知っている”シャ...

デジタルエンパワーメント:「チキンスープ」をより美味しく、「疫病対策」をよりスマートに

[原文は51CTO.comより] 会長が手で引き裂いた連名書簡と200元記者会見は繰り返し微博の人気...

ハイブリッドクラウドへの適応、Huolala のデータベースミドルウェア構築への道

リン・ジンJAVAテクノロジーエキスパートLalamove Technology Center のコ...

マーケティング、セールス、広告の違いとつながり

多くの起業家、事業主、ウェブマスターは、マーケティング、販売、広告の関係と境界について常に混乱してい...

クラウド コンピューティングはどのようにして最も収益性の高いビジネスへと進化したのでしょうか?

アリババは11月5日、2020年9月30日までの2021年第2四半期の決算を発表した。その中で、アリ...

Inspektor Gadget: クラウド ネイティブ時代の eBPF ツールチェーン フレームワーク

1. Inspektor Gadget とは何ですか? Inspektor Gadget は、Kub...

Wupao.com が電子商取引について語る: 将来の電子商取引マーケティングへの道を開く 7 つの主要なトレンド

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますWupao...