Dockerカスタムネットワークコンテナ相互接続

Dockerカスタムネットワークコンテナ相互接続

序文

前回は、 -Linkパラメータを使用してコンテナ間の相互接続を設定し、コンテナ内でIPアドレスだけでなく対応するドメイン名にもアクセスできることを紹介しました。まずレビューします。取り扱う前にすべての容器を空にしてください。

-リンク

# すべてのコンテナをクリアします $root@VM-8-11-ubuntu:~# docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
88f8f241ca30
765ed1889bfa

$root@VM-8-11-ubuntu:~# docker run -it --name=mybusy02 -d busybox
82aff31e56f3913b3fa883a08ec95960eff88fc9977360a67264c0d53180844b
$root@VM-8-11-ubuntu:~# docker run -it --name mybusy --link mybusy02:mybusy-net -d busybox
b77e9762314f868518f799d3c572dec0b2ce13a684de072fb9f9e925135f6459

$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy-net
PING mybusy-net (172.17.0.2): 56 データバイト
172.17.0.2 からの 64 バイト: seq=0 ttl=64 time=0.131 ms
172.17.0.2 からの 64 バイト: seq=1 ttl=64 time=0.069 ms
172.17.0.2 からの 64 バイト: seq=2 ttl=64 time=0.069 ms

$root@VM-8-11-ubuntu:~# docker exec -it mybusy cat /etc/hosts
127.0.0.1 ローカルホスト
::1 ローカルホスト ip6-ローカルホスト ip6-ループバック
fe00::0 ip6-ローカルネット
ff00::0 ip6-mcastプレフィックス
ff02::1 ip6-全ノード
ff02::2 ip6-オールルーター
172.17.0.2 mybusy-net 09a4b97fc09d mybusy02 # mybusy02がhostsファイルに追加されていることがわかりました
172.17.0.3 c73be07d21fb

接続されていることがわかりましたが、 mybusy02 が mybusy に ping する場合は、 –link が必要です。なので非常に面倒で、公式も --link パラメータを使用しないことを推奨しています。

Docker 0 ではコンテナ名アクセスはサポートされていません。次に、本日のハイライトであるカスタム ネットワーキングについて説明します。

ここに画像の説明を挿入

カスタムネットワーク

# 主に関連するコマンド $root@VM-8-11-ubuntu:~# docker network --help

使用方法: docker network コマンド

ネットワークを管理する

コマンド:
  コンテナをネットワークに接続する
  作成 ネットワークを作成する
  コンテナをネットワークから切断する
  検査 1つまたは複数のネットワークの詳細情報を表示する
  ls ネットワークを一覧表示する
  未使用のネットワークをすべて削除する
  rm 1つまたは複数のネットワークを削除します

コマンドの詳細については、「docker network COMMAND --help」を実行してください。
# これはデフォルトのネットワークモードです。brudge は docker 0 のブリッジです。$root@VM-8-11-ubuntu:~# docker network ls
ネットワーク ID 名前 ドライバー スコープ
cf05ea05d3bd ブリッジ ブリッジ ローカル
0ab28e475dc6 ホスト ホスト ローカル
e4c628cc77db なし null ローカル

create を使用して独自のブリッジ ネットワークを作成しましょう。ベース

# --driver ネットワークタイプを設定します --subnet サブネットを設定します/16 = 255*255 IP から 0.0 を引いた値で、255.255 はおよそ 65535 に等しくなります
$root@VM-8-11-ubuntu:~# docker network create --driver=bridge --subnet=192.168.0.0/16 my-net
1b668a5439b207d2080d95bffe829139cfa2456d691c8019a245e7f9d5a56970
root@VM-8-11-ubuntu:~# docker ネットワーク ls
ネットワーク ID 名前 ドライバー スコープ
cf05ea05d3bd ブリッジ ブリッジ ローカル
0ab28e475dc6 ホスト ホスト ローカル
1b668a5439b2 マイネットブリッジローカル
e4c628cc77db なし null ローカル

