これは 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 大メリット

推薦する

クラウドコンピューティング、仮想化、コンテナ化について

[[268369]]クラウドコンピューティングとは何ですか? 1.1 クラウドコンピューティングの概...

湘湘雲はどうですか? (IPRR.CN) 華西インテリジェントマルチライン高防御クラウドサーバーの簡単なレビュー

国内のサーバー商人である翔翔クラウド(iprr.cn、B1-5344、〜)は、成都、徳陽、西安、綿陽...

推奨: 5$/Kvm/onapp クラウド/512MB メモリ/10GB ハードディスク/500GB トラフィック

netcloudさん、Host Catが再び導入される理由は、低価格+ONAPPという2点です。 o...

百度はネガティブな情報を排除する方法を知っている

最近、会社のWeiboマーケティングとメールマーケティングを担当しているので、Weiboマーケティン...

政府クラウドとパブリッククラウドの市場規模は2020年に81.4億人民元に達した

デジタル政府とスマートシティ構築の継続的な最適化により、政府部門のビジネスニーズはますます多様化して...

olvps: 特別VPS、Anchang CN2 GIA、毎月3回無料でIPを変更できます

olvpsは設立1周年を記念して、ささやかなプレゼントを贈呈しました。米国西海岸の安昌コンピュータル...

ガートナーが「中国のクラウド セキュリティ市場の概要」を発表: クラウド セキュリティ開発が黄金時代を迎える過程を詳しく見る

最近、国際的に有名なコンサルティング組織であるガートナーは、中国のセキュリティ市場の調査と中国のセキ...

#アメリカVPS# chicagovps-SSD VPSが2年ぶりに再入荷、シカゴ/バッファロー

Chicago Govps が SSD ハード ドライブ (Windows シリーズを除く) VPS...

spinservers: 米国独立サーバー、月額 69 ドル、e3-1280v5、32gDDR4、1TNVMe、30T トラフィック/2*10Gbps 帯域幅

spinservers は、米国サーバーのプロモーションを新たに開始しました。今回は、e3 のハイエ...

百度の7月のアルゴリズム調整の簡単な分析:ROIの向上が百度の信頼度を決定する

最近、7月のBaiduのアルゴリズム変更の話題に注目する人がおり、アルゴリズム変更によって生じたラン...

ウェブサイトデータ分析は将来のSEO担当者にとって必須科目になる

友人から、SEO を始めるにはどうしたらいいかとよく聞かれます。私は通常、外部リンクを投稿したり、友...

新しいウェブサイトを計画するための 7 つのステップ: 公開したその日にインデックス登録とランキング付けを行う

何をするにも計画を立てる必要があります。そうしないと、時間と労力を無駄にし、2 倍の労力で半分の結果...

低コストで高速なコンテナ化イメージの展開: コンテナ環境での Xiaohongshu の CD 実践

コンテナは発売以来、ソフトウェア開発に非常に伝染性の高い興奮と革新をもたらし、大企業からスタートアッ...