Dockerのインストール方法とDockerの4つのネットワークモードの詳細説明

Dockerのインストール方法とDockerの4つのネットワークモードの詳細説明

1. Dockerをインストールする

yum -y install docker-io

インストールが完了したことを示す「完了」メッセージが表示されます。

2. Dockerサービスを開始する

サービスdocker開始

3. Dockerの起動を設定する

chkconfig docker オン

4. 基本情報ビュー

docker バージョン
docker情報
docker イメージ 画像を表示
実行中のコンテナを表示するにはdocker ps
docker rmi イメージの削除
docker save -o imageName:tag > path/name.tar はイメージを保存します
docker load < name.tar イメージをロード
Docker pullはイメージをプルします

5. アンインストールする場合、コマンドは次のようになります。

sudo yum remove docker-ce
sudo rm -rf /var/lib/docker

docker run を使用して Docker コンテナを作成する場合、--net オプションを使用してコンテナのネットワーク モードを指定できます。Docker には次の 4 つのネットワーク モードがあります。

--net=host を使用して指定されるホスト モード。
--net=container:NAME_or_ID を使用して指定されるコンテナ モード。
なしモード。--net=none を使用して指定します。
ブリッジ モード。--net=bridge を使用して指定され、デフォルト設定です。
ユーザー定義モードもあります

以下ではDockerの各ネットワークモードを紹介します。

1 ホストモード

形式:

docker run -it --name myubuntu --net=host ubuntu /bin/bash

ご存知のとおり、Docker は、プロセスを分離するための PID 名前空間、ファイル システムを分離するためのマウント名前空間、ネットワークを分離するためのネットワーク名前空間など、Linux の名前空間テクノロジを使用してリソースを分離します。ネットワーク名前空間は、ネットワーク カード、ルーティング、Iptable ルールなど、他のネットワーク名前空間から分離された独立したネットワーク環境を提供します。 Docker コンテナには通常、独立したネットワーク名前空間が割り当てられます。ただし、コンテナの起動時にホスト モードを使用すると、コンテナは独立したネットワーク名前空間を取得せず、ホストとネットワーク名前空間を共有します。コンテナは独自のネットワーク カードを仮想化したり、独自の IP を構成したりはせず、ホストの IP とポートを使用します。
たとえば、マシン 10.10.101.105/24 上でホスト モードで Web アプリケーションを含む Docker コンテナーを起動し、ポート tcp80 でリッスンします。コンテナ内で ifconfig などのコマンドを実行してネットワーク環境を表示すると、ホストマシン上の情報が表示されます。外部からコンテナ内のアプリケーションにアクセスする場合、ホストマシンで直接実行する場合と同じように、NAT 変換なしで 10.10.101.105:80 を直接使用できます。ただし、ファイル システムやプロセス リストなど、コンテナーの他の側面は、ホスト マシンから分離されたままです。

2 コンテナモード

形式:

docker run -it --name myubuntu --net=container:NAME_OR_ID ubuntu /bin/bash

ホストモードを理解すれば、このモードも簡単に理解できます。このモードでは、新しく作成されたコンテナーがネットワーク名前空間をホストと共有するのではなく、既存のコンテナーと共有することを指定します。新しく作成されたコンテナは、独自のネットワーク カードを作成したり、独自の IP を構成したりするのではなく、指定されたコンテナと IP、ポート範囲などを共有します。同様に、ネットワークを除いて、ファイル システムやプロセス リストなど、2 つのコンテナーの他の側面は分離されたままです。 2 つのコンテナのプロセスは、lo ネットワーク カード デバイスを介して通信できます。

3 なしモード

形式:

docker run -it --name myubuntu --net=none ubuntu /bin/bash

このモードは前の 2 つとは異なります。このモードでは、Docker コンテナには独自のネットワーク名前空間がありますが、Docker コンテナに対してネットワーク構成は実行されません。つまり、この Docker コンテナには、ネットワーク カード、IP、ルーティングなどの情報が含まれていません。 Docker コンテナのネットワーク カードを追加し、IP を構成する必要があります。

4 ブリッジモード

ブリッジモードは、Docker のデフォルトのネットワーク設定です。このモードでは、ネットワーク名前空間を割り当て、コンテナごとに IP アドレスなどを設定し、ホスト上の Docker コンテナを仮想ブリッジに接続します。以下ではこのモードに焦点を当てます。