# ネットワーク情報を確認する $root@VM-8-11-ubuntu:~# docker network inspect my-net
[
    {
        「名前」: 「my-net」、
        「ID」: 「1b668a5439b207d2080d95bffe829139cfa2456d691c8019a245e7f9d5a56970」、
        「作成日」: 「2021-12-01T09:47:21.410882291+08:00」、
        「スコープ」:「ローカル」、
        「ドライバー」:「ブリッジ」、
        「IPv6を有効にする」:false、
        「IPAM」: {
            "ドライバー": "デフォルト",
            「オプション」: {},
            「設定」: [
                {
                    「サブネット」: 「192.168.0.0/16」
                }
            ]
        },
        「内部」:偽、
        「接続可能」: false、
        「イングレス」:偽、
        "設定元": {
            「ネットワーク」: 「」
        },
        "ConfigOnly": false、
        「コンテナ」: {},
        「オプション」: {},
        「ラベル」: {}
    }
]

上記ではネットワークの作成方法と表示方法を紹介しました。次に、ネットワークの使用方法について見ていきましょう。

# mybusy コンテナを作成し、my-net ネットワークを設定します $root@VM-8-11-ubuntu:~# docker run -it --name mybusy --net=my-net -d busybox
180fbc8b04627762a896d8a85d8cb67063c01a0f3ad8a11352ab4695b022c272
# mybusy02 コンテナを作成し、my-net ネットワークを設定します $root@VM-8-11-ubuntu:~# docker run -it --name mybusy02 --net=my-net -d busybox
3c08d592537a9593c960c9664b4724521658f26be7b658a6483e6fbfe30b58a7
# コンテナ内で mybusy ping mybusy02 が成功しました$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy02
PING mybusy02 (192.168.0.3): 56 データバイト
192.168.0.3 からの 64 バイト: seq=0 ttl=64 time=0.110 ms
192.168.0.3 からの 64 バイト: seq=1 ttl=64 time=0.070 ms

この時点で、相互に ping できることがわかりました。これは完璧でした。次のmy-netネットワーク構成を見てみましょう

root@VM-8-11-ubuntu:~# docker ネットワーク検査 my-net 
[
    {
        「名前」: 「my-net」、
        「ID」: 「1b668a5439b207d2080d95bffe829139cfa2456d691c8019a245e7f9d5a56970」、
        「作成日」: 「2021-12-01T09:47:21.410882291+08:00」、
        「スコープ」:「ローカル」、
        「ドライバー」:「ブリッジ」、
        「IPv6を有効にする」:false、
        「IPAM」: {
            "ドライバー": "デフォルト",
            「オプション」: {},
            「設定」: [
                {
                    「サブネット」: 「192.168.0.0/16」
                }
            ]
        },
        「内部」:偽、
        「接続可能」: false、
        「イングレス」:偽、
        "設定元": {
            「ネットワーク」: 「」
        },
        "ConfigOnly": false、
        "Containers": { # 現時点では、このネットワークに次の 2 つのコンテナが追加されていることがわかりました "180fbc8b04627762a896d8a85d8cb67063c01a0f3ad8a11352ab4695b022c272": {
                「名前」: 「mybusy」、
                "エンドポイントID": "12929182af47e619e3405cab9981ea1671a2bc31f77d3aa589ebcf2c912c12bc",
                "Macアドレス": "02:42:c0:a8:00:02",
                "IPv4アドレス": "192.168.0.2/16",
                "IPv6アドレス": ""
            },
            "3c08d592537a9593c960c9664b4724521658f26be7b658a6483e6fbfe30b58a7": {
                "名前": "mybusy02",
                "エンドポイントID": "61b08372535d751cee726fc01d4e300390e2a090dba20f1d21ba96385a7a621e",
                "Macアドレス": "02:42:c0:a8:00:03",
                "IPv4アドレス": "192.168.0.3/16",
                "IPv6アドレス": ""
            }
        },
        「オプション」: {},
        「ラベル」: {}
    }
]

質問する

異なるネットワーク構成のコンテナを相互接続できますか?

答えはイエスです。 docker network connect コマンドを使用できます。手順は次のとおりです。

