Dockerコンテナのネットワーク管理とネットワーク分離の実装

Dockerコンテナのネットワーク管理とネットワーク分離の実装

1. Dockerネットワーク管理

1. Dockerコンテナ方式

1) Dockerが外部ネットワークにアクセスする

Docker コンテナは、外部ネットワークにアクセスするためにホストの Docker0 ブリッジに接続されます。デフォルトでは、docker0 ブリッジが Docker コンテナに自動的に追加されます。

2) コンテナ間の通信には、管理者がブリッジを作成し、異なるコンテナをブリッジに接続してコンテナ間の相互アクセスを可能にする必要があります。

3) 外部ネットワーク アクセス コンテナーは、ポート マッピングまたは Docker ホスト ネットワーク構成の同期を通じて通信を実現します。

2. Dockerコンテナのネットワーク通信モード

1) ブリッジ
外部ネットワーク通信へのデフォルトのコンテナ アクセスが使用されます。これは docker0 ブリッジに依存します。

2) なし
コンテナには独立したネットワーク名前空間を作成する必要があります。作成されたコンテナには TCP/IP 情報は構成されません。

3) コンテナ
コンテナ間の通信に使用されます。コンテナはコンテナ名前空間を共有する必要があり、異なるコンテナ間の通信は共有コンテナ名前空間を通じて実現されます。

4) ホスト
コンテナの内部ネットワークはホストと同期されます。

3. ブリッジネットワーク通信モードを構成する

