Docker 仮想化テクノロジーの概要と展開およびインストール

Docker 仮想化テクノロジーの概要と展開およびインストール

1. 仮想化の概要と導入

簡単に言えば、仮想化とは、物理構造間の障壁を打ち破るために、物理リソースを論理的に管理可能なリソースに変換することです。コンピューティング要素は実際のベースではなく仮想ベースで実行されるため、ハードウェアの容量を拡張し、ソフトウェアの再構成プロセスを簡素化できます。

[[266637]]

これにより、プラットフォームで複数のオペレーティング システムを同時に実行できるようになり、アプリケーションは互いに影響を与えることなく独立した空間で実行できるため、コンピューターの効率が大幅に向上します。管理を簡素化し、リソースを最適化するソリューションです。

現在主流の仮想化テクノロジーには、KVM、Xen、VMware、VirtualBox、Docker などがあります。仮想化技術は、Taobao や Google などの企業でもますます広く利用されるようになっています。

仮想化の原則: 仮想化ソリューションの基盤は、仮想化される物理マシンです。マシンは仮想化を直接サポートする場合とサポートしない場合があります。ハイパーバイザー層からのサポートが必要になります。ハイパーバイザー (VMM) は、プラットフォーム ハードウェアとオペレーティング システム間の抽象化と考えることができます。場合によっては、ハイパーバイザーはオペレーティング システムです。この場合は、ホスト オペレーティング システムと呼ばれます。

図1. 仮想化の階層的抽象化


完全仮想化テクノロジーは、実際にはソフトウェアを使用してオペレーティング システムのリソースの再配分を実現します。当社の KVM や virtualBOX など、比較的成熟しています。

準仮想化テクノロジーは、コードを通じて既存のシステムを変更し、ハードウェア リソースを呼び出して複数のシステムをインストールし、新しい仮想化システムを形成します。全体的な速度は比較的速いです。代表的な製品としてはXenが挙げられます。

2. Dockerの紹介

Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者がアプリケーションと依存関係をポータブル コンテナにパッケージ化して、一般的な Linux マシンに公開し、仮想化を実現することもできます。

コンテナーは完全にサンドボックス化されており、コンテナー間にインターフェースはありません (iPhone アプリと同様)。パフォーマンスのオーバーヘッドはほとんどなく、マシンやデータセンターで簡単に実行できます。最も重要なのは、どの言語、フレームワーク、インクルード システムにも依存しないことです。

「Docker」は、2014 年に最も注目されるテクノロジーの 1 つになるはずです。まだ聞いたことがないなら、それは間違いです。 2015年は新たな躍進の年となるでしょう。

Docker はオープンソース化されて以来、幅広い注目と議論を集めており、dotCloud は後に Docker Inc. に改名されました。Redhat はすでに RHEL6.5 で Docker のサポートを一元化しています。 Google も PaaS 製品でこれを広く使用しています。

Docker プロジェクトの目標は、軽量なオペレーティング システム仮想化ソリューションを実装することです。 Docker の基盤は、Linux Containers (LXC) などのテクノロジーです。

Docker は LXC をさらにカプセル化するため、ユーザーはコンテナ管理を気にする必要がなく、操作が容易になります。ユーザーは、高速で軽量な仮想マシンを操作するのと同じくらい簡単に Docker コンテナを操作できます。

以下では、Docker と従来の仮想化方式 (KVM、XEN など) の違いを比較します。 Docker コンテナはオペレーティング システム レベルで仮想化を実装し、ローカル ホストのオペレーティング システムを直接再利用しますが、従来の方法では、ハードウェアに基づいて独自のシステムを仮想化し、関連する APP アプリケーションをシステムに展開します。

仮想化にはNginxソフトウェアを実行する必要がある

次の図は、従来の仮想化ソリューションを示しています。

以下は Docker 仮想化ソリューションです。

3. Docker 仮想化には、イメージ、コンテナ、ウェアハウスという 3 つの概念を理解する必要があります。

イメージ: Docker イメージは、実際には一般的な ISO イメージに似たテンプレートであり、モデルです。

コンテナ: イメージを使用する一般的なアプリケーションまたはシステムはコンテナと呼ばれます。

