アーキテクトになるには、Javaの高度な知識ポイントを習得することに加えて、2つの必須ツール(Docker)のいずれかを使用する方法も学ぶ必要があります。


この記事では、Dockerの概念をより詳細に紹介するだけであり、Docker環境などのインストールやDockerの一般的な操作やコマンドについては触れていません。

一つ、コンテナを知っている

Dockerは世界をリードするソフトウェアコンテナプラットフォームであるため、Dockerの概念を理解するには、まずコンテナから始める必要があります。

1.コンテナとは何ですか?

1)最初にコンテナのより公式な説明を見てみましょう

コンテナを1つの文に要約します。コンテナとは、開発、配信、および展開のためにソフトウェアを標準化されたユニットにパッケージ化したものです。

  • コンテナイメージは、ソフトウェアの実行に必要なすべてのコンテンツ(コード、ランタイム環境、システムツール、システムライブラリ、設定)を含む、軽量で実行可能なスタンドアロンのソフトウェアパッケージです。
  • コンテナ化されたソフトウェアは、LinuxおよびWindowsベースのアプリケーションに適しており、どのような環境でも一貫して実行できます。
  • コンテナはソフトウェアに独立性与え、外部環境の違い(開発環境やリハーサル環境など)から保護することで、同じインフラストラクチャで異なるソフトウェアを実行しているチーム間の競合を減らすのに役立ちます。

2)コンテナのより一般的な説明を見てみましょう

コンテナの一般的な説明が必要な場合、コンテナは物を保管する場所だと思います。まるで、ランドセルはあらゆる種類の文房具を収納でき、クローゼットはあらゆる種類の服を収納でき、シューラックはあらゆる種類の靴を収納できます。コンテナストレージについて話していることは、Webサイト、プログラム、さらにはシステム環境などのアプリケーションに偏っている可能性があります。

2.グラフィカルな物理マシン、仮想マシン、およびコンテナ

仮想マシンとコンテナの比較については後で詳しく説明します。ここでは、インターネット上の画像(下の画像のソースとネットワーク)を通じて、物理マシン、仮想マシン、およびコンテナについてのすべての人の理解を深めます。

物理マシン

仮想マシン:

コンテナ:

上記の3つの抽象的な図から、類推によって大まかに一般化できます。コンテナはハードウェアではなくオペレーティングシステムを仮想化し、コンテナは同じオペレーティングシステムリソースのセットを共有します。仮想マシンテクノロジーは、一連のハードウェアを仮想化し、その上で完全なオペレーティングシステムを実行することです。したがって、コンテナの分離レベルはわずかに低くなります。


以上の説明により、誰もがなじみのないコンテナの概念を予備的に理解していると思います。Dockerのいくつかの概念について話しましょう。

次に、Dockerのいくつかの概念について説明しましょう

1. Dockerとは何ですか?

Dockerとは正直に言うと、簡単に言うことはできません。Dockerとは4つのポイントで説明します。

  • Dockerは、世界をリードするソフトウェアコンテナプラットフォームです。
  • Dockerは、Linuxカーネルによって提供されるCGroup関数と名前空間、およびAUFSのようなUnionFSやその他のテクノロジー基づいて開発と実装にGoogle立ち上げたGo言語を使用して、オペレーティングシステムレベルの仮想化テクノロジーであるプロセスをカプセル化および分離します。分離されたプロセスは、ホストや他の分離されたプロセスから独立しているため、コンテナとも呼ばれます。
  • Dockerは、開発環境のセットアップや構成などの反復的なタスクを自動化し、開発者が本当に重要なこと、つまり優れたソフトウェアの構築に集中できるようにします。
  • ユーザーはコンテナを簡単に作成して使用し、独自のアプリケーションをコンテナに入れることができます。コンテナは、通常のコードを管理するのと同じように、バージョン管理、コピー、共有、および変更を実行することもできます。

2.ドッカーは考えた

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

3.Dockerコンテナの機能

  • 軽量

マシン上で実行されている複数のDockerコンテナは、このマシンのオペレーティングシステムカーネルを共有できます。それらは迅速に起動でき、必要なコンピューティングリソースとメモリリソースはごくわずかです。ミラーはファイルシステムレイヤーを介して構築され、いくつかの共通ファイルを共有します。これにより、ディスクの使用量が最小限に抑えられ、画像のダウンロードが高速になります。

  • 標準

Dockerコンテナはオープンスタンダードに基づいており、すべての主要なLinuxバージョン、Microsoft Windows、およびVM、ベアメタルサーバー、クラウドを含むすべてのインフラストラクチャで実行できます。

  • 安全性

Dockerがアプリケーションに提供する分離は、相互の分離だけでなく、基盤となるインフラストラクチャからも独立しています。Dockerはデフォルトで最も強力な分離を提供するため、アプリケーションの問題は単一のコンテナーの問題のみであり、マシン全体に影響を与えることはありません。

4.なぜDockerを使用するのですか?

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

3、コンテナVS仮想マシン

コンテナについて話すとき、それらを仮想マシンと比較する必要があります。私の知る限り、どちらを置き換えるかは問題ではありませんが、2つは調和して共存できます。

簡単に言うと、コンテナと仮想マシンは、リソースの分離と割り当てにおいて同様の利点がありますが、機能が異なります。コンテナはハードウェアではなくオペレーティングシステムを仮想化するため、コンテナの移植が容易で効率的です。

1.2つの比較

従来の仮想マシンテクノロジーは、ハードウェアのセットを仮想化し、その上で完全なオペレーティングシステムを実行してから、システム上で必要なアプリケーションプロセスを実行することです。一方、コンテナ内のアプリケーションプロセスはホストのカーネル上で直接実行され、コンテナには独自のプロセスがありません。カーネルであり、ハードウェアの仮想化はありません。したがって、コンテナは従来の仮想マシンよりも軽量です。

2.コンテナと仮想マシンの概要

  • ** Containerは、コードと依存リソースを一緒にパッケージ化するために使用されるアプリケーションレイヤーの抽象化です。複数のコンテナを同じマシンで実行して、オペレーティングシステムカーネルを共有できますが、それぞれがユーザースペースで独立したプロセスとして実行されます。**仮想マシンと比較して、コンテナは占有するスペースが少なく(コンテナイメージのサイズは通常数十メガバイトのみ)、起動を瞬時に完了することができます
  • 仮想マシン(VM)は、1つのサーバーを複数のサーバーに変換するために使用される物理ハードウェアレイヤーの抽象化です。ハイパーバイザーを使用すると、1台のマシンで複数のVMを実行できます。それぞれにVMオペレーティングシステムのセット、1つ以上のアプリケーション、必要なバイナリ、およびライブラリリソースが含まれているため、多くのスペースを占有します。また、VMの起動は非常に遅いです。

Dockerの公式Webサイトを通じて、Dockerの多くの利点を知っていますが、仮想マシンテクノロジーは使用シナリオが異なるため、完全に否定する必要はありません。**仮想マシンは、動作環境全体を完全に分離するのに優れています。**たとえば、クラウドサービスプロバイダーは通常、仮想マシンテクノロジーを使用してさまざまなユーザーを分離します。また、Dockerは、フロントエンド、リアエンド、データベースなど、さまざまなアプリケーションを分離するために一般的に使用されます。

3.コンテナと仮想マシンの両方が共存できます

私の知る限り、どちらを置き換えるかは問題ではありませんが、2つは調和して共存できます。

4、Dockerの基本概念

Dockerには3つの非常に重要な基本概念があります。これらの3つの概念を理解すると、Dockerのライフサイクル全体を理解できます。

  • 镜像(Image)
  • コンテナ(コンテナ)
  • リポジトリ

これらの3つの概念を理解すると、Dockerのライフサイクル全体を理解できます。

1.画像:特別なファイルシステム

**オペレーティングシステムはカーネルスペースとユーザースペースに分かれています。** Linuxの場合、カーネルの起動後に、ルートファイルシステムがマウントされ、ユーザースペースのサポートが提供されます。Dockerイメージ(Image)は、ルートファイルシステムに相当します。

Dockerイメージは、特別なファイルシステムです。コンテナーランタイムに必要なプログラム、ライブラリ、リソース、構成、およびその他のファイルを提供するだけでなく、ランタイム用に準備されたいくつかの構成パラメーター(匿名ボリューム、環境変数、ユーザーなど)も含まれます。 )。イメージには動的データが含まれておらず、ビルド後にコンテンツが変更されることはありません。

Dockerの設計は、Union FSテクノロジーを最大限に活用し、階層型ストレージアーキテクチャとして設計されています。ミラーは、実際にはマルチレイヤーファイルシステムの組み合わせで構成されています。

ミラーリングが構築されると、レイヤーごとに構築され、前者のレイヤーが後者のレイヤーの基盤になります。各レイヤーが構築された後、変更はありません。後者のレイヤーでの変更は、自分のレイヤーでのみ発生します。たとえば、前のレイヤーのファイルを削除する操作は、実際には前のレイヤーのファイルを削除するのではなく、現在のレイヤーでファイルを削除済みとしてマークするだけです。最終的なコンテナが実行されると、このファイルは表示されませんが、実際にはファイルは常にイメージに従います。したがって、ミラーを作成するときは、特に注意する必要があります。各レイヤーには、そのレイヤーに追加する必要があるものだけを含める必要があり、余分なものは、レイヤーの作成が完了する前にクリーンアップする必要があります。

階層ストレージ機能により、ミラーリングの再利用とカスタマイズも簡単になります。以前に作成したイメージをベースレイヤーとして使用し、さらに新しいレイヤーを追加して、必要なものをカスタマイズし、新しいイメージを作成することもできます。

2.コンテナ:ランタイムをミラーリングするエンティティ

イメージ(Image)とコンテナー(Container)の関係は、オブジェクト指向プログラミングのクラスとインスタンスのようなものです。イメージは静的な定義であり、コンテナーは実行時のイメージのエンティティです。コンテナは、作成、開始、停止、削除、一時停止などが可能です。

コンテナの本質はプロセスですが、ホスト上で直接実行されるプロセスとは異なり、コンテナプロセスは独自の独立した名前名で実行されます。前述のように、ミラーリングは階層型ストレージを使用し、コンテナも同様に使用します。

コンテナ保管層のライフサイクルはコンテナのライフサイクルと同じです。コンテナが死ぬと、コンテナ貯蔵層も死にます。したがって、コンテナが削除されると、コンテナストレージレイヤーに保存されている情報はすべて失われます。

Dockerのベストプラクティスの要件によれば、コンテナはストレージレイヤーにデータを書き込まないようにし、コンテナストレージレイヤーはステートレスのままにする必要があります。すべてのファイル書き込み操作は、データ(ボリューム)を使用するか、ホストディレクトリをバインドする必要があります。これらの場所での読み取りと書き込みは、コンテナストレージレイヤーをスキップし、ホスト(またはネットワークストレージ)への直接読み取りと書き込みを行います。そのパフォーマンスと安定性より高いセックス。データボリュームのライフサイクルはコンテナに依存しません。コンテナは消滅し、データボリュームは消滅しません。したがって、データボリュームを使用した後、コンテナを削除して自由に再実行できますが、データが失われることはありません。

3.リポジトリ:ミラーファイルが一元的に保存される場所

イメージの作成後は、現在のホストで簡単に実行できますが、イメージを他のサーバーで使用する必要がある場合は、イメージの集中ストレージおよび配布サービスが必要です。DockerRegistryはそのようなサービスです。

Dockerレジストリには複数のリポジトリを含めることができ、各リポジトリには複数のタグを含めることができます。各タグはミラーに対応します。つまり、ミラーウェアハウスは、以前使用したコードウェアハウスと同様に、Dockerがミラーファイルを一元的に保存するために使用する場所です。

通常、ウェアハウスには同じソフトウェアの異なるバージョンのイメージが含まれ、タグはソフトウェアのバージョンごとに使用されることがよくあります<仓库名>:<标签>ソフトウェアのどのバージョン、具体的にはミラーを指定するようにフォーマットできます。ラベルが指定されていない場合、latestがデフォルトのラベルになります。

DockerRegistryパブリックサービスとプライベートDockerRegistryの概念の補足は次のとおりです。

Docker Registryパブリックサービスは、ユーザーに公開され、ユーザーがイメージを管理できるようにするレジストリサービスです。一般に、このタイプのパブリックサービスでは、ユーザーはパブリックイメージを無料でアップロードおよびダウンロードでき、プライベートイメージを管理するための有料サービスを提供する場合があります。

最も一般的に使用されるレジストリパブリックサービスは、デフォルトのレジストリでもある公式のDocker Hubであり、高品質の公式イメージが多数あります。URLはhttps://hub.docker.com/です。DockerHubの正式な紹介は次のとおりです。

Docker Hubは、コンテナイメージを検索してチームと共有するために、Dockerが提供する公式サービスです。

たとえば、必要なミラーを

検索します。DockerHubの検索結果には、適切なミラーを選択するのに役立ついくつかの重要な情報があります。

  • 公式画像:画像がDockerによって公式に提供および保守されていることを表します。これは、比較的安定していて安全です。
  • スター:GitHubのスターと同様に、好みと同じ意味です。
  • Dowloads:画像がプルされた回数を表します。基本的には、画像が使用される頻度を示すことができます。

もちろん、Docker Hubサイト検索を介してこの方法を直接ミラーリングすることに加えて、docker searchこのコマンドをミラーリングしたDockerHubを検索することもできます。検索結果は同じです。

~ docker search mysql 
NAME 									DESCRIPTION 
	STARS 					OFFICIAL 				AUTOMATED 
mysql 									MySQL is a widely used, open-source relation… 
	8763 						[OK] 
mariadb 								MariaDB is a community-developed fork of MyS… 
	3073 						[OK] 
mysql/mysql-server 						Optimized MySQL Server Docker images. Create… 
	650 						[OK]

中国のDockerHubへのアクセスは遅くなる可能性があります。DockerHubと同様のパブリックサービスを提供するクラウドサービスプロバイダーも中国にあります。

パブリックサービスの使用に加えて、ユーザーはローカルのプライベートDockerレジストリを設定することもできます。Dockerは、プライベートレジストリサービスとして直接使用できるDockerレジストリイメージを公式に提供しています。オープンソースのDockerRegistryイメージは、Docker Registry APIのサーバー側実装のみを提供します。これは、使用に影響を与えることなくdockerコマンドをサポートするのに十分です。ただし、グラフィカルインターフェイス、ミラーメンテナンス、ユーザー管理、アクセス制御などの高度な機能は含まれていません。

5つの一般的なコマンド

1.基本的なコマンド

docker version # 查看docker版本 
docker images # 查看所有已下载镜像,等价于:docker image ls 命令 
docker container ls # 查看所有容器 docker ps #查看正在运行的容器 
docker image prune # 清理临时的、没有被使用的镜像文件。-a, --all: 删除所有没有用的镜像,而 不仅仅是临时文件;

2.画像​​をプルします

docker search mysql # 查看mysql相关镜像 
docker pull mysql:5.7 # 拉取mysql镜像 
docker image ls # 查看所有已下载镜像

3.ミラーを削除します

たとえば、ダウンロードしたmysqlミラーを削除したいとします。

画像を削除する前にすることによりdocker rmi [image](に相当docker image rm [image])、画像はコンテナによって参照されていないことを確認して最初のmake(これはタグ名や画像IDによって削除することができます)。私たちのdocker ps命令の前で話すことによって

~ docker ps 
CONTAINER ID 		IMAGE 		COMMAND 				CREATED 
	STATUS 				PORTS 								NAMES 
c4cd691d9f80 		mysql:5.7 	"docker-entrypoint.s…" 	7 weeks ago 
	Up 12 days 			0.0.0.0:3306->3306/tcp, 33060/tcp 	mysql

id mysqlがc4cd691d9f80コンテナーとして引用されていることを参照してください最初に、この容器を通過docker stop c4cd691d9f80またはdocker stop mysql一時停止する必要があります。

次に、mysqlミラーのIDを確認します

~ docker images 
REPOSITORY 		TAG 		IMAGE ID 		CREATED 
	SIZE 
mysql 			5.7 		f6509bac4980 	3 months ago 
	373MB

IMAGEIDまたはREPOSITORY名で削除します

docker rmi f6509bac4980 # 或者 docker rmim mysql

六、船を建造して走る

Dockerと一般的なコマンドの概念は基本的に終了しました。ビルド、出荷、実行について説明しましょう。

Dockerの公式Webサイトを検索すると、「Docker-任意のアプリをどこでも構築、出荷、実行」という単語が見つかりますでは、ビルド、出荷、実行は正確に何をしているのでしょうか?

  • ビルド(ビルドイメージ):イメージは、ファイル、操作環境、その他のリソースを含むコンテナーのようなものです。
  • 船(トランスポートミラーリング):ホストと倉庫間のトランスポート。ここの倉庫はスーパーターミナルのようなものです。
  • 実行:実行中のイメージはコンテナーであり、コンテナーはプログラムを実行する場所です。

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

7、Dockerの基本的な原則を簡単に理解する

1.仮想化テクノロジー

まず、Dockerコンテナ仮想化テクノロジーベースのソフトウェアですが、仮想化テクノロジーとは何ですか?

簡単に言うと、仮想化テクノロジーは次のように定義できます。

仮想化テクノロジーは、コンピューターのさまざまな物理リソース(CPU、メモリ、ディスクスペース、ネットワークアダプターなど)を抽象化および変換するリソース管理テクノロジーであり、1つ以上のコンピューターに分割して組み合わせることができます。構成環境。その結果、物理構造間の不可分の障壁が打ち破られ、ユーザーはこれらのコンピューターハードウェアリソースを元の構成よりも優れた方法で使用できます。これらのリソースの新しい仮想部分は、既存のリソースの構築方法、地理的または物理的な構成によって制限されません。一般に仮想化リソースと呼ばれるものには、計算能力とデータストレージが含まれます。

2.DockerはLXC仮想コンテナテクノロジーに基づいています

Dockerテクノロジーは、LXC(Linuxコンテナー-Linuxコンテナー)仮想コンテナーテクノロジーに基づいています。

LXCは、オペレーティングシステムレベルの仮想化テクノロジであるLinux Containersの略語に由来し、Linuxカーネルコンテナ機能のユーザースペースインターフェイスです。アプリケーションソフトウェアシステムをソフトウェアコンテナ(コンテナ)にパッケージ化します。このコンテナには、アプリケーションソフトウェア自体のコードと、必要なオペレーティングシステムのコアおよびライブラリが含まれています。統一されたネームスペースと共通のAPIを使用して、さまざまなソフトウェアコンテナの利用可能なハードウェアリソースを割り当て、アプリケーション用の独立したサンドボックス実行環境を作成します。これにより、Linuxユーザーはシステムまたはアプリケーションコンテナを簡単に作成および管理できます。

LXCテクノロジーは、主にLinuxカーネルで提供されるCGroup関数と名前空間の助けを借りて実現されます。LXCを介して、ソフトウェアに独立したオペレーティングシステムのオペレーティング環境を提供できます。

cgroupとnamespaceの概要:

  • 名前空間は、Linuxカーネルがカーネルリソースを分離する方法です。名前付けを介して、一部のプロセスは自分自身に関連するリソースの一部しか見ることができませんが、他のプロセスは自分自身に関連するリソースしか見ることができず、プロセスの2つのグループはお互いの存在をまったく感じることができません。具体的な実装は、同じ名前名内の1つ以上のプロセスの関連リソースを指定することです。Linuxネームスペースは、グローバルシステムリソースの一種のカプセル化と分離であるため、異なるネームスペースのプロセスは独立したグローバルシステムリソースを持ちます。1つのネームスペースのシステムリソースを変更すると、現在のネームスペースのプロセスにのみ影響し、他のネームスペースのプロセスには影響しません。 。
  • CGroupは、Control Groupsの略で、プロセスグループ(プロセスグループ)によって使用されるマテリアルリソース(cpuメモリi / oなど)を制限、記録、および分離するためにLinuxカーネルによって提供されるメカニズムです。

cgroupとnamespaceの比較:

どちらもグループ化プロセスですが、2つの役割は本質的に異なります。名前名はプロセスグループ間でリソースを分離するためのものであり、cgroupはプロセスのグループのリソースを均一に監視および制限するためのものです。

8.まとめ

この記事では、主にDockerのいくつかの一般的な概念について詳しく説明しますが、Dockerのインストール、ミラーリングの使用、およびコンテナーの操作については説明しません。読者が本や公式文書を読んでこの部分をマスターできることを願っています。公式文書を読むのが非常に面倒だと感じたら、ここに「Docker Technology Introduction and Actual CombatSecondEdition」という本があります。

参考資料:「Java中級および上級コア知識の包括的分析」3月の準備を学ぶための学習資料を入手する時が来ました!
先着順で座席数に限りがございます!
「DockerTechnologyIntroduction and Actual Combat Second Edition」この学習資料を入手したい方は、ここをクリックして無料で入手できます "" "" "" "

おすすめ

転載: blog.csdn.net/Java_Caiyo/article/details/112508278