4.1 ブリッジモードトポロジ

Docker サーバーを起動すると、ホスト上に docker0 という仮想ブリッジが作成され、このホスト上で起動された Docker コンテナはこの仮想ブリッジに接続されます。仮想ブリッジは物理スイッチと同様に動作し、ホスト上のすべてのコンテナーがスイッチを介してレイヤー 2 ネットワークに接続されます。次のステップはコンテナにIPを割り当てることです。DockerはRFC1918で定義されたプライベートIPセグメントからホストマシンとは異なるIPアドレスとサブネットを選択し、docker0に割り当てます。docker0に接続されたコンテナは、このサブネットから空いているIPを選択します。たとえば、Docker は通常、ネットワーク セグメント 172.17.0.0/16 を使用し、172.17.42.1/16 を docker0 ブリッジに割り当てます (docker0 は、ホスト上で ifconfig コマンドを使用して確認できます。これはブリッジの管理インターフェイスと見なすことができ、ホスト上の仮想ネットワーク カードとして使用されます)。単一マシン環境でのネットワーク トポロジは次のようになり、ホスト アドレスは 10.10.101.105/24 です。

Docker が上記のネットワーク構成を完了するプロセスは、おおよそ次のようになります。

1. ホスト上に仮想ネットワーク カード veth ペア デバイスのペアを作成します。 Veth デバイスは常にペアで表示されます。これらはデータ チャネルを形成します。データは 1 つのデバイスから入力され、別のデバイスから出力されます。したがって、2 つのネットワーク デバイスを接続するために、veth デバイスがよく使用されます。

2. Docker は、veth ペア デバイスの一方の端を新しく作成されたコンテナーに配置し、eth0 という名前を付けます。もう一方の端はホスト内に配置され、veth65f9 のような名前が付けられ、このネットワーク デバイスは docker0 ブリッジに追加され、brctl show コマンドで表示できます。

3. docker0 サブネットからコンテナに IP を割り当て、docker0 IP アドレスをコンテナのデフォルト ゲートウェイとして設定します。
ネットワーク トポロジを紹介した後、ブリッジ モードでコンテナーがどのように通信するかについて説明します。

4.2 ブリッジモードでのコンテナ間の通信

ブリッジ モードでは、同じブリッジに接続されたコンテナーは相互に通信できます (セキュリティ上の理由から、DOCKER_OPTS 変数で --icc=false を設定することで、それらの間の通信を禁止することもできます。これにより、--link のみが 2 つのコンテナーの通信を有効にできます)。
コンテナは外部と通信することもできます。ホスト上の Iptable ルールを見て、次の行を確認してみましょう。

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

このルールは、docker0 ネットワーク カードから送信されていない、送信元アドレスが 172.17.0.0/16 のパケット (つまり、Docker コンテナーから生成されたパケット) の送信元アドレスを、ホスト ネットワーク カードのアドレスに変換します。分かりにくいかも知れませんので、例を挙げて説明しましょう。ホストに eth0 という名前のネットワーク カードがあり、IP アドレスが 10.10.101.105/24、ゲートウェイが 10.10.101.254 であるとします。 IP 172.17.0.1/16 のホスト上のコンテナから Baidu (180.76.3.151) に ping を実行します。 IP パケットはまずコンテナからデフォルト ゲートウェイ docker0 に送信されます。パケットが docker0 に到達した後、ホストにも到達します。次に、ホストのルーティング テーブルが照会され、パケットはホストの eth0 からホストのゲートウェイ 10.10.105.254/24 に送信される必要があることがわかります。その後、パケットは eth0 に転送され、eth0 から送信されます (ホストの ip_forward 転送がオンになっている必要があります)。このとき、上記の Iptable ルールが有効になり、パケットに対して SNAT 変換が実行され、送信元アドレスが eth0 のアドレスに変更されます。このように、外部から見ると、このパケットは 10.10.101.105 から送信されており、Docker コンテナは外部からは見えません。
では、外部のマシンはどのようにして Docker コンテナのサービスにアクセスするのでしょうか?まず、次のコマンドを使用して、Web アプリケーションを含むコンテナーを作成し、コンテナーのポート 80 をホストのポート 80 にマップします。

docker run -d --name web -p 80:80 fmzhen/simpleweb

