1. Dockerの概要
DockerはLinuxコンテナーの一種のカプセル化であり、シンプルで使いやすいコンテナー使用インターフェースを提供します。現在最も人気のあるLinuxコンテナーソリューションです。
Linuxコンテナを使用してアプリケーションをデプロイすることはコンテナ化と呼ばれ、LinuxコンテナはLinuxによって開発された別の仮想化テクノロジーです。簡単に言えば、Linuxコンテナは完全なオペレーティングシステムをシミュレートするのではなく、プロセスを分離します。保護層は通常のプロセスの外側に適用されます。コンテナー内のプロセスでは、基盤となるシステムからの分離を実現するために、コンテナーが接続するすべてのリソースは仮想です。
コンテナ化は、コンテナが次の理由でますます一般的になっています。
- 柔軟性:最も複雑なアプリケーションでもコンテナ化できます。
- 軽量:コンテナはホストコアを利用して共有します。
- 交換可能:更新とアップグレードを即座に展開できます。
- ポータブル:ローカルでビルドしてクラウドにデプロイし、どこでも実行できます。
- スケーラブル:コンテナーのコピーを追加して自動的に配布できます。
- スタック可能:サービスを垂直方向に瞬時にスタックできます。
Dockerは、開発者とシステム管理者がコンテナを使用してアプリケーションを開発、配備、実行するためのプラットフォームであり、アプリケーションの配備を容易にします。
Dockerは、アプリケーションとその依存関係を単一のファイルにパッケージ化します。このファイルを実行すると、仮想コンテナが生成されます。プログラムは、実際の物理マシンで実行されているかのように、この仮想コンテナーで実行されます。Dockerがあれば、環境問題を心配する必要はありません。
一般的に言って、Dockerのインターフェースは非常にシンプルであり、ユーザーはコンテナーを簡単に作成して使用し、独自のアプリケーションをコンテナーに入れることができます。コンテナは、通常のコードを管理するのと同じように、バージョン管理、コピー、共有、および変更を実行することもできます。
1.従来の仮想化と比較したDockerの長所と短所
利点:
- Dockerは第2レベルですぐに起動します。通常、仮想マシンの起動には数分かかります。
- Dockerが必要とするリソースは少なくて済みます。Dockerはオペレーティングシステムレベルで仮想化を実行します。Dockerコンテナとカーネルは、パフォーマンスをほとんど損なうことなく相互作用します。パフォーマンスは、ハイパーバイザレイヤーとカーネルレイヤーによる仮想化よりも優れています。
- Dockerはより軽量であり、Dockerアーキテクチャはコアおよび共有アプリケーションライブラリを共有できるため、メモリをほとんど消費しません。同じハードウェア環境では、Dockerによって実行されるイメージの数は仮想マシンの数よりもはるかに多く、システムの使用率は非常に高くなります。
- 高可用性と回復性:Dockerのビジネス向け高可用性サポートは、迅速な再デプロイメントによって実現されます。仮想化には、ロードバランシング、高可用性、フォールトトレランス、移行、データ保護などの運用慣行によってテストされた成熟した保証メカニズムがあります。VMwareは、ビジネスの継続性を確保するために、仮想マシンの99.999%の高可用性を約束できます。
- 迅速な作成と削除:仮想化の作成は分レベルであり、Dockerコンテナーの作成は第2レベルです。Dockerの迅速な反復により、開発、テスト、およびデプロイメントが大幅に時間を節約できると判断します。
- 配信と展開:仮想マシンは、イメージを通じて環境配信の一貫性を実現できますが、イメージの分散は体系的ではありません。Dockerはコンテナーの構築プロセスをDockerfileに記録します。これにより、クラスターでの迅速な配布と迅速なデプロイメントを実現できます。
不十分:
- 仮想マシンと比較して、Docker分離は弱く、Dockerはプロセス間の分離に属しており、仮想マシンはシステムレベルの分離を実現できます
- セキュリティ:Dockerのセキュリティも弱いです。Dockerのテナントルートはホストマシンのルートと同じです。コンテナ内のユーザーが通常のユーザー権限からルート権限にアップグレードされると、ホストマシンのルート権限を直接持ち、無制限の操作を実行できます。仮想マシンテナントのルート権限とホストマシンのルート仮想マシン権限は分離されており、仮想マシンはIntelのVT-dやVT-xなどのリング1ハードウェア分離テクノロジーを使用しているため、仮想マシンの相互侵入を防ぐことができます。相互作用、およびコンテナーにはまだハードウェア分離の形態がなく、コンテナーは攻撃に対して脆弱です
- 管理性:Dockerの集中管理ツールは成熟していません。VMware vCenterなどの成熟した管理ツールを備えたさまざまな仮想化テクノロジーは、完全な仮想マシン管理機能を提供します
2.仮想マシンと比較したコンテナーの利点
特徴 | 容器 | 仮想マシン |
---|---|---|
スタート | 第2レベル | 分レベル |
ハードディスクの使用 | 通常はMB | 一般にGB |
パフォーマンス | ネイティブに近い | より弱い |
システムサポート | 1台のマシンで数千のコンテナをサポート | 通常数十 |
2. Dockerで何ができますか?
アプリケーションを迅速かつ一貫して提供します
Dockerを使用すると、開発者は、アプリケーションとサービスを提供するローカルコンテナーを使用して、標準化された環境で動作し、開発ライフサイクルを簡略化できます。コンテナーは、継続的インテグレーションおよび継続的デリバリー(CI / CD)ワークフローに最適です。
次のシナリオ例を検討してください。
開発者はローカルでコードを記述し、Dockerコンテナーを使用して同僚と作業を共有します。
Dockerを使用して、アプリケーションをテスト環境にプッシュし、自動テストと手動テストを実行します。
開発者は、エラーを見つけた場合、開発環境でエラーを修正し、テストおよび検証のためにテスト環境に再展開できます。
テストが完了したら、パッチを適用するだけで、更新されたイメージを本番環境にプッシュできます。
迅速な導入と拡張
コンテナープラットフォームに基づくDockerの特性により、アプリケーションをサポートするための移植性が高くなります。Dockerコンテナは、開発者のローカルラップトップ、データセンターの物理マシンまたは仮想マシン、クラウドプロバイダー、またはハイブリッド環境で実行できます。
Dockerの移植性と軽量機能により、アプリケーションユニットを動的に管理し、ビジネスニーズに応じてアプリケーションとサービスを即座に拡張または破棄することも簡単になります。
同じハードウェアでより多くのアプリケーションユニットを実行する
Dockerは軽くて高速です。ハイパーバイザーベースの仮想マシンに代わる、実行可能でコスト効率の高い代替手段を提供するため、より多くのコンピューティング容量を使用してビジネス目標を達成できます。Dockerは、より多くの作業を完了するために必要なリソースが少ない、高密度環境および小規模から中規模のデプロイメントに最適です。
3、Dockerアーキテクチャ
Dockerはクライアント/サーバー(C / S)アーキテクチャを使用しています。Dockerクライアントは、Dockerコンテナーの構築、実行、および配布を担当するDockerデーモンと通信します。Dockerクライアントとデーモンは同じシステムで実行できます。または、DockerクライアントをリモートDockerデーモンに接続できます。Dockerクライアントとデーモンは、REST APIを使用してUNIXソケットまたはネットワークインターフェースを介して通信します。
1. Dockerクライアント
Dockerクライアント、別名Dockerクライアント。これは、実際にはDockerが提供するコマンドラインインターフェース(CLI)ツールであり、多くのDockerユーザーがDockerと対話するための主な方法です。クライアントはアプリケーションを構築、実行、停止でき、Docker_Hostとリモートで対話することもできます。最も一般的に使用されているDockerクライアントはdockerコマンドであり、dockerコマンドを使用してホスト上でDockerコンテナーを簡単にビルドして実行できます。
2. Dockerデーモン
Docker Daemonは、Linuxバックグラウンドサービスとして実行されるサーバーコンポーネントであり、Dockerのコアバックグラウンドプロセスであり、デーモンとも呼ばれます。Dockerクライアントからのリクエストに応答し、これらのリクエストをシステムコールに変換してコンテナ管理操作を完了します。プロセスは、バックグラウンドでAPIサーバーを起動し、Dockerクライアントから送信されたリクエストを受信します。受信されたリクエストは、Dockerデーモン内のルートを通じてディスパッチされ、特定の関数がリクエストを実行します。
3. Dockerレジストリ
Dockerレジストリは、Dockerイメージを格納するウェアハウスです。Docker Hubは誰でも使用できるパブリックレジストリであり、DockerはデフォルトでDocker Hub上のイメージを検索するように構成されています。Dockerは、プライベートリポジトリの実行をサポートしています。
使用docker pull
またはdocker run
コマンド、構成リポジトリ抽出から所望の画像。使用するdocker push
コマンドは、画像は、構成リポジトリにアップロードされます。
4. Dockerオブジェクト
画像
Dockerイメージは、特別なファイルシステムと見なすことができます。コンテナーランタイムに必要なプログラム、ライブラリ、リソース、構成ファイルを提供するだけでなく、ランタイム用に準備されたいくつかの構成パラメーター(匿名ボリューム、環境変数など)も含まれます、ユーザーなど)。画像には動的データが含まれておらず、そのコンテンツは構築後に変更されません。Dockerイメージは読み取り専用のテンプレートと考えることができ、それを介してDockerコンテナーを作成できます。
画像を生成する方法はいくつかあります。
- 最初から画像の作成を開始する
- 他の人が作成した既存の画像をダウンロードして使用する
- 既存の画像に新しい画像を作成する
コンテナ
DockerコンテナはDockerイメージのインスタンスを実行しており、プロジェクトプログラムを実際に実行し、システムリソースを消費し、サービスを提供するオブジェクトです。Docker Containerはシステムハードウェア環境を提供します。システムディスクで作成されたDockerイメージを使用できます。さらに、作成したプロジェクトコードを使用できます。runコマンドを使用してサービスを提供できます。
サービス
このサービスを使用すると、コンテナーを複数のDockerデーモンに拡張できます。複数のDockerデーモンは、複数のマネージャーとワーカーを持つグループとして連携して機能します。各メンバーはDockerデーモンであり、プロセスはDocker APIを使用して通信します。サービスは、いつでも利用可能でなければならないサービスのコピー数など、必要な状態を定義することを可能にします。デフォルトでは、サービスはすべてのワーカーノード間で負荷分散を実行します。