Dockerの大きな骨を噛むために必要な基本理論
序文
- Dockerの3つの要素:コンテナー、倉庫、ミラー
- Dockfileツールはミラーイメージになり、ウェアハウスにアップロードされます。サービスを追加する場合は、ミラーイメージをウェアハウスからダウンロードするだけで済み、非常に高速です。
- Dockerエンジンエンジンをインストールできる限り、Dockerは任意のプラットフォームに展開できます。
- コンテナはシステムに依存せず、エンジンに依存します
1つ:Dockerの概要
1.1:Dockerとは何ですか?
-
仮想マシンと比較してシステムに依存しない軽量の「仮想マシン」です。
-
Linuxコンテナーでアプリケーションを実行するためのオープンソースツールです。
-
Dockerは2013年にヒットし、現在までコンテナーテクノロジーの代名詞となっています。
-
Dockerは、真の「一度構築してどこでも実行できる」という最初から標準化されたランタイム環境を提供することを目指しています。同じビルドバージョンを、開発、テスト、プレリリース、本番環境などのどの環境でも使用できます。基盤となるオペレーティングシステムの分離。これに基づいて、CaaS(サービスとしてのコンテナー)テクノロジーがさらに開発されました。
-
Dockerは、アプリケーションを開発、配信、実行するためのオープンプラットフォームです。Dockerを使用すると、アプリケーションをインフラストラクチャから分離できるため、ソフトウェアを迅速に提供できます。
-
これはオープンソースのアプリケーションコンテナーエンジンであり、開発者はゲートアプリケーションと依存パッケージをポータブルイメージにパッケージ化し、仮想化できる一般的なLinuxまたはWindowsマシンに公開できます。コンテナはサンドボックスメカニズムを完全に使用し、コンテナ間にインターフェースはありません
-
サンドボックス:サンドボックスは仮想システムプログラムです。サンドボックスによって提供される環境は、実行中の各プログラムから独立しており、既存のシステムには影響しません
-
Dockerロゴ
1.2:Dockerの使用シナリオ
- パッケージ化されたアプリケーションの簡単な導入
- 基盤となるハードウェアから自由に移行できます(アプリケーションの分離の実装、アプリケーションの分割と分離)。例:Tencent CloudからAlibaba Cloudへのサーバーの移行
- 継続的インテグレーションと継続的デリバリー(CI / CD):リリースをテストする開発
- マイクロサービスをデプロイする
- PAAS製品(サービスとしてのプラットフォーム)を提供します{OpenStackクラウドホストはAlibaba Cloud ECSに類似しており、IAASに属し、Docker(K8S)はPAASに属します}
1.3:Dockerコンテナーと従来の仮想マシンの比較
特性 | Docker容器 | 仮想マシン |
---|---|---|
開始速度 | セカンドレベル | 分レベル |
消費電力の計算 | ほとんどなし | 約50%の損失 |
パフォーマンス | ネイティブに近い | より弱い |
システムサポート(シングルマシン) | 数千 | 数十 |
隔離 | リソース制限 | 完全な分離 |
安全性 | 共有カーネル、安全ではない | システムの論理的分離、安全性 |
サービス | コンテナーごとに1つのサービスのみを実行する | 複数のサービスを実行できます |
1.4:Dockerエンジン
- Docker Engineは、次の主要コンポーネントを持つクライアントサーバーアプリケーションです。
- サーバーは、デーモンプロセス(
dockerd
コマンド)と呼ばれる長期実行プログラムです。 - REST API。これは、プログラムがデーモンと通信してその操作を指示するために使用できるインターフェースを指定します。
- コマンドラインインターフェイス(CLI)クライアント(
docker
コマンド)。
1.5:Dockerのアーキテクチャ
- Dockerはクライアントサーバーアーキテクチャを使用します。Docker クライアントとDocker デーモンの対話、デーモンはDockerコンテナーの構築、操作、および配布を完了します。
- Dockerは従来の仮想化とは異なり、仮想ハードウェアリソースを必要とせず、コンテナエンジンを直接使用するため、高速です
- Dockerクライアント:クライアント
- Dockerクライアント(
docker
)は、多くのDockerユーザーがDockerと対話する主な方法です。などのコマンドを使用するdocker run
と、クライアントはこれらのコマンドをdockerd
に送信して、これらのコマンドを実行します。このdocker
コマンドは、Docker APIを使用します。Dockerクライアントは複数のデーモンと通信できます。
- Dockerクライアント(
- Dockerデーモン:デーモン
- Dockerデーモン(
dockerd
)は、Docker APIリクエストをリッスンし、イメージ、コンテナー、ネットワーク、ボリュームなどのDockerオブジェクトを管理します。デーモンは他のデーモンと通信してDockerサービスを管理することもできます。
- Dockerデーモン(
- Dockerイメージ:ミラーリング
- コンテナはイメージにパッケージ化できます
- Dockerコンテナー:コンテナー
- Dockerレジストリ:ミラーウェアハウス
- イメージを保存する場所はデフォルトでパブリックDocker Hubにあり、個人用の倉庫を構築できます。
1.6:Dockerのコアコンセプト
1.6.1:镜像(image)
- Dockerのイメージは、コンテナを作成するための基礎です。仮想マシンのスナップショットと同様に、Dockerコンテナエンジンの読み取り専用モードとして理解できます。たとえば、イメージはCentOSイメージと呼ばれる完全なCentOSオペレーティングシステム環境にすることができます。 MySQLがインストールされているアプリケーションで、MySQLミラーなどと呼ばれます。
- Dockerは、既存のイメージを作成および更新するためのシンプルなメカニズムを提供し、ユーザーはインターネットからすでに準備されたアプリケーションイメージをダウンロードして直接使用することもできます
1.6.2:コンテナー(コンテナー)
- Dockerコンテナーは、イメージから作成された実行中のインスタンスであり、開始、停止、および削除できます。作成された各コンテナは互いに分離されており、互いに見えないため、プラットフォームのセキュリティを確保できます。
- コンテナーを単純なLinux環境と考えることもできます。Dockerはコンテナーを使用して、アプリケーションを実行および分離します。
1.6.3:倉庫(リポジトリ)
- Dockerウェアハウスは、イメージを一元的に保存する場所です。独自のイメージを作成した後、pushコマンドを使用してそれをパブリックまたはプライベートウェアハウスにアップロードし、次回別のマシンに置くことができます。このイメージを使用する場合は、倉庫からイメージをプルするだけです。
- 倉庫登録サーバー(レジストリ)は、倉庫が保管される場所であり、複数の倉庫が含まれます。各倉庫は、特定のタイプのイメージを集中的にアーカイブし、それらを区別するために異なるタグを使用します。現在、最大の公共倉庫はDocker Hubであり、ユーザーがダウンロードして使用するための多数のイメージが格納されています。
1.7:名前空間
- Dockerは、コンテナーに分離されたワークスペース
namespaces
を提供するというテクノロジーを使用しています。コンテナーを実行すると、Dockerはコンテナー名前空間のグループを作成します。 - これらの名前空間は、分離のレイヤーを提供します。コンテナーのすべての側面は個別の名前空間で実行され、そのアクセスはその名前空間に制限されます。
- Docker EngineはLinuxで次の名前空間を使用します。
- ** pid名前空間:**プロセス分離(PID:プロセスID)。
- **ネット名前空間:**管理ネットワークインターフェイス(NET:ネットワーク)。
- ** ipc名前空間:** IPCリソースへのアクセスを管理します(IPC:プロセス間通信)。
- ** mnt名前空間:**ファイルシステムのマウントポイントを管理します(MNT:マウント)。
- ** uts名前空間:**カーネルとバージョンの識別子を分離します。(UTS:Unix Time Sharing System)。
1.8:対照群
- Linux上のDockerエンジンは、コントロールグループ(
cgroups
)と呼ばれる別のテクノロジーにも依存しています。cgroupは、アプリケーションを特定のリソースセットに制限します。コントロールグループにより、Docker Engineは利用可能なハードウェアリソースをコンテナーと共有し、制限と制約を選択的に適用できます。たとえば、特定のコンテナで使用可能なメモリを制限できます。