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 データベースの手動およびスケジュールされたバックアップ手順

推薦する

Nginx プロキシを使用してフロントエンドのクロスドメイン問題を解決する方法

序文Nginx (「エンジン エックス」と発音) は、リバース プロキシ、ロード バランサ、HTTP...

MySQLの構文、特殊記号、正規表現の詳細な説明

Mysql でよく使用される表示コマンド1. 現在のデータベース サーバー内のデータベースの一覧を表...

Javascript Echarts 空気質マップ効果の詳細な説明

まず、空気質データと地図データを組み合わせる必要があります。マップデータには属性名があるさまざまな都...

three.js を使って立体的な矢印線を描く詳細な手順

需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...

MySQL の問題を解決する: MSVCR120.dll が見つからないため、コードの実行を続行できません

1. 問題MySQL の初期化時に発生する問題は、次のとおりです。 1. 「MSVCR120.dll...

MYSQLクエリデータの結果に自動的に番号を付ける方法

序文実際、クエリ中に結果に番号が付けられるこのような状況に遭遇したことは一度もありません。同僚が転職...

Vue.js での VNode の使用

VNodeとはvue.js には VNode クラスがあり、これを使用してさまざまな種類の vnod...

入力選択スタイルを変更する CSS 疑似クラスのサンプルコード

注: この表はW3Schoolチュートリアルから引用したものです疑似要素の分類と機能: 入力選択スタ...

Nginx 書き換えジャンプの適用シナリオの詳細な説明

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

Reactは適応性の高い仮想リストを実装する

目次変換前:変換後: 0x0の基本0x1 「固定高さ」の仮想リストを実装する原理:最適化: 0x2 ...

Mysqlツリー再帰クエリの実装方法

序文部門テーブルなどのデータベース内のツリー構造データの場合、部門のすべての従属部門または部門のすべ...

ファイルのダウンロードを実現する javascript Blob オブジェクト

目次例示する1. ブロブオブジェクト2. フロントエンド3. バックエンド要約する例示する最近、ファ...

Vueはスクロールバースタイルを実装します

最初はブラウザのスクロールバーのスタイルを変更して効果を実現したいと思っていましたが、情報を調べてみ...

Linuxで$を#に変更する方法

このシステムでは、# 記号は root ユーザーを表し、$ 記号は通常のユーザーを表します。では、ど...

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...