Dockerとは何ですか?Dockerコンテナ技術の関連理論は乾物でいっぱいです!!

序文

まず、dockerも一種の仮想化テクノロジーに属しているため、最初に仮想化の開発について説明し、次に仮想マシンとDockerをdockerと組み合わせた場合の違いについて説明します。

1.仮想化の開発

  • コンピューターの構成
1.在我们上大学的时候,就会被冯诺依曼体系洗脑,导致我们都知道了计算机是由计算器、控制器、存储器、输入、输出这五部分组成。

2.那计算器和控制器现在一般都结合在一起作为cpu,存储器一般包括内存和磁盘,输入输出一般指的是网络的I/O或者磁盘的I/O。

3.所以,我们在生活中常见的IT资源就有cpu、内存、磁盘、网卡等等这些设备,使用操作系统来驱动这些设备,让它们协同合作,这就变成了
一台完整的计算机。
  • 仮想化の背景
随着计算任务的变化,我们对计算机有了更多的需求。比如,你只有一台电脑,上面已经装了windows系统,你却想让他在跑一台linux;

再比如,你现在的电脑计算能力不够了,但是加上你同学的电脑就可以了。也就是说,我们想要计算机的资源能够具有很强的弹性伸缩能力,
可任意增长,也可任意消减。
  • 仮想化の目的
1.希望能够使用软件的方法重新定义和划分IT资源;
2.可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率;
3.使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

虚拟化目前有两个方向:

其一是把一个物理机虚拟成多个独立的逻辑虚拟机;
其二是把若干分散的物理机拟为一个大的逻辑虚拟机。现在用的较多的一般都是第一种技术。

注意:

  • 仮想化テクノロジーは、実際には非常に早い段階で提唱された概念です。長年の開発の後、その技術的な反復を次の図に示します。現在、コンテナレベルの仮想化の段階にあります。つまり、アプリケーション、開発ソフトウェアパッケージ、依存環境などが統合コンテナにパッケージ化され、コンテナ全体が他のプラットフォームまたはサーバーに展開されます。

ここに画像の説明を挿入します

次に、Dockerについて知る

2.1Dockerの概要

  • Dockerは、開発者がアプリケーションと依存関係をポータブルイメージにパッケージ化し、仮想化も可能な一般的なLinuxまたはWindowsマシンに公開できるようにするオープンソースのアプリケーションコンテナーエンジンです。コンテナはサンドボックスメカニズムを完全に使用し、コンテナ間にインターフェイスはありません。
docker也可以从以下四个方面来理解:
1)Docker是世界领先的软件容器平台;

2)Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程
进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docke最初实现是基于LXC;

3)Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件;

4)用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
  • Dockerを理解するには、コンテナーを理解することから始めることができます
1.什么是容器?
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
1) 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
2) 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
3) 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

2.容器较为通俗的解释:
如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样,
我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

ここに画像の説明を挿入します

  • Docker:コードコンテナーローダー
    Dockerを実行しているプロセスは、ウェアハウスに移動してイメージをローカルにプルし、コマンドを使用してイメージをコンテナーに実行します。したがって、Dockerをdockerまたはdockerと呼ぶことがよくあります。これは、Dockerの中国語の翻訳ポーターとまったく同じです。
    ここに画像の説明を挿入します

2.2Dockerの起源と構成

2.2.1Dockerの起源

  • Dockerは、PaaSプロバイダーdotCloudによってオープンソース化されたLXCベースの高レベルコンテナーエンジンです。ソースコードは、Githubでホストされ、Go言語とApache2.0プロトコルに準拠したオープンソースに基づいています。
  • Dockerは、githubでのコードアクティビティによるものであれ、RedhatによるRHEL6.5でのDockerの統合サポートによるものであれ、2013年以来非常に注目を集めています。GoogleのCompute Engineでさえ、Dockerでの実行をサポートしています。

2.2.2Dockerの構成

  • 完全なDockerは、次の部分で構成されています
    。Dockerクライアント:クライアント
    Dockerデーモン:デーモン
    Dockerイメージ:ミラー
    Dockerコンテナ:コンテナ
    Dockerレジストリ:イメージウェアハウス管理

补充:

  • 名前空間
Docker使用 namespace 提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建以组名称空间;
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间内运行,并且其访问仅限于该名称空间;

Docker Engine在Linux上使用以下名称空间:

1.pid 名称空间:进程隔离(PID:进程ID)
2.net 名称空间:管理网络接口(NET:网络)
3.ipc 名称空间:管理访问IPC资源(IPC:进程间通信)
4.mnt 名称空间:管理文件系统挂载点(MNT)
5.uts 名称空间:隔离内核和版本标识符 (UTS:Unix时间共享系统)
6.user命名空间:操作进程的用户和用户组
  • 基盤となるテクノロジー
    DockerはGO言語で記述されており、Linuxカーネルの複数の機能を使用してその機能を提供します

  • コンテナー形式
    DockerEngineは、名前空間、コントロールグループ、およびUnionFSをコンテナー形式と呼ばれるラッパーに結合します。デフォルトのコンテナー形式はlibcontainerです。

DockerはKVMアイランドの問題を解決します

2.3Dockerの考え方と使用シナリオ

2.3.1Dockerの3つのアイデア

  • コンテナ
  • 標準化:①輸送方法、②保管方法、③APIインターフェース
  • 隔離

2.3.2Dockerの使用シナリオ

  • パッケージ化されたアプリケーションの簡単な展開。
  • 基盤となるハードウェアから自由に移行できます(アプリケーションは分離され、アプリケーションは分割および分離されます)。例:TencentCloudからAlibabaCloudへのサーバーの移行
  • 継続的インテグレーションと継続的デリバリー(CI / CD):開発からテストリリースまで。
  • マイクロサービスをデプロイします。
  • PAAS製品の提供(Platform as a Service)
    Openstackのクラウドホストは、IAASに属するAlibaba CloudのECSに似ており、Docker(K8S)はPAASに属しています。

2.4Dockerコンテナの機能

  • マシン上で実行されている軽量の複数のDockerコンテナーは、このマシンのオペレーティングシステムカーネルを共有できます。それらは迅速に起動でき、コンピューティングリソースとメモリリソースをほとんど消費しません。イメージはファイルシステムレイヤーを介して構築され、いくつかの共通ファイルを共有します。このようにして、ディスク使用量を可能な限り減らすことができ、イメージをより速くダウンロードすることができます。
  • 標準、Dockerコンテナーはオープン標準に基づいており、すべての主流のLinuxバージョン、Microsoft Windows、およびVM、ベアメタルサーバー、クラウドを含むすべてのインフラストラクチャで実行できます。
  • セキュリティ、Dockerがアプリケーションに提供する分離は、相互の分離だけでなく、基盤となるインフラストラクチャからも独立しています。Dockerはデフォルトで最も強力な分離を提供するため、アプリケーションの問題は単一のコンテナーの問題のみであり、マシン全体に影響を与えることはありません。

2.5Dockerを使用する理由

  • 一貫した動作環境。Dockerのイメージは、カーネルを除く完全なランタイム環境を提供します。これにより、アプリケーションのランタイム環境の一貫性が保証されるため、「このコードは私のマシンで問題ありません」などの問題は発生しません。
  • より速い起動時間。それは数秒あるいは数ミリ秒の起動時間を達成することができます。開発、テスト、および展開の時間を大幅に節約します。
  • 隔離。パブリックサーバーは避けてください。リソースは他のユーザーの影響を受けやすくなります。
  • 柔軟なスケーラビリティ、迅速な拡張、サーバープレッシャーの集中的な発生への対処に優れています。
  • 便利な移行。あるプラットフォームで実行されているアプリケーションは、動作環境の変化によってアプリケーションが正常に実行されなくなることを心配することなく、別のプラットフォームに簡単に移行できます。
  • 継続的デリバリーと展開。Dockerを使用すると、アプリケーションイメージをカスタマイズすることで、継続的インテグレーション、継続的デリバリー、およびデプロイを実現できます。

使用docker的意义:

  • Dockerエンジンは、インフラストラクチャ環境(Docker環境)を統合します。
  • Dockerエンジンは、プログラムのパッケージ化(ボクシング)メソッド-Dockerイメージを統合します。
  • Dockerエンジンは、プログラムデプロイメント(実行中)モードのDockerコンテナーを統合します。

3、Dockerの基本概念

  • Dockerには、次の3つの基本概念が含まれています。
    イメージ(イメージ)
    コンテナー(コンテナー)
    ウェアハウス(リポジトリー)
    ここに画像の説明を挿入します

3.1 镜像(Image)

  • ミラーリングとは、特別なファイルシステムを指します。
    オペレーティングシステムは、カーネルスペースとユーザースペースに分かれています。Linuxの場合、カーネルの起動後、ルートファイルシステムがマウントされ、ユーザースペースのサポートが提供されます。Dockerイメージ(イメージ)はルートファイルシステムに相当します。
    特別なファイルシステムとしてのDockerイメージは、コンテナーランタイムに必要なプログラム、ライブラリ、リソース、構成、およびその他のファイルを提供するだけでなく、いくつかのランタイムファイルも含みます。準備一部の構成パラメーター(匿名ボリューム、環境変数、ユーザーなど)。イメージには動的データが含まれておらず、ビルド後にコンテンツが変更されることはありません
    。Dockerは、Union FSテクノロジーを最大限に活用し、階層型ストレージアーキテクチャとして設計するように設計されています。鏡像は、実際には多層ファイルシステムの組み合わせで構成されています。

  • 予防:

1.镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到
这个文件,但是实际上该文件会一直跟随镜像。
2.因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
  • 階層ストレージの機能により、ミラーリングの再利用とカスタマイズも簡単になります。以前に作成したイメージをベースレイヤーとして使用し、さらに新しいレイヤーを追加して、必要なものをカスタマイズし、新しいイメージを作成することもできます。

3.2コンテナ

  • コンテナは、イメージの実行時にエンティティを参照します。
  • イメージとコンテナーの関係:
    オブジェクト指向プログラミングのクラスとインスタンスと同様に、イメージは静的な定義であり、コンテナーは実行時のイメージのエンティティです。コンテナは、作成、開始、停止、削除、一時停止などが可能です。
  • コンテナの本質:これはプロセスですが、ホスト上で直接実行されるプロセスとは異なり、コンテナプロセスは独自の独立した名前空間で実行されます。前述のように、ミラーリングは階層型ストレージを使用し、コンテナーも同様に使用します。
  • コンテナストレージレイヤーのライフサイクルはコンテナのライフサイクルと同じです。コンテナが死ぬと、コンテナストレージレイヤーも死にます。
    したがって、コンテナが削除されると、コンテナのストレージレイヤーに保存されている情報はすべて失われます。

3.3リポジトリ

  • ウェアハウスは、実際にはミラーファイルが一元的に保存される場所です。
  • イメージの構築後は、現在のホストで簡単に実行できますが、このイメージを他のサーバーで使用する必要がある場合は、イメージの集中ストレージおよび配布サービスが必要です。Dockerレジストリはそのようなサービスです。
  • Dockerレジストリには複数のリポジトリを含めることができ、各リポジトリには複数のタグを含めることができます。各タグはミラーに対応します。つまり、ミラーウェアハウスは、以前使用したコードウェアハウスと同様に、Dockerがミラーファイルを一元的に保存するために使用する場所です。
  • 通常、ウェアハウスには同じソフトウェアの異なるバージョンのイメージが含まれ、タグはソフトウェアの各バージョンに対応するためによく使用されます。
    <warehouse name>:<tag>の形式を使用して、ソフトウェアのどのバージョンがミラーイメージであるかを指定できます。ラベルが指定されていない場合、最新のラベルがデフォルトのラベルとして使用されます。

补充:

一、Docker Registry 公开服务 和 私有 Docker Registry 的概念:

1.Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。
一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像;
最常使用的Registry公开服务是官方的Docker Hub ,这也是默认的Registry,并拥有大量的高质量的官方镜像。

2.除了使用公开服务外,用户还可以在本地搭建私有Docker Registry 。
Docker官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务;
开源的Docker Registry镜像只提供了Docker Registry API的服务端实现,足以支持Docker命令,不影响使用;
但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。

二、Build,Ship,and Run的概念:

Build(构建镜像):镜像就像是集装箱包括文件以及运行环境等等资源。
Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
Run (运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。

第4に、VM(仮想マシン)とコンテナーの比較

  • 簡単に言うと、コンテナと仮想マシンは、リソースの分離と割り当てにおいて同様の利点がありますが、機能が異なります。コンテナはハードウェアではなくオペレーティングシステムを仮想化するため、コンテナの移植が容易で効率的です。
  • 2つの比較
1.传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
2.而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

ここに画像の説明を挿入します

  • コンテナーと仮想マシン(VM)の概要
1.Docker以容器的方式实现了应用程序的隔离,隔离和安全性可以给主机上同时运行多个容器。
2.容器是轻量级的,因为不需要要管理撑的额外负担,而时直接在主机的内核中运行。
3.与vm虚拟机相比,可以在给定的硬件组合上运行更多的容器。甚至可以在虚拟机的主机中运行docker,具体的区别如下:
コンテナ VM
開始速度 セカンドレベル 分レベル
運転性能 ネイティブに近い 約5%の損失
ディスクの使用状況 MB GB
数十万人 一般的に1ダース
隔離 プロセスレベルの分離 システムレベル
オペレーティング・システム 主にLinuxをサポート ほぼすべてのシステムをサポート
カプセル化の程度 プロジェクトコードと依存関係のみをパッケージ化し、ホストカーネルを共有します 完全なオペレーティングシステム

注意:

  • コンテナと仮想マシン(VM)の両方が共存できます

おすすめ

転載: blog.csdn.net/weixin_42449832/article/details/114311718