# まず、現在同じネットワークに存在する 2 つのコンテナ mybusy と mybusy02 を確認します $root@VM-8-11-ubuntu:~# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
3c08d592537a busybox "sh" 8 分前 8 分前 mybusy02
180fbc8b0462 busybox "sh" 8 分前 8 分前 mybusy
# デフォルトネットワークにmybusy03を作成する
$root@VM-8-11-ubuntu:~# docker run -it --name mybusy03 -d busybox
a95b57c96f400ed44efffcc938bccce15830fa1ab5b55716261e4588c14429cb
# 現在のコンテナを表示する $root@VM-8-11-ubuntu:~# docker ps 
コンテナID イメージ コマンド 作成ステータス ポート名
a95b57c96f40 busybox "sh" 21秒前 21秒前 mybusy03
3c08d592537a busybox "sh" 8 分前 8 分前 mybusy02
180fbc8b0462 busybox "sh" 9 分前 9 分前 mybusy
# mybusy から mybusy03 に ping を試みると、同じネットワーク上にないため ping が機能しないことがわかります。$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy03
ping: 不正なアドレス 'mybusy03'
# ここで、docker network connect --help コマンドを実行して、$root@VM-8-11-ubuntu:~# docker network connect --help を確認します。

使用方法: docker network connect [オプション] ネットワークコンテナ

コンテナをネットワークに接続する

オプション:
      --alias strings コンテナのネットワークスコープエイリアスを追加します
      --driver-opt 文字列 ネットワークのドライバーオプション
      --ip 文字列 IPv4 アドレス (例: 172.30.100.104)
      --ip6 文字列 IPv6 アドレス (例: 2001:db8::33)
      --link list 別のコンテナへのリンクを追加する
      --link-local-ip strings コンテナのリンクローカルアドレスを追加します
# mybusy03 を my-net ネットワークに追加します $root@VM-8-11-ubuntu:~# docker network connect my-net mybusy03
# その後、再度 ping を実行して、動作していることを確認します。すごいと思いませんか? $root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy03
PING mybusy03 (192.168.0.4): 56 データバイト
192.168.0.4 からの 64 バイト: seq=0 ttl=64 time=0.197 ms
192.168.0.4 からの 64 バイト: seq=1 ttl=64 time=0.087 ms

このとき、ネットワークを確認すると、mybusy03 が my-net に追加されていたことがわかりました。したがって、正常に ping を実行できます。

ここに画像の説明を挿入

Dockerカスタムネットワークコンテナ相互接続に関するこの記事はこれで終わりです。Dockerコンテナ相互接続に関するその他の関連コンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerコンテナ相互接続の予備的な実践についての簡単な説明
  • Dockerのポートマッピングとコンテナの相互接続の詳細な説明
  • Dockerコンテナの相互接続方法の詳細な説明

<<:  HTML の基本 - ハイパーリンク スタイルを設定する簡単な例

>>:  MySQL データベースの手動およびスケジュールされたバックアップ手順

推薦する

...

HTML CSS3は画像表示効果を引き伸ばさない

1. transform 属性を使用して、画像を拡大せずに表示します (パスの問題は必要に応じて修正...

ウェブページのカスタム選択ボックス選択

選択ドロップダウン リスト フォームは誰もがよく知っているかもしれませんが、デフォルトのドロップダウ...

CSS ボーダーは四隅の実装コードを追加します

1.html <div class="ログインボディ"> <...

MySQLで全角文字と半角文字を保存する場合の違い

残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...

Matlab による JavaScript プログラミング、重心アルゴリズムによる位置決め学習

目次Matlab セントロイドアルゴリズムMatlab はクローズドな商用ソフトウェアであり、米国政...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...

「fsck」を使用して Linux のファイルシステムエラーを修正する方法

序文ファイル システムは、データの保存方法と復元方法を整理する役割を担います。 いずれにせよ、時間の...

複数のフィールドをグループ化するMySQLグループ

日常の開発タスクでは、データ テーブル内のグループ化フィールドに基づいて統計データを取得するために、...

Docker で MySQL クラスターを構築する方法の例

Docker の基本的な手順:アップデートパッケージ yum -y アップデートDocker仮想マシ...

Nginx 最適化サービスで Web ページ圧縮を実装する方法

リソースを節約するためにWebページの圧縮を設定する1.まず、設定を変更しましょう vim /usr...

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...

イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア

1. サーバーにDockerをインストールする yumでdockerをインストール設定ファイルを変更...

Java+Tomcat 環境の展開とインストールのプロセス図

次に、Centos7 に Java+Tomcat をインストールします。インターネット上には多くの記...

CentOS7 で jar アプリケーションの起動を設定する方法

プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...