[root@centos01 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 
       <!--centos7 ソースをインストール-->
[root@centos01 ~]# yum -y install docker <!--docker をインストール-->
[root@centos01 ~]# systemctl start docker <!--docker を起動します-->
[root@centos01 ~]# systemctl enable docker <!--起動時にdockerが自動的に起動するように設定します-->
[root@centos01 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf <!--ルーティング機能を有効にする-->
[root@centos01 ~]# sysctl -p <!--設定を更新-->
ネット.ipv4.ip_forward = 1
[root@centos01 ~]# docker pull hub.c.163.com/public/centos:7.2-tools <!--イメージをダウンロード-->
[root@centos01 ~]# docker images <!--イメージを表示-->
リポジトリ タグ イメージ ID 作成 サイズ
hub.c.163.com/public/centos 7.2-tools 4a4618db62b9 3年前 515 MB
[root@centos01 ~]# docker run -d --net=bridge --name centos7.201 hub.c.163.com/public/centos:7.2-tools  
      <!-- 作成されたコンテナのブリッジネットワーク通信を構成します。コンテナは以下を使用してインターネットにアクセスします -->
b308fb5c097fd455073f2f4a280d2660e6943fe1a62d6409e8ebcd3b86469438
[root@centos01 ~]# docker ps <!--実行中のコンテナを表示-->
コンテナID イメージ コマンド 作成ステータス ポート名
b308fb5c097f hub.c.163.com/public/centos:7.2-tools "/usr/bin/supervisord" 20 秒前 19 秒前にアップ 22/tcp centos7.201
[root@centos01 ~]# ifconfig <!--DockerホストのIPアドレス情報を表示します -->
docker0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 172.17.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0
[root@centos01 ~]# docker exec -it centos7.201 /bin/bash <!--centos7.201 コンテナにログインします-->
[root@b308fb5c097f /]# ifconfig <!--IP アドレスを表示-->
eth0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 172.17.0.2 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0
[root@b308fb5c097f /]# ping www.baidu.com <!--centos7.201 コンテナ ping パブリックネットワーク テスト-->
PING www.a.shifen.com (39.156.66.18) 56(84) バイトのデータ。
39.156.66.18 からの 64 バイト: icmp_seq=1 ttl=50 time=18.4 ms
39.156.66.18 からの 64 バイト: icmp_seq=2 ttl=50 time=18.3 ms
39.156.66.18 からの 64 バイト: icmp_seq=3 ttl=50 time=16.9 ms
[root@b308fb5c097f /]# ping 192.168.100.10 <!--ホストIPのpingテスト-->
PING 192.168.100.10 (192.168.100.10) 56(84)バイトのデータ。
192.168.100.10 からの 64 バイト: icmp_seq=1 ttl=64 time=0.043 ms
192.168.100.10 からの 64 バイト: icmp_seq=2 ttl=64 time=0.086 ms
192.168.100.10 からの 64 バイト: icmp_seq=3 ttl=64 time=0.150 ms

4. 非ネットワーク通信モードを設定する

[root@centos01 ~]# docker run -d --net=none --name centos7.202 hub.c.163.com/public/centos:7.2-tools  
      <!--docker コンテナを構成するにはネットワークに接続する必要はなく、コンテナは通信できません -->
e2c4837d67818e7ef4d7cedf964db21d98cabb594d12091d7f69da4e8fb3f30f
[root@centos01 ~]# docker ps <!--実行中のコンテナを表示-->
コンテナID イメージ コマンド 作成ステータス ポート名
e2c4837d6781 hub.c.163.com/public/centos:7.2-tools "/usr/bin/supervisord" 57 秒前 56 秒前 centos7.202
b308fb5c097f hub.c.163.com/public/centos:7.2-tools "/usr/bin/supervisord" 7 分前 7 分前にアップ 22/tcp centos7.201
[root@centos01 ~]# docker exec -it centos7.202 /bin/bash <!--centos7.202 コンテナにログインします-->
[root@e2c4837d6781 /]# ifconfig <!--IP アドレスを表示-->
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    inet 127.0.0.1 ネットマスク 255.0.0.0
[root@e2c4837d6781 /]# ping www.baidu.com <!-- パブリックネットワークにアクセスできないため、ping を実行してください -->
ping: 不明なホスト www.baidu.com
[ルート@e2c4837d6781 /]# 
[root@e2c4837d6781 /]# ping 192.168.100.10 <!--ホスト IP アドレスにアクセスできないため、ping を実行してください-->
接続: ネットワークにアクセスできません

5. ホストネットワーク通信モードを構成する

[root@centos01 ~]# docker run -d --net=host --name centos7.203 -v /data1 hub.c.163.com/public/centos:7.2-tools  
    <!-- 実行中のコンテナとホスト ネットワークを同期するように設定します -->
2911358be486720c4ee93c8de22cd77301236f48c5baf22ea63bb3c54450032e
[root@centos01 ~]# ls /var/lib/docker/volumes/ <!--作成されたデータボリュームを表示します-->
dc755f3b6036f167471435629918d06264e1c2c6a8b175426fa80da36143a87e メタデータ.db
[root@centos01 ~]# docker ps <!--実行中のコンテナを表示-->
コンテナID イメージ コマンド 作成ステータス ポート名
2911358be486 hub.c.163.com/public/centos:7.2-tools "/usr/bin/supervisord" 約 1 分前 起動 約 1 分 centos7.203
e2c4837d6781 hub.c.163.com/public/centos:7.2-tools "/usr/bin/supervisord" 15 分前 15 分前 centos7.202
b308fb5c097f hub.c.163.com/public/centos:7.2-tools "/usr/bin/supervisord" 21 分前 21 分前にアップ 22/tcp centos7.201
[root@centos01 ~]# docker exec -it centos7.203 /bin/bash <!--centos7.203 コンテナにログインします-->
[root@centos01 /]# ifconfig <!--IPアドレスを表示-->
docker0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 172.17.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0

ens32: flags=4163<UP、BROADCAST、RUNNING、MULTICAST> mtu 1500
    inet 192.168.100.10 ネットマスク 255.255.255.0 ブロードキャスト 192.168.100.255

ens34: flags=4163<UP、BROADCAST、RUNNING、MULTICAST> mtu 1500
    inet 192.168.0.126 ネットマスク 255.255.255.0 ブロードキャスト 192.168.0.255

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    inet 127.0.0.1 ネットマスク 255.0.0.0

vethc39178a: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet6 fe80::7c4b:a6ff:fe1c:a37f プレフィックス長 64 スコープID 0x20<リンク>

virbr0: flags=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 192.168.122.1 ネットマスク 255.255.255.0 ブロードキャスト 192.168.122.255
[root@centos01 ~]# docker exec -it centos7.203 /bin/bash <!--centos7.203 コンテナにログインします-->
[root@centos01 /]# ping www.baidu.com <!-- パブリックネットワークの ping テスト -->
PING www.a.shifen.com (39.156.66.14) 56(84) バイトのデータ。
39.156.66.14 からの 64 バイト: icmp_seq=1 ttl=51 time=20.0 ms
39.156.66.14 からの 64 バイト: icmp_seq=2 ttl=51 time=19.1 ms
39.156.66.14 からの 64 バイト: icmp_seq=3 ttl=51 time=15.9 ms
[root@centos01 /]# ping 192.168.100.10 <!--ホストのIPアドレスをpingテスト-->
PING 192.168.100.10 (192.168.100.10) 56(84)バイトのデータ。
192.168.100.10 からの 64 バイト: icmp_seq=1 ttl=64 time=0.020 ms
192.168.100.10 からの 64 バイト: icmp_seq=2 ttl=64 time=0.060 ms
192.168.100.10 からの 64 バイト: icmp_seq=3 ttl=64 time=0.030 ms
     <!---Centos7.203 コンテナは Nginx をインストールします-->
[root@centos01 ~]# cp /mnt/nginx-1.6.0.tar.gz ./ <!--Nginx 圧縮パッケージをコピー-->
[root@centos01 ~]# ls 
anaconda-ks.cfg 初期セットアップ-ks.cfg nginx-1.6.0.tar.gz
[root@centos01 ~]# cp nginx-1.6.0.tar.gz /var/lib/docker/volumes/dc755f3b6036f167471435629918d06264e1c2c6a8b175426fa80da36143a87e/_data/ 
    <!-- データ ボリュームを介して Nginx 圧縮パッケージを centos7.203 コンテナーに共有します -->
[root@centos01 ~]# docker exec -it centos7.203 /bin/bash <!--centos7.203 コンテナにログインします-->
[root@centos01 /]# ls
anaconda-post.log bin data1 dev etc home lib lib64 lost+found media mnt opt ​​proc root run sbin srv sys tmp usr var
[root@centos01 /]# cd data1/ <!--ホストによって共有されているデータを表示します -->
[root@centos01 data1]# ls  
nginx-1.6.0.tar.gz
[root@centos01 /]# yum -y install pcre-devel zlib-devel <!--Nginx 依存プログラムをインストールします-->
[root@centos01 /]# useradd -M -s /sbin/nologin nginx <!--Nginx ユーザーの作成と管理-->
[root@centos01 /]# tar zxvf /data1/nginx-1.6.0.tar.gz -C /usr/src/ <!--Nginx パッケージを解凍します-->
[root@centos01 /]#yum -y install gcc pcre-devel zlib-devel make <!--まず依存関係をインストールします-->
[root@centos01 /]# cd /usr/src/nginx-1.6.0/
[root@centos01 nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx --with-http_stub_status_module && make && make install  
        <!--Nginx を設定し、nginx をコンパイルしてインストールします-->
[root@centos01 nginx-1.6.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ <!--Nginx 実行コマンドを最適化-->
[root@centos01 nginx-1.6.0]# echo "www.docker.nginx.com" > /usr/local/nginx/html/index.html      
           <!--Nginx ウェブサイトのホームページのコンテンツを変更します-->
[root@centos01 nginx-1.6.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 
     <!--centos7.203 コンテナで Nginx サービスを開始します-->
[root@centos01 nginx-1.6.0]# netstat -anptu | grep nginx <!--Nginx サービスのポート番号をリッスンして、実行されているかどうかを確認します-->
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6268/nginx: マスター 
[root@centos01 ~]# curl http://192.168.100.10 <!--Docker ホストが centos7.203 コンテナ内の nginx にアクセスします -->
出典: docker
[root@centos01 nginx-1.6.0]# cat /usr/local/nginx/logs/access.log  
     <!--centos7.203 コンテナ内の Nginx への正常なアクセスのログを表示します-->
192.168.100.10 - - [2020年5月12日:21:42:47 +0800] "GET / HTTP/1.1" 200 21 "-" "curl/7.29.0"

6. docker0ネットワークカードパラメータを設定する

[root@centos01 ~]# ifconfig <!--dockerホストのIPアドレスを表示します -->
docker0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 172.17.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0
[root@centos01 ~]# systemctl stop docker <!--docker サービスを停止します-->
[root@centos01 ~]# ip link set dev docker0 down <!--docker0 ブリッジを停止します-->
[root@centos01 ~]# brctl delbr docker0 <!--システムのデフォルトのdocker0ブリッジを削除します-->
[root@centos01 ~]# brctl addbr docker0 <!--docker0 という名前の新しいブリッジを作成します-->
[root@centos01 ~]# ip addr add 192.168.20.1/24 dev dokcer0 <!-- 新しいブリッジ docker0 構成 IP アドレス -->
[root@centos01 ~]# ip link set dev docker0 up <!--新しいdocker0ブリッジを開始します-->
[root@centos01 ~]# vim /etc/docker/daemon.json  
    <!--docker 構成ファイルを変更して、新しいブリッジ docker0 をロードします-->
{"レジストリミラー":["https://6kx4zyno.mirror.aliyuncs.com"]}
{"bip":"192.168.20.1/24"} <!--この行を追加します-->
[root@centos01 ~]# systemctl start docker <!--docker サービスを開始します-->
[root@centos01 ~]# ifconfig <!--docker ホストの詳細な IP 情報を表示します -->
docker0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 192.168.20.1 ネットマスク 255.255.255.0 ブロードキャスト 0.0.0.0
[root@centos01 ~]# docker run -it -d --name centos7.2v1 hub.c.163.com/public/centos:7.2-tools <!--バックグラウンドで実行するコンテナを作成します-->
d0b5392e60cef37f3c44d79a9fb73916720cfc44faa7b73862bee05fb2d6ce7b
[root@centos01 ~]# docker exec -it centos7.2v1 /bin/bash <!--centos7.2v1 コンテナにログインします-->
[root@d0b5392e60ce /]# ifconfig <!--IP アドレスの詳細を表示-->
eth0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 192.168.20.2 ネットマスク 255.255.255.0 ブロードキャスト 0.0.0.0

2. Dockerネットワークの分離

1. Dockerネットワーク分離の原則

ネットワーク スペース名を管理および作成し、分離を実現するために異なるコンテナーを異なるネットワーク スペース名にロードする必要があります。ネットワーク分離はデフォルトでは構成されておらず、コンテナーにはデフォルトで docker0 ネットワーク スペース名が割り当てられます。

2. Dockerコンテナに付属するネットワーク空間名のタイプ

  • bridge: コンテナは docker0 ブリッジにブリッジされます。
  • ホスト: コンテナは Docker ホストのネットワーク構成情報を同期します。
  • none: ネットワークを作成せず、Docker コンテナは TCP/IP 情報を構成する必要がありません。

3. Dockerネットワーク名前空間の分離を構成する

[root@centos01 ~]# docker network ls <!--docker のデフォルトのネットワーク名前空間を表示します-->
ネットワーク ID 名前 ドライバー スコープ
8bb953004416 ブリッジ ブリッジ ローカル
2c18234cad82 ホスト ホスト ローカル
67860e823c36 なし null ローカル
[root@centos01 ~]# docker network create -d bridge liyanxin <!--ネットワーク名前空間を作成します-->
0c69de4672ec173dc4c60b19e0bf93b361f45a804859f7bc2105d85ca83b1169
[root@centos01 ~]# docker network create -d bridge gongsunli <!--ネットワーク名前空間を作成する-->
35687468c9034262173a96e9c23e045cbb8b7ffa6648fc84e015504740815001
[root@centos01 ~]# ifconfig <!--Docker ホストのネットワーク カード情報を表示します-->
br-0c69de4672ec: フラグ=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 172.18.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0

br-35687468c903: フラグ=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 172.19.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0
[root@centos01 ~]# docker run -it -d --name centos6.701 --network=liyanxin hub.c.163.com/public/centos:6.7-tools  
     <!-- 実行中のコンテナを作成し、分離のために liyanxin ネットワーク名前空間に追加します -->
b85a2d8419a98756369ddc3b78247d3d42c178e8e563a936fe973f2f6611f951
[root@centos01 ~]# docker exec -it centos6.701 /bin/bash <!--centos6.701 コンテナにログインします-->
[root@b85a2d8419a9 /]# ifconfig <!--IP アドレスを表示-->
eth0 リンク カプセル化:イーサネット HWaddr 02:42:AC:12:00:02 
     inet アドレス:172.18.0.2 Bcast:0.0.0.0 マスク:255.255.0.0
[root@centos01 ~]# docker run -it -d --name centos6.702 --network=gongsunli hub.c.163.com/public/centos:6.7-tools  
   <!-- 実行中のコンテナを作成し、分離のために gongsunli ネットワーク名前空間に追加します -->
9af0fb7b85af3270f3c7c44b62438f436b22289ac0a7604d6ed522604b7b185f
[root@centos01 ~]# docker exec -it centos6.702 /bin/bash <!--centos6.702 コンテナにログインします-->
[root@9af0fb7b85af /]# ifconfig <!--IP アドレスを表示-->
eth0 リンク カプセル化:イーサネット HWaddr 02:42:AC:13:00:02 
     inet アドレス:172.19.0.2 Bcast:0.0.0.0 マスク:255.255.0.0

3. ネットワーク分離を実現するためにブリッジを構成する

1. ネットワーク分離を実現するためにブリッジを構成する

Docker ホストと他のコンテナ間のコンテナ通信を実装します。

2. ブリッジを構成してネットワーク分離の原則を実装する<br /> 物理ネットワーク カードを作成したブリッジ ネットワーク カードにブリッジします。ブリッジ ネットワーク カードの IP アドレスを構成します。実装するブリッジ ネットワーク カードをロードするコンテナーを作成します。Docker ホスト コンテナーは Docker ホスト コンテナー間で通信します。管理者はブリッジ ネットワーク カードを介して Docker ホストをリモートで管理します。

3. ネットワーク分離を実現するためにDockerブリッジを構成する

[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 
     <!--docker ホストの物理ネットワーク カードをブリッジ ネットワーク カード br0 にブリッジするように変更します-->
タイプ=イーサネット
PROXY_METHOD=なし
BROWSER_ONLY=いいえ
BOOTPROTO=静的
DEFROUTE=はい
名前=ens32
デバイス=ens32
ONBOOT=はい
BRIDGE=br0 <!--この行を追加-->
[root@centos01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-br0  
     <!--br0 ブリッジを作成して生成します-->
[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 <!--br0 ネットワーク カード設定ファイルを編集します-->
TYPE=Bridge <!--この行を変更-->
PROXY_METHOD=なし
BROWSER_ONLY=いいえ
BOOTPROTO=静的
DEFROUTE=はい
NAME=br0 <!--名前を変更する-->
DEVICE=br0 <!--名前を変更-->
ONBOOT=はい
IPADDR=192.168.100.10 <!--ホストのIPアドレスを追加します-->
ネットマスク=255.255.255.0 
[root@centos01 ~]# systemctl restart network <!--docker ホストのネットワーク カード サービスを再起動します-->
[root@centos01 ~]# ifconfig <!--Docker ホストのネットワーク カード情報を表示します-->
br0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 192.168.100.10 ネットマスク 255.255.255.0 ブロードキャスト 192.168.100.255

br-0c69de4672ec: フラグ=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 172.18.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0

br-35687468c903: フラグ=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 172.19.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0

docker0: flags=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 172.17.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0

ens32: flags=4163<UP、BROADCAST、RUNNING、MULTICAST> mtu 1500
    ether 00:0c:29:18:d3:26 txqueuelen 1000 (イーサネット)

ens34: flags=4163<UP、BROADCAST、RUNNING、MULTICAST> mtu 1500
    inet6 fe80::4ad2:dd37:4341:5d8e プ​​レフィックス長 64 スコープID 0x20<リンク>

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    inet 127.0.0.1 ネットマスク 255.0.0.0

veth7b0bb5f: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet6 fe80::ccd3:86ff:fee6:5725 プレフィックス長 64 スコープID 0x20<リンク>

veth7e0f471: フラグ=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet6 fe80::684c:fdff:fe13:b436 プレフィックス長 64 スコープID 0x20<リンク>

virbr0: flags=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 192.168.122.1 ネットマスク 255.255.255.0 ブロードキャスト 192.168.122.255
[root@centos01 ~]# yum -y install git <!--docker ホストに git をインストールします-->
[root@centos01 ~]# git clone https://github.com/jpetazzo/pipework
      <!--docker コンテナ ネットワーク管理ツール pipework をダウンロードします-->
[root@centos01 ~]# cp pipework/pipework /usr/local/bin/ <!--管理コマンドの最適化-->
[root@centos01 ~]# chmod +x /usr/local/bin/pipework <!--実行権限を追加-->
[root@centos01 ~]# docker run -d --name centos6.703 --network=none hub.c.163.com/public/centos:6.7-tools  
       <!-- イメージを介してコンテナを実行します -->
adea0ad48bdde947ec595382d96cba06eb6522ec046e9b3c7bfcb1edb5c84545
[root@centos01 ~]# パイプワーク br0 centos6.703 192.168.100.101/24  
          <!--centos6.703 コンテナの IP アドレスを設定します-->
[root@centos01 ~]# docker exec -it centos6.703 /bin/bash <!--centos6.703 コンテナにログインします-->
[root@adea0ad48bdd /]# ifconfig <!--IP アドレスを表示-->
eth1 リンク カプセル化:イーサネット HWaddr FA:3A:9D:ED:C0:FF 
     inet アドレス:192.168.100.101 Bcast:192.168.100.255 マスク:255.255.255.0
[root@adea0ad48bdd /]# 192.168.100.10にpingを実行
PING 192.168.100.10 (192.168.100.10) 56(84)バイトのデータ。
192.168.100.10 からの 64 バイト: icmp_seq=1 ttl=64 time=0.100 ms
192.168.100.10 からの 64 バイト: icmp_seq=2 ttl=64 time=0.097 ms
192.168.100.10 からの 64 バイト: icmp_seq=3 ttl=64 time=0.039 ms

4. DockerホストコンテナとDockerホストコンテナの通信を構成する

[root@centos02 ~]# ping www.baidu.com <!--新しいサーバーを開き、パブリックネットワークに接続し、docker をインストールします-->
PING www.a.shifen.com (39.156.66.18) 56(84) バイトのデータ。
39.156.66.18 からの 64 バイト (39.156.66.18): icmp_seq=1 ttl=51 time=19.5 ms
39.156.66.18 からの 64 バイト (39.156.66.18): icmp_seq=2 ttl=51 time=17.3 ms
39.156.66.18 からの 64 バイト (39.156.66.18): icmp_seq=3 ttl=51 time=18.1 ms
[root@centos02 ~]# cd /etc/yum.repos.d/
[root@centos02 yum.repos.d]# ls
ローカルリポジトリ
[root@centos02 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 
    <!--centos7 ソースをダウンロード-->
[root@centos02 ~]# yum install docker -y <!--docker をインストール-->
[root@centos02 ~]# systemctl start docker <!--docker を起動します-->
[root@centos02 ~]# systemctl enable docker <!--自動起動を設定する-->
[root@centos02 ~]# docker pull hub.c.163.com/public/centos:6.7-tools <!--イメージをダウンロード-->
[root@centos02 ~]# docker images <!--イメージを表示-->
リポジトリ タグ イメージ ID 作成 サイズ
hub.c.163.com/public/centos 6.7-tools b2ab0ed558bb 3年前 602 MB
[root@centos02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32  
       <!--Docker ホストのネットワーク カード構成情報を変更して、br0 ネットワーク カードにブリッジします -->
タイプ=イーサネット
PROXY_METHOD=なし
BROWSER_ONLY=いいえ
BOOTPROTO=静的
DEFROUTE=はい
名前=ens32
デバイス=ens32
ONBOOT=はい
BRIDGE=br0 <!--この行を追加-->
[root@centos02 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-br0 <!--br0 ブリッジを作成して生成します-->
[root@centos02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 <!--br0 ネットワーク カード設定ファイルを編集します-->
TYPE=Bridge <!--Bridge に変更-->
PROXY_METHOD=なし
BROWSER_ONLY=いいえ
BOOTPROTO=静的
DEFROUTE=はい
NAME=br0 <!--名前を変更する-->
DEVICE=br0 <!--br0 に変更-->
ONBOOT=はい
IPADDR=192.168.100.20 <!--ホストのIPアドレスを追加します-->
ネットマスク=255.255.255.0
[root@centos02 ~]# systemctl restart network <!--docker ホストのネットワーク カード サービスを再起動します-->
[root@centos02 ~]# ifconfig <!--Docker ホストのネットワーク カード情報を表示します-->
br0: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 192.168.100.20 ネットマスク 255.255.255.0 ブロードキャスト 192.168.100.255

docker0: flags=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 172.17.0.1 ネットマスク 255.255.0.0 ブロードキャスト 0.0.0.0

ens32: flags=4163<UP、BROADCAST、RUNNING、MULTICAST> mtu 1500
    ether 00:0c:29:97:5c:9f txqueuelen 1000 (イーサネット)

ens34: flags=4163<UP、BROADCAST、RUNNING、MULTICAST> mtu 1500
    inet 192.168.0.104 ネットマスク 255.255.255.0 ブロードキャスト 192.168.0.255

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    inet 127.0.0.1 ネットマスク 255.0.0.0

virbr0: flags=4099<UP、ブロードキャスト、マルチキャスト> mtu 1500
    inet 192.168.122.1 ネットマスク 255.255.255.0 ブロードキャスト 192.168.122.255
[root@centos02 ~]# yum -y install git <!--git をインストール-->
[root@centos02 ~]# git clone https://github.com/jpetazzo/pipework  
     <!--docker コンテナ ネットワーク管理ツール pipework をダウンロードします-->
[root@centos02 ~]# cp pipework/pipework /usr/local/bin/ <!--管理コマンドの最適化-->
[root@centos02 ~]# chmod +x /usr/local/bin/pipework <!--実行権限を追加-->
[root@centos02 ~]# docker run -d --name centos6.7 --network=none hub.c.163.com/public/centos:6.7-tools <!-- コンテナを実行します -->
abec0a6bd3822a2fd702dc44d1cf3043648aadd1a661e577c23701e30ee9df7a
[root@centos02 ~]# パイプワーク br0 centos6.7 192.168.100.102/24  
     <!--centos6.7 コンテナの IP アドレスを設定します-->
[root@centos02 ~]# docker exec -it centos6.7 /bin/bash <!--centos6.7 コンテナにログイン-->
[root@abec0a6bd382 /]# ifconfig <!--IP アドレスを表示-->
eth1 リンク カプセル化:イーサネット HWaddr EE:01:B7:99:90:1C 
     inet アドレス:192.168.100.102 Bcast:192.168.100.255 マスク:255.255.255.0
[root@abec0a6bd382 /]# 192.168.100.101 にpingを実行 <!---->
PING 192.168.100.101 (192.168.100.101) 56(84) バイトのデータ。
192.168.100.101 からの 64 バイト: icmp_seq=1 ttl=64 time=0.660 ms
192.168.100.101 からの 64 バイト: icmp_seq=2 ttl=64 time=0.865 ms
192.168.100.101 からの 64 バイト: icmp_seq=3 ttl=64 time=0.382 ms
[root@abec0a6bd382 /]# 192.168.100.10 にpingを実行 <!---->
PING 192.168.100.10 (192.168.100.10) 56(84)バイトのデータ。
192.168.100.10 からの 64 バイト: icmp_seq=1 ttl=64 time=0.632 ms
192.168.100.10 からの 64 バイト: icmp_seq=2 ttl=64 time=0.732 ms
192.168.100.10 からの 64 バイト: icmp_seq=3 ttl=64 time=0.796 ms
[root@abec0a6bd382 /]# 192.168.100.20 にpingを実行 <!---->
PING 192.168.100.20 (192.168.100.20) 56(84)バイトのデータ。
192.168.100.20 からの 64 バイト: icmp_seq=1 ttl=64 time=0.144 ms
192.168.100.20 からの 64 バイト: icmp_seq=2 ttl=64 time=0.094 ms
192.168.100.20 からの 64 バイト: icmp_seq=3 ttl=64 time=0.043 ms

これで、Docker コンテナのネットワーク管理とネットワーク分離の実装に関するこの記事は終了です。Docker のネットワーク管理とネットワーク分離の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerとiptablesとブリッジモードのネットワーク分離と通信操作の実装
  • Dockerコンテナでユーザーを分離する方法
  • Dockerを使用してコンテナリソースを制限する方法
  • Docker Docker の保存場所を変更する コンテナイメージのサイズ制限を変更する操作
  • Docker CPU 制限の実装
  • Docker がコンテナに利用可能な CPU を制限する方法
  • Docker でコンテナに使用できるメモリを制限する方法
  • Docker の分離と制限の原則の紹介

<<:  mysql 8.0.19 win10 クイックインストールチュートリアル

>>:  ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

推薦する

デザイン理論:人間中心のグリーンデザイン

「人間中心」と「グリーンデザイン」という2つの視点から考える——デザイン業界の同僚とも議論する2つの...

Nginx ロードバランシングとは何か、そしてそれをどのように設定するか

負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...

冗長カーネルを削除するLinuxディープインの実装方法

前の記事では、deepin linux に新しいカーネルを手動でインストールする方法について説明しま...

MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ

1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...

IIS7~IIS8.5 サーバープロトコルヘッダーの削除または変更

要件: IIS 7、7.5、8.0、8.5、および ASP.NET で HTTP 応答ヘッダーを削除...

デザイン理論: コンテンツプレゼンテーションのための 10 のヒント

<br /> テキスト、記号、リンクの3つの側面に焦点を当て、主に中国語で、個人的な執筆...

JavaScript の新しい要素トラバーサルプロパティを使用して子要素をトラバースする方法を学びます

目次1. ChildNodes属性のトラバーサル2. 要素シリーズ属性のトラバーサル以前は、chil...

Centos7 での MySQL 5.7.20 のインストールと設定に関する詳細なチュートリアル

1. 公式 Web サイトから MySQL 5.7 インストール パッケージ (mysql-5.7....

MySQL テーブル内の重複データを検索して削除する方法の概要

時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...

スキニングを実現するネイティブJavaScript

ネイティブJavaScriptでスキニングを実装するための具体的なコードは参考までに。具体的な内容は...

JDBCデータベースリンクと関連メソッドのカプセル化の詳細な説明

JDBCデータベースリンクと関連メソッドのカプセル化の詳細な説明MySQL データベースを使用して、...

きちんとしたHTMLマークアップを使用してページを構築します

インターネットは絶えず進化する有機体です。長期にわたってインターネットの発展に適応できるページを構築...

MySQLの高可用性と高パフォーマンスのクラスタを構築する方法

目次MySQL NDB Clusterとはクラスター構築のための準備作業クラスターのデプロイを開始す...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...

CSSアニメーションがJSによってブロックされるかどうかについての簡単な議論

CSS のアニメーション部分は JS によってブロックされますが、transform のアニメーショ...