ウェアハウス: ウェアハウスは画像が保存される場所で、パブリックウェアハウス (Public) とプライベートウェアハウス (Private) の 2 つの形式に分かれています。

Docker LXC と Cgroup

Docker はもともと LXC + AUFS の組み合わせでした。 Docker バージョン 0.9.0 では、LXC の代替として考えられる libcontainer が導入され始めました。 LXC はリソース管理を担当し、AUFS はイメージ管理を担当します。 LXC には cgroup、namespace、chroot などのコンポーネントが含まれており、cgroup を通じてリソース管理を実行します。

リソース管理の観点から見ると、Docker、LXC、Cgroup の関係は次のようになります。Cgroup は最上位層でリソース管理を実装し、LXC は cgroup 上の層をカプセル化し、Docker は LXC 上の別の層をカプセル化します。 Dockerをしっかり学びたいなら、リソース管理を担うCGroupとLXCを理解する必要があります。

Cgroups はコントロール グループの略語です。これは、プロセス グループによって使用される物理リソース (CPU、メモリ、IO など) を制限、記録、分離できる、Linux カーネルによって提供されるメカニズムです。

これはもともと Google のエンジニアによって提案され、後に Linux カーネルに統合されました。 Cgroups は、LXC が仮想化を実現するために使用するリソース管理方法でもあります。 Cgroups がなければ、LXC も Docker も存在しなかったと言えるでしょう。

Cgroups の当初の目標は、リソース管理のための統一されたフレームワークを提供し、Cpuset などの既存のサブシステムを統合し、将来の新しいサブシステムの開発のためのインターフェースを提供することでした。今日の Cgroup は、単一プロセスのリソース制御から OS レベルの仮想化の実装まで、さまざまなアプリケーション シナリオに適しています。

LinuxContainer コンテナーは、命令解釈メカニズムや完全仮想化のその他の複雑さを提供せずに、プロセスとリソースを分離するための軽量仮想化を提供できます。コンテナーは、単一のオペレーティング システムによって管理されるリソースを分離されたグループに効果的に分割し、分離されたグループ間で競合するリソース使用要件のバランスを改善します。

LXC は CGroup をベースに構築されています。大まかに言えば、LXC = Cgroup + namespace + Chroot + veth + ユーザーモード制御スクリプトと考えることができます。 LXC は新しいカーネル機能 (CGroup) を使用してユーザー空間オブジェクトを提供し、アプリケーションまたはシステムのリソースの分離とリソース制御を保証します。

一般的な Linux ファイル システムは、bootfs と rootfs の 2 つの部分で構成されます。 Bootfs (ブート ファイル システム) には、主にブートローダとカーネルが含まれます。ブートローダは主にカーネルをロードするために使用されます。カーネルがメモリにロードされると、bootfs はアンマウントされます。 rootfs (ルート ファイル システム) には、一般的な Linux システムの /dev、/proc、/bin、/etc などの標準ディレクトリとファイルが含まれます。

[[266639]]

Docker コンテナのファイル システムは、もともと Aufs 上に構築されました。 Aufs (Another Union File System) は、Union FS です。簡単に言えば、同じ仮想ファイルシステムに異なるディレクトリをマウントすることをサポートし、レイヤーの概念を実装します。

Aufs は Linux カーネルに追加されなかったため、互換性上の理由から Devicemapper サポートが追加されました。 Docker は現在、デフォルトで DeviceMapper 上で実行されます。

Aufs は、同じ仮想ファイルシステムにマウントされた複数のディレクトリの権限を、読み取り専用、読み取り/書き込み、ホワイトアウト可能に設定します。読み取り専用ディレクトリでは読み取りのみが可能であり、書き込み操作は読み取り/書き込みディレクトリに対してのみ実行できます。重要な点は、書き込み操作は読み取り専用ディレクトリに対する増分操作であり、読み取り専用ディレクトリには影響を及ぼさないことです。ディレクトリをマウントするときは、ディレクトリ間の増分関係に厳密に従う必要があります。増分操作するディレクトリは、増分操作するディレクトリより先に、その基にマウントしておく必要があります。すべてのディレクトリがマウントされた後、読み取り/書き込みディレクトリのマウントを続行し、階層構造を形成します。

従来の Linux は、bootfs をロードするときに、最初に rootfs を読み取り専用に設定し、システムのセルフチェック後に rootfs を読み取り専用から読み書き可能に変更し、その後、rootfs に対して書き込み操作と読み取り操作を実行できるようになります。しかし、Docker イメージの場合はそうではありません。 bootfs のセルフチェックが完了した後、rootfs の読み取り専用が読み取り/書き込みに変更されることはありません。代わりに、union mount (UnionFS のマウント メカニズム) を使用して、1 つ以上の読み取り専用 rootfs を以前の読み取り専用 rootfs レイヤーにロードします。

非常に多くの層の rootfs をロードした後でも、それは単なるファイルシステムのように見えます。 Docker システムでは、ユニオンマウントのこれらの読み取り専用 rootfs は Docker イメージと呼ばれます。ただし、現時点では rootfs の各レイヤーは読み取り専用であり、操作することはできません。コンテナを作成すると、つまり Docker イメージをインスタンス化すると、システムは 1 つ以上の読み取り専用 rootfs レイヤーの上に空の読み取り/書き込み rootfs を割り当てます。

デバイス マッパーは、Linux 2.6 カーネルで論理ボリューム管理をサポートする一般的なデバイス マッピング メカニズムです。ストレージ リソース管理用のブロック デバイス ドライバーを実装するための、高度にモジュール化されたカーネル アーキテクチャを提供します。 Device Mapper のカーネル アーキテクチャは次のとおりです。

カーネルでは、モジュラー ターゲット ドライバー プラグインを通じて IO 要求のフィルタリングまたはリダイレクトを実装します。現在実装されているターゲット ドライバー プラグインには、ソフト RAID、ソフト暗号化、論理ボリューム ストライピング、マルチパス、ミラー、スナップショットなどがあります。図では、リニア、ミラー、スナップショット、マルチパスがこれらのターゲット ドライバーを表しています。デバイス マッパーは、Linux カーネル設計におけるポリシーとメカニズムの分離の原則をさらに具体化し、ポリシー関連の作業をすべてユーザー空間に置き、カーネルは主にこれらのポリシーを実装するために必要なメカニズムを提供します。

デバイス マッパーのユーザー スペース関連部分は、論理デバイスをどの物理デバイスにマップするか、これらのマッピング関係をどのように確立するかなど、特定のポリシーと制御ロジックを構成することを主に担当し、IO 要求のフィルタリングとリダイレクトの具体的な作業はカーネル内の関連コードによって完了します。したがって、デバイス マッパー メカニズム全体は、カーネル空間デバイス マッパー ドライバー、ユーザー空間デバイス マッパー ライブラリ、およびそれが提供する dmsetup ツールの 2 つの部分で構成されます。

4. Docker仮想化の特徴

従来の VM と比較して、次の利点があります。

素早い操作開始

実行時のパフォーマンスが大幅に向上し、管理操作 (開始、停止、起動、再起動など) はすべて秒またはミリ秒単位で測定されます。

軽量仮想化

十分な「OS」があり、画像を追加または削除するだけで済みます。サーバー上に100~1000個のコンテナをデプロイできます。しかし、従来の仮想化では、10 ~ 20 台の仮想マシンを仮想化できれば幸運な方です。

オープンソースで無料

オープンソース、無料、低コスト。最新の Linux カーネルによってサポートおよび駆動されます。注* 軽量コンテナは、物理マシン上でより多くの「コンテナ」を開くことができ、VM よりも安価になるはずです。

Outlook とクラウドのサポート

ますます人気が高まっており、大手主流企業はパフォーマンス上の大きな利点を持つ Docker の急速な開発を推進しています。

従来の VM と比較すると、次の欠点があります。

  • 現時点ではそれについて知っている人はほとんどいません。
  • 関連する技術情報の欠如;
  • Go 言語はまだ完全に成熟していません。

5. Dockerを使用する理由

Docker には、次の点で大きな利点があります。

より迅速な配信と展開

Docker は、開発サイクル全体を通じて迅速な配信を実現するのに大いに役立ちます。 Docker を使用すると、開発者はアプリケーションとサービスを含むローカル コンテナー内で開発を行うことができます。持続可能な開発プロセスに直接統合できます。

開発者は標準イメージを使用して開発コンテナのセットを構築できます。開発が完了すると、運用・保守担当者はこのコンテナを直接使用してコードをデプロイできます。 Docker を使用すると、コンテナをすばやく作成し、アプリケーションをすばやく反復処理し、プロセス全体を可視化できるため、チームの他のメンバーがアプリケーションの作成方法と動作を理解しやすくなります。 Docker コンテナは軽量かつ高速です。コンテナの起動時間は数秒単位なので、開発、テスト、展開にかかる時間を大幅に節約できます。

効率的な展開と拡張

Docker コンテナは、物理マシン、仮想マシン、パブリック クラウド、プライベート クラウド、パーソナル コンピューター、サーバーなど、ほぼすべてのプラットフォームで実行できます。この互換性により、ユーザーはアプリケーションをあるプラットフォームから別のプラットフォームに直接移行できます。

Docker の互換性と軽量機能により、動的な負荷管理を簡単に実現できます。アプリケーションやサービスをほぼリアルタイムで迅速にスケールアップまたはスケールダウンできます。

リソース利用率の向上

Docker はシステム リソースの利用率が高く、ホスト上で数千の Docker コンテナを同時に実行できます。コンテナは、その内部でアプリケーションを実行するだけでなく、基本的に追加のシステム リソースを消費しないため、アプリケーションのパフォーマンスが非常に高くなり、システムのオーバーヘッドが最小限に抑えられます。従来の仮想マシン方式では、10 個の異なるアプリケーションを実行するために 10 個の仮想マシンを起動する必要がありますが、Docker では 10 個の分離されたアプリケーションを起動するだけで済みます。

管理が簡単

Docker を使用すると、これまでの大量の更新作業を置き換えるには、わずかな変更のみが必要です。すべての変更は増分的に配布および更新されるため、自動化された効率的な管理が可能になります。

Docker エンジン アーキテクチャ

Docker エンジンは C/S 構造のアプリケーションであり、そのコンポーネントは図に示されています。

  • サーバーは常駐プロセスです。
  • REST API はクライアントとサーバー間の相互作用プロトコルを実装します。
  • CLI はコンテナとイメージの管理を実装し、ユーザーに統一された操作インターフェースを提供します。

Docker は C/S アーキテクチャを使用します。クライアントは、インターフェースを介してサーバー プロセスと通信し、コンテナーを構築、実行、およびリリースします。クライアントとサーバーは同じクラスター内で実行することも、ホスト間でリモート通信することもできます。アーキテクチャを図に示します。

実際の操作は次のようになります。

6. Dockerのインストールと設定

システム環境: CentOS 7.4 (Docker 公式ドキュメントによると Linux カーネル 3.8 以上が必要)、以下のコマンドを実行します。

  1. [root@localhost ~]# yum -y dockerをインストール

インストール後:

dockerプロセスを開始します: systemctl start docker.service

docker プロセスを表示します: ps -ef | grepドッカー

Dockerは使いやすい

docker仮想化を使用するには、まずイメージをダウンロードし、dockerコマンドを使用して起動する必要があります。

1) 画像をダウンロードする

  1. [root@localhost ~]# docker search centos
  2. [root@localhost ~]# docker pull centos

2) Dockerコンテナを起動する

3) コンテナに入る

  1. [root@localhost ~]# docker exec -it f48a681da213 /bin/bash


7. 一般的なDockerコマンドの説明

docker バージョン #バージョンを表示

docker search centos #利用可能な docker イメージを検索

docker イメージ #現在のすべての docker イメージを表示

docker pull centos #イメージをダウンロード

cat centos.tar | docker インポート - centos6_newname #Docker インポートイメージ

docker export container_id > cenos6.tar #Dockerはイメージをエクスポートします

docker run centos echo "hello word" #docker コンテナで hello world を実行します。

docker run centos yum install ntpdate #コンテナにntpdateプログラムをインストールします

docker ps -l #最後のコンテナのIDを取得するコマンド

docker ps -a #すべてのコンテナを表示します。

新しく変更されたコンテナをコミットするには、docker commit を実行します。次に例を示します。

docker コミット 2313132 centos:v1

docker run -i –t -d centos /bin/bash はコンテナ内で /bin/bash シェル環境を起動し、ログインして操作できるようになります。 -t はターミナルを開くことを意味し、 -i は対話型入力が可能であることを意味します。

docker run -d centos:v1 /bin/bash 、 -d はバックグラウンドで起動し、デーモン モードで起動することを意味します。

Docker stop id #コンテナをシャットダウンする

Docker 開始 ID #コンテナを起動する

docker rm id #コンテナを削除

docker rmi イメージ #イメージを削除

docker run -d -p 80:80 -p 8022:22 centos:v2、分析:-p は、コンテナの起動後に docker で実行されるポート マッピングと、コンテナ内で実行されるポート 80:80 を指定します。最初の 80 は docker システム上の 80 を表し、2 番目の 80 は docker 仮想マシン内のポートを表します。デフォルトでは、ユーザーはローカル マシンのポート 80 にアクセスし、これはコンテナーのポート 80 に自動的にマップされます。

docker exec -it id /bin/bash #コンテナに入る

<<:  警察におけるクラウドファーストの変革

>>:  統合から未来への洞察: クラウド コンピューティング、データ、AI の衝突から得られる革新的な洞察

推薦する

目を引く EDM 電子メール テンプレートをデザインするにはどうすればよいでしょうか?

月収10万元の起業の夢を実現するミニプログラム起業支援プラン誰もが気に入る、あるいは賞賛するような大...

新しいウェブサイトのターゲットキーワードのポジショニングで勝つ方法

ターゲット キーワードの配置とは、Web サイトのホームページのキーワードを配置することを意味します...

天亜コミュニティのユーザーパスワードがハッカーによって漏洩、4000万人のユーザーが関与

天亜のユーザーパスワードがハッカーに漏洩12月22日に中国最大の開発者コミュニティであるCSDN.N...

Google ツールバーの PR 更新とランキング変更に関する誤解

最近、Google ツールバー PR が再度更新されました。アップデートはまだ終わっていないような気...

無料 VPS、海外無料 VPS、海外永久無料 VPS

無料の VPS をお探しですか?永続的な VPS ですか?海外で永久に無料の VPS をお探しですか...

Kubernetes コマンドライン ツール (kubectl)

1. 概要kubectl は、Kubernetes クラスターのコマンドライン ツールです。クラスタ...

「技術的負債」を解消するにはどうすればいいでしょうか?効率的な DevOps チームのための 6 つの核兵器

[51CTO.com からのオリジナル記事] 現在、Netflix、Etsy、Flickr などの企...

カーオーディオウェブサイトのキーワード計画と考察

キーワードグローバルプランニングの目的: 1. より効率的なウェブサイトを構築する。 2. 検索エン...

クラウド コンピューティングのコスト評価の問題と解決策

現在、多くの企業がクラウド コンピューティングの実装で 2 年以上の経験を持ち、ほぼすべての主流企業...

エッジコンピューティングの概要を1分で簡単に理解する

IT・OT両分野の主流メーカーは「エッジコンピューティング」に注目しています。エッジ コンピューティ...

「マスターコング牛肉麺調味料パッケージ」の視点からユーザーエクスペリエンスを語る

最近仕事がとても忙しくて、家に帰るのは午後7時頃になることが多いです。昨日はさらに悲惨でした。夜の9...

草の根ウェブマスターの SEO の旅の簡単な分析

あっという間にまた一年が過ぎ、2013年が終わり、新しい年が始まろうとしています。考えてみると、ウェ...

B2C ウェブサイトがユーザーを引き付ける方法: 製品タイトルの「叫び」について語る

当初は「B2Cの叫び」というタイトルにしようと思っていたのですが、後からクリックベイトっぽすぎるし、...

2020 年、クラウド コンピューティングは上位 4 社による戦いになるのでしょうか、それとも勝者総取りになるのでしょうか。

最近、Googleの親会社であるAlphabetが初めてGoogleのクラウドコンピューティング事業...

Amazon SageMaker が中国の AWS 寧夏および北京リージョンで利用可能になりました

[ 2020年5月12日北京] Amazon のクラウドサービスである Amazon Web Se...