記事とコードは [Github ウェアハウス: https://github.com/timerring/backend-tutorial ]にアーカイブされています。または、 dockerに返信することでパブリック アカウント [AIShareLab]を取得することもできます。
記事ディレクトリ
序文
CentOS Dockerのインストール
Docker は汎用コンテナ ツールではなく、既存の実行中の Linux カーネル環境に依存します。
Docker は基本的に、既に実行されている Linux の下に分離されたファイル環境を作成するため、その実行効率は、デプロイされた Linux ホストの実行効率とほぼ同等です。したがって、Docker は Linux カーネルを備えたシステムにデプロイする必要があります。他のシステムが Docker を導入したい場合は、仮想 Linux 環境をインストールする必要があります。
前提条件
現在、CentOS ディストリビューションのカーネルのみが Docker をサポートしています。Docker は CentOS 7 (64 ビット) 上で実行され、システムが 64 ビットであること、および Linux システムのカーネル バージョンが 3.8 以降である必要があります。ここでは Centos7.X が選択されています。
「独自のカーネルを表示」
uname
コマンドは、現在のシステム関連情報 (カーネルのバージョン番号、ハードウェア アーキテクチャ、ホスト名、オペレーティング システムの種類など) を出力するために使用されます。
例:uname -r
またはcat /etc/redhat-release
Docker の基本コンポーネント
鏡像
Docker イメージ (イメージ) は読み取り専用のテンプレートです。イメージを使用して Docker コンテナーを作成でき、1 つのイメージで多数のコンテナーを作成できます。
ルート ファイル システムにも相当します。たとえば、公式イメージ centos: 7 には、centos: 7 の最小限のシステムの完全なルート ファイル システムが含まれています。
コンテナの「ソース コード」に相当するDocker イメージ ファイルは Java クラス テンプレートに似ており、Docker コンテナ インスタンスは Java の新しいインスタンス オブジェクトに似ています。
容器
1 オブジェクト指向の観点から
Docker は、コンテナ (コンテナ) を使用して、1 つまたはグループのアプリケーションを独立して実行します。アプリケーションまたはサービスはコンテナ内で実行されます。コンテナは、仮想化された実行環境に似ています。コンテナは、 ミラー で作成された実行インスタンスです。Java のクラスやインスタンス オブジェクトと同様に、イメージは静的な定義であり、コンテナはイメージの実行時のエンティティです。コンテナーは、イメージの開始、開始、停止、削除が可能な標準的で独立したオペレーティング環境を提供します。各コンテナは分離された安全なプラットフォームです
2 ミラーコンテナの視点から
コンテナは、Linux 環境(root ユーザー権限、プロセス空間、ユーザー空間、ネットワーク空間などを含む) とその中で実行されるアプリケーションの簡易バージョンとみなすことができます。
倉庫
ウェアハウス (リポジトリ) は、画像ファイルを一元的に保管する場所です。
さまざまな jar パッケージが保存される Maven ウェアハウスや、さまざまな git プロジェクトが保存される github ウェアハウスと同様です。
Docker が提供する公式レジストリは Docker Hub と呼ばれ、さまざまなイメージ テンプレートが保存されています。倉庫は公共倉庫(Public)と民間倉庫(Private)に分かれます。
最大のパブリック リポジトリは Docker Hub ( https://hub.docker.com/ ) で、ユーザーがダウンロードできる多数のイメージが保存されています。国内の公共倉庫には、Alibaba Cloud、NetEase Cloudなどが含まれます。
小さな要約
Docker 自体は、キャリアまたは管理エンジンを実行するコンテナです。アプリケーション プログラムと構成の依存関係をパッケージ化して、納品可能な動作環境を形成します。このパッケージ化された動作環境がイメージ イメージ ファイルです。このイメージ ファイルを通じてのみ、Docker コンテナ インスタンスを生成できます (Java の新しいオブジェクトと同様)。
画像ファイルはコンテナのテンプレートと考えることができます。Docker はイメージ ファイルに基づいてコンテナのインスタンスを生成します。同じイメージ ファイルで、同時に実行される複数のコンテナ インスタンスを生成できます。
イメージ ファイル: イメージ ファイルによって生成されたコンテナ インスタンス自体は、イメージ ファイルと呼ばれるファイルです。
コンテナ インスタンス: コンテナはサービスを実行します。必要に応じて、コンテナである Docker クライアントを通じて対応する実行インスタンスを作成できます。
ウェアハウス: 大量の画像を置く場所です。画像をウェアハウスに公開し、必要に応じてウェアハウスから取り出すことができます。
Docker プラットフォームのアーキテクチャ図
仕組みの概要:
Docker はクライアント サーバー構造のシステムです。Docker デーモンはホスト上で実行され、Socket 接続を介してクライアントからアクセスされます。デーモンはクライアントからコマンドを受け取り、ホスト上で実行されているコンテナを管理します。コンテナーは実行時環境であり、前述したコンテナーです。(プロセスはmysqlに似ています)
Docker は C/S モデル アーキテクチャであり、バックエンドは疎結合アーキテクチャであり、多くのモジュールがそれぞれの役割を実行します。
Docker 操作の基本プロセスは次のとおりです。
- ユーザーは Docker クライアントを使用して Docker デーモンとの通信を確立し、Docker デーモンにリクエストを送信します。
- Docker アーキテクチャの主要部分である Docker Daemon は、まず Docker クライアントからのリクエストを受け付ける Docker サーバーの機能を提供します。
- Docker Engine は Docker 内で一連のジョブを実行し、各ジョブはジョブの形式で存在します。
- ジョブの実行中、コンテナー イメージが必要になると、イメージは Docker Registy からダウンロードされ、ダウンロードされたイメージはイメージ管理ドライバー Graph ドライバーを介して Graph 形式で保存されます。
- Docker のネットワーク環境を作成する必要がある場合は、ネットワーク管理ドライバー Network driver を通じて Docker コンテナーのネットワーク環境を作成および構成します。
- Dockerコンテナの実行リソースを制限したり、ユーザーの指示などの操作を行う必要がある場合は、Execドライバーを通じて行われます。
- Libcontainer は独立したコンテナ管理パッケージであり、ネットワーク ドライバーと実行ドライバーの両方が Libcontainer を通じてコンテナに対する特定の操作を実装します。
Dockerをインストールする
ドキュメント: https://docs.docker.com/engine/install/centos/
- CentOS 7 以降であることを確認してください
cat /etc/redhat-release
- 古いバージョンのアンインストール https://docs.docker.com/engine/install/centos/#uninstall-old-versions
- Yum は gcc 関連をインストールします
yum -y install gcc
。yum -y install gcc-c++
yum-utils
パッケージをインストールします`yum install -y yum-utils- 安定したミラーウェアハウスをセットアップする (Alibaba Cloud を推奨)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- yum パッケージインデックスを更新します `yum makecache fast
- docker-engineをインストールする
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- docker を開始します `systemctl start docker
- テスト
docker version
と `docker run hello-world - アンインストール: https://docs.docker.com/engine/install/centos/#uninstall-docker-engine
アリババクラウドミラーアクセラレーション
https://promotion.aliyun.com/ntms/act/kubernetes.html
アクセラレータ アドレス接続を取得します。Alibaba Cloud 開発者プラットフォームにログインし、コンソールをクリックし、コンテナ イメージ サービスを選択して、アクセラレータ アドレスを取得します。スクリプトをページの下に貼り付けて直接実行します。
mkdir -p /etc/docker
または、ステップに分けて記述します。vim /etc/docker/daemon.json
次に、サービスを再起動します。
systemctl daemon-reload
systemctl restart docker
Docker が VM より速い理由
-
Docker は仮想マシンよりも抽象化層が少ない
Docker はハードウェア リソースを仮想化するためにハイパーバイザー (仮想マシン) を必要としないため、Docker コンテナ上で実行されるプログラムは実際の物理マシンのハードウェア リソースを直接使用します。したがって、CPU とメモリの使用率の点で、Docker には明らかな利点があります。 -
Docker はオペレーティング システムの OS カーネルをロードせずにホスト マシンのカーネルを使用するため、
新しいコンテナを作成するときに、仮想マシンのようにオペレーティング システムのカーネルを再ロードする必要はありません。新しい仮想マシンを作成するときに、起動、オペレーティング システム カーネルのロード、および復帰という時間とリソースを消費するプロセスを回避するために、仮想マシン ソフトウェアは OS をロードし、新規作成に戻るプロセスを実行する必要があります。分レベルです。ただし、docker はホストのオペレーティング システムを直接使用するため、返却プロセスが省略されます。そのため、新しい docker コンテナーの作成には数秒しかかかりません。