次に、Iptable ルールの変更を確認し、追加のルールを見つけます。

-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.5:80

このルールは、ホスト eth0 が受信した宛先ポート 80 の TCP トラフィックに対して DNAT 変換を実行し、トラフィックを上記で作成した Docker コンテナである 172.17.0.5:80 に送信します。したがって、外部からコンテナ内のサービスにアクセスするには、10.10.101.105:80 にアクセスするだけで済みます。
さらに、Docker が使用する IP アドレス、DNS などの情報をカスタマイズしたり、独自に定義したブリッジを使用したりすることもできますが、動作方法は同じです。

ユーザー定義モード

ユーザーは、Docker ネットワーク ドライバーまたはその他のネットワーク ドライバーを通じてネットワークをカスタマイズできます。複数のコンテナを同じネットワークに接続できます。カスタム ネットワークに接続すると、コンテナは互いの IP アドレスとホスト名を介して相互に通信できるようになります。
コンテナがユーザー定義ネットワークに接続されている場合、コンテナの /etc/hosts ファイルに、同じネットワーク内の他のすべてのコンテナの IP アドレスが追加されます。
コンテナはいつでも /etc/hosts ファイルを変更する可能性があるため、コンテナ内のプログラムは不完全な、あるいは空の /etc/hosts ファイルを読み取る可能性があります。通常、再読することでこの問題は解決できます。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Dockerの4つのネットワークモード
  • Dockerのネットワークモードと設定方法
  • Dockerネットワークモード(4つのモード)の詳細な紹介
  • DockerにおけるVLANネットワークモードの設定の詳細な説明
  • Docker 4 ネットワーク モードのデモンストレーションと接続テスト

<<:  MySQL シーケンス AUTO_INCREMENT の詳細な説明とサンプルコード

>>:  js シンプルで粗雑なパブリッシュとサブスクライブのサンプルコード

推薦する

Windows2008 64 ビット システムでの MySQL 5.7 グリーン バージョンのインストール チュートリアル

序文この記事では、MySQL 5.7 グリーン バージョンのインストール チュートリアルを紹介します...

JavaScript における BOM と DOM の詳細な説明

目次BOM (ブラウザ オブジェクト モデル) 1. ウィンドウブラウザのウィンドウサイズを取得する...

eject を使用せずに create-react-app の設定を変更する方法

1. イジェクトが推奨されないのはなぜですか? 1. eject を実行した後、どのような変化があり...

Linux での MySQL 5.1 および 5.7 のインストール チュートリアル

以下のコンテンツのオペレーティング システムは次のとおりです: Centos 6.7 yum で M...

MySQL で '%' を含むフィールドをクエリする方法の詳細な説明 (ESCAPE の使用法)

SQLのlike文では、例えば SELECT * FROM user WHERE username...

Mysql varchar型の合計操作例

友人の中には、データベースについて学習しているときに、テーブル構造を作成するときに誤ってフィールドを...

MySQL 1対多関連クエリのページングエラー問題の解決方法

XML価格照会のクエリデータにはリストが含まれているため、コレクションが必要です <結果マップ...

バックエンド管理システムを構築するためのvue-element-adminの実装手順

最近、カンファレンスの健康申告システムに取り組んでいたとき、バックエンドを構築する必要があり、vue...

ElementUI コンポーネント el-dropdown (落とし穴)

選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...

K8Sの高度な機能を理解するための記事

目次K8Sの高度な機能高度な機能要約するkubectl サービスの問題のトラブルシューティングK8S...

ブートストラップテーブルの使い方のまとめ

この記事では、bootstrapテーブルの使い方を参考までに紹介します。具体的な内容は次のとおりです...

MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法

序文データベースをバックアップするときは、データベース全体のバックアップを使用します。ただし、何らか...

mysql 5.6.21 のインストールと設定の詳細な手順

1. 概要MySQL バージョン: 5.6.21ダウンロードアドレス: https://dev.my...

MySQL における := と = の違いをグラフィカルに紹介

:= と = の違い=設定および更新の場合にのみ、:= と同じ効果、つまり代入効果があり、それ以外の...

CentOS 7でsambaを使用してフォルダーを共有するための完全な手順

序文Samba は、サーバー プログラムとクライアント プログラムで構成され、Linux システム上...