記事は、最初の公開のマイクロチャンネル番号「プログラマの果実」に登場
住所:https://mp.weixin.qq.com/s/8VM-c_UkxYcVw2Itiapw4w
、ドッカープロフィール
コンテナとは何ですか?
- 仮想技術ソリューションの種類
- OSレベルの仮想化
- カーネルを実行している唯一の同じまたは類似のオペレーティングシステム
- これは、Linuxカーネルの特性に依存:名前空間とのcgroup(制御グループ)
コンテナ技術の利点は何ですか?
私たちは、ハードウェア仮想マシンの挙動をシミュレートする必要性のために図からわかるコンテナ、コンテナ技術のフットプリントが比較的小さい、記憶喪失であり、CUPは比較的大きいです。そのため、サーバーの同じ構成、コンテナ技術は、次のような利点があります。
- リソース消費量が比較的小さいです
- 低CPU /メモリ消費量
これらの利点は、なぜドッカー年代まで、本当にこのことについて懸念しているコンテナ以来?重要な理由は、血管技術の複雑さです。コンテナ自体は、彼はLinuxカーネルの多くの機能に依存している、と彼は、インストールが簡単に管理することは容易ではないと自動化されていない、非常に複雑です。ドッカーがすべてこれは生産に変更することです。
ドッカーとは何ですか?
- アプリケーションは自動的に、コンテナ、オープンソースエンジンに配備されています
- 言語のオープンソースプロジェクトを移動し、初期の2013年に誕生した、同社は当初、イニシエータはdotCloudです
ドッカー機能
- それは、シンプルで軽量なモデルを提供し、単純な、非常にドッカーコンテナを始めるために、ユーザーはあなたがドッカーの独自のプロジェクトを置くことができ、わずか数分が必要になります。
- ロジック・業務の分離:ドッカーを使用して、開発者は運用・保守要員が唯一のコンテナを管理する方法を心配する必要がある、唯一のコンテナで実行中のプログラムを気必要があります。ドッカー設計の目的は、展開されるように、コード環境とアプリケーションを作成するために、ビルド環境の開発を強化することです一貫性。
- 迅速かつ効率的な開発ライフサイクル:ドッカー目標の一つは、容器の形で容器、送達および分布の検査を、そのような開発を開発したアプリケーションの移植ように、ライン上の展開動作サイクル試験にコード開発を低減することです生産は、同じ環境を使用するので、私たちは、効果的に製品ラインのサイクルを短縮することができるように、それは、追加のデバッグおよび展開のオーバーヘッドを回避できます。
- サービス指向アーキテクチャの使用を奨励:ドッカーこのモードアプリケーションまたはサービスに、従って分散アプリケーション・モデルを形成する、唯一のアプリケーションまたはプロセスを実行するための単一の容器を推薦する相互接続された内部容器の一連のように記述することができますそのため、デプロイ、分散アプリケーションの拡張やデバッグが非常に簡単になります。それは我々が開発し、共通の考えのようだ。高い凝集、低カップリング、シングルタスク。サービスを持って互いの間で影響を与える可能性があり、同じサーバー上のさまざまなサービスの展開を避けるように。問題は、問題がどこにあるか見つけるために、このようなサービスが、また、比較的容易な操作で発生した場合。
ドッカーの使用シナリオ
-
- ドッカーコンテナの使用、開発、テスト、導入サービス:ドッカー自体は非常に軽量であるため、その地域の開発者は、構築、実行およびドッカーコンテナを共有することができます。コンテナは、最終的に生産にテストに提出する前に、開発環境で作成することができます。
-
- 分離された動作環境を作成します:多くのエンタープライズアプリケーションでは、同じサービスの異なるバージョンが異なるユーザーにサービスを提供して、別のサービスを実行するために別のビルド環境を作成ドッカーを使用することは非常に簡単です。
-
- テスト環境をセットアップします:により軽量ドッカーに、ドッカーがローカルテスト環境をセットアップするの開発者が容易に利用することができますので、システムの互換性をテストするために使用されるプログラムはありません。でも、デプロイのテストクラスタを構築します。
-
- サービス(PaaSの)インフラとしてマルチユーザプラットフォームの構築。
-
- サービス(SaaS型)アプリケーションなどのソフトウェアを提供します。
-
- 高性能、超大規模な展開ホスト。
ドッカーの第二に、基本組成
ドッカーは、いくつかの重要な主要部分を見ています
- ドッカークライアントクライアント
- ドッカーデーモンデーモン
- ドッカーイメージミラー
- ドッカーコンテナ船
- ドッカーレジストリ倉庫
ドッカークライアント/デーモン
- Docker是C/S架构的程序:Docker客户端向Docker服务器端,也就是Docker的守护进程发出请求,守护进程处理完所有的请求工作并返回结果。
- Docker 客户端对服务器端的访问既可以是本地也可以通过远程来访问。
Docker Image 镜像
- 镜像是Docker容器的基石,容器基于镜像启动和运行。镜像就好比容器的源代码,保存了用于启动容器的各种条件。
- Docker镜像是一个层叠的只读文件系统。
- Docker镜像使用联合加载技术
docker的镜像是一个层叠的只读文件系统,最低端是一个引导文件系统(即bootfs),第二层是root文件系统(即rootfs),它位于bootfs之上,可以是一种或多种操作系统,比如ubuntu或者centos。在docker中,root文件系统永远只能是只读状态,并且docker运用联合加载技术又会在root文件系统之上加载更多的只读文件系统,联合加载指的是一次加载多个文件系统,但是在外面看起来只能看到一个文件系统,联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有的底层文件和目录,docker将这样的文件系统称为镜像。
Docker Container 容器
- 容器通过镜像来启动,Docker的容器是Docker的执行来源,容器中可以运行客户的一个或多个进程,如果说镜像是Docker声明周期中的构建和打包阶段,那么容器则是启动和执行阶段。
当一个容器启动时,docker会在该镜像的最顶层加载一个读写文件系统,也就是一个可写的文件层,我们在docker运行的程序,就是在这个层中进行执行的,当docker第一次启动一个容器时,初始的读写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上,比如像修改一个文件,该文件首先会从读写层下面的只读层复制到该读写层,该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏,这就是docker的一个重要技术:写时复制(copy on write)。每个只读镜像层都是只读的,永远不会变化,当创建一个新容器时,docker会构建出一个镜像栈,如下图所示:
Docker Registry 仓库
- docker用仓库来保存用户构建的镜像,仓库分为公有和私有两种,Docker公司提供了一个公有的仓库Docker Hub。
三、Docker 依赖的 Linux内核特性
Docker依赖于Linux内核的两个重要特性:
- Namespaces 命名空间
- Control groups (cgroups) 控制组
Namespaces 命名空间
很多编程语言都包含了“命名空间”的概念,我们可以认为“命名空间”是一种“封装”的概念, 而“封装”本身实际上实现的是代码的隔离。而在操作系统中,命名空间提供的是系统资源的隔离,而系统资源包括了进程、网络、文件系统等。
我们从Docker公开的文档来看,它使用了5种命名空间:
- PID(Process ID) 进程隔离
- NET(Network)管理网络接口
- IPC(InterProcess Communication)管理跨进程通信的访问
- MNT(Mount)管理挂载点
- UTS(Unix Timesharing System) 隔离内核和版本标识
那么,这些隔离的资源,是如何被管理起来的呢?这就需要用到——Control groups(cgroup)控制组了。
Control groups (cgroups) 控制组
対照群は、Linuxカーネルが可能限界、レコード、グループが使用する物理リソースのプロセス分離メカニズムを提供しています。
もともとGoogleのエンジニアによって提案され、2007年にLinuxカーネルのバージョン2.6.24で導入されました。コンテナのコントロール群が生まれ、全く対照群は、今日何のコンテナテクノロジーないだろうが存在し、言うことができます。
対照群は、以下の機能を提供します。
-
リソースの制限:たとえば、メモリ(RAM)のサブシステムが上限メモリ使用量を設定するグループを処理することができ、メモリの使用プロセスグループが制限、メモリのアプリケーションを再度発行したプロセスグループに達すると、それは「メモリ不足」を送信します(メモリのうち)警告。
-
優先度の設定:それはより多くのCPUリソースやディスクIOを使用することができ、プロセス・グループを設定することができます。
-
リソースメータリング:それはどのくらいのシステムリソース設定プロセスを用いて算出することができます。特に、非常に重要である課金システム、インチ
- リソース制御:それは中断またはプロセスグループを再開することができます。
名前空間とドッカーののcgroupをもたらす能力
ここでは、二つの特性ドッカーどのような立場をもたらした名前空間とのcgroupの概念と機能を理解できますか?次のように:
-
ファイルシステムの分離:分離は、各ドッカーコンテナは、独自のルートファイルシステムを持つことができ、最初のファイルシステムです。
-
プロセスの分離:独自のプロセス環境で実行した各コンテナ。
-
ネットワーク隔離:コンテナ間の仮想ネットワークインターフェイスとIPアドレスが分離されています。
- 単離およびグループリソース:各コンテナにかかるドッカーのcgroup CPUおよびメモリリソースを使用して独立した割り当て。
私は公共の番号「プログラマの果実」の注目を歓迎し、驚きに関する~~