16.docker network

这个用到了 veth-pair 容器里一个ip 宿主机一个ip

容器之间也可以ping通

 

宿主机 有个docker0网卡

当容器1生成时 会有个eth0@if数字的网卡 同时 宿主机也会同时生成个veth???@if数字 的网卡

容器2 同理

它是把宿主机的docker0这个东西当做路由了

 

问:

现有容器03 和 容器04

这两个 想 04 ping 通03 && 03 ping 04 (通过容器名字ping通)

直接在容器中/etc/hosts 文件编辑即可

 

还可通过命令

当创建容器04时就 加个 --link 另一个容器名字 就可以了

 

--link 本质就是改个/etc/hosts文件这个不好玩

 

 

 

[root@qq ~]# docker network ls          #查看有哪些网络
NETWORK ID         NAME               DRIVER             SCOPE
5ccd0d862768       bridge             bridge             local
2c1d189ac353       host               host               local
ded0d55931c2       none               null               local
[root@qq ~]# docker network inspect 5ccd0d862768   #查看网络的具体信息
[
  {
      "Name": "bridge",
      "Id": "5ccd0d86276849d0d6af0d4837aca04b10cdb05f3b61c757cd8981fe57da882d",
      "Created": "2020-05-19T21:12:04.053833002+08:00",
      "Scope": "local",
      "Driver": "bridge",
      "EnableIPv6": false,
      "IPAM": {
          "Driver": "default",
          "Options": null,
          "Config": [
              {
                  "Subnet": "172.17.0.0/16", #这是宿主机的
                  "Gateway": "172.17.0.1"
              }
          ]
      },
      "Internal": false,
      "Attachable": false,
      "Ingress": false,
      "ConfigFrom": {
          "Network": ""
      },
      "ConfigOnly": false,
      "Containers": {
          "15c3653b15bb958c26110bba8f1a759ea789510a8c2a10451e5de76df9ca086d": {
              "Name": "tomcate02",
              "EndpointID": "313c891b87c4a0d412ac5ef0bc23296d055193a35d5eafa1354561c4a497d9aa",
              "MacAddress": "02:42:ac:11:00:03",
              "IPv4Address": "172.17.0.3/16",
              "IPv6Address": ""
          },
          "519fdc35599696caed3e4d7a03c0228c309d831eadd5e8a0d193e4ff628fe056": {
              "Name": "tomcat01",
              "EndpointID": "d2d3cd4897e77e9ec5ea4eeaee462e43a9ccbe7326aa105116c4db0fe2672632",
              "MacAddress": "02:42:ac:11:00:02",
              "IPv4Address": "172.17.0.2/16",
              "IPv6Address": ""
          },
          "72153caeeba026409bad3c207cda3557a889545ef7ac08b99af8f322007134b5": {
              "Name": "tomcat03",
              "EndpointID": "a51bfbd2c6228c3f6b9bec9044cf5ed99d58de794d451e38e43a96af851773ea",
              "MacAddress": "02:42:ac:11:00:04",
              "IPv4Address": "172.17.0.4/16",
              "IPv6Address": ""
          }
      },
      "Options": {
          "com.docker.network.bridge.default_bridge": "true",
          "com.docker.network.bridge.enable_icc": "true",
          "com.docker.network.bridge.enable_ip_masquerade": "true",
          "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
          "com.docker.network.bridge.name": "docker0",
          "com.docker.network.driver.mtu": "1500"
      },
      "Labels": {}
  }
]
[root@qq ~]#

 

image-20200519224627927

 

docker network命令
[root@qq ~]# docker network --help

Usage: docker network COMMAND

Manage networks

Commands:
connect     Connect a container to a network
create     Create a network                                
disconnect Disconnect a container from a network
inspect     Display detailed information on one or more networks
 ls         List networks
prune       Remove all unused networks
 rm         Remove one or more networks

\

 

#之前这个命令
docker run -d -P --name tomcat01 tomcat         #这个默认有个 --net bridge   这个参数
#这个bridge 就是 宿主机中的 docker0

 

[root@qq ~]# docker network create --driver bridge --subnet 192.168.110.0/24 --gateway 192.168.110.1 mynet      #这个就新建了个网络
# --driver bridge   是桥接的意思(通过一个网桥上网)
c7858af01f6a49785a29e03cfad804d2a3f397de318a9d50849e5c78db25e3e6
[root@qq ~]# docker network ls
NETWORK ID         NAME               DRIVER             SCOPE
5ccd0d862768       bridge             bridge             local
2c1d189ac353       host               host               local
c7858af01f6a       mynet               bridge             local
ded0d55931c2       none               null               local
[root@qq ~]#
[root@qq ~]# docker network inspect mynet
[
  {
      "Name": "mynet",
      "Id": "c7858af01f6a49785a29e03cfad804d2a3f397de318a9d50849e5c78db25e3e6",
      "Created": "2020-05-19T22:57:36.088668856+08:00",
      "Scope": "local",
      "Driver": "bridge",
      "EnableIPv6": false,
      "IPAM": {
          "Driver": "default",
          "Options": {},
          "Config": [
              {
                  "Subnet": "192.168.110.0/24",
                  "Gateway": "192.168.110.1"
              }
          ]
      },
      "Internal": false,
      "Attachable": false,
      "Ingress": false,
      "ConfigFrom": {
          "Network": ""
      },
      "ConfigOnly": false,
      "Containers": {},
      "Options": {},
      "Labels": {}
  }
]

上面就是建立个局域网

 

 

开始用这个mynet网
[root@qq ~]# docker run -d -P --name tomcat-mynet01 --net mynet tomcat         #开了个容器 网络是mynet
c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb
[root@qq ~]# docker run -d -P --name tomcat-mynet02 --net mynet tomcat #开了个容器 网络是mynet
5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b
[root@qq ~]# docker network inspect mynet
[
  {
       "Name": "mynet",
       "Id": "c7858af01f6a49785a29e03cfad804d2a3f397de318a9d50849e5c78db25e3e6",
       "Created": "2020-05-19T22:57:36.088668856+08:00",
       "Scope": "local",
       "Driver": "bridge",
       "EnableIPv6": false,
       "IPAM": {
           "Driver": "default",
           "Options": {},
           "Config": [
              {
                   "Subnet": "192.168.110.0/24",
                   "Gateway": "192.168.110.1"
              }
          ]
      },
       "Internal": false,
       "Attachable": false,
       "Ingress": false,
       "ConfigFrom": {
           "Network": ""
      },
       "ConfigOnly": false,
       "Containers": {
           "5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b": {
               "Name": "tomcat-mynet02",
               "EndpointID": "4882cb85e77a26e63492a29054d045b265a02ff1dfa2624143090bf988606fe6",
               "MacAddress": "02:42:c0:a8:6e:03",
               "IPv4Address": "192.168.110.3/24",        #这个是自动分配的
               "IPv6Address": ""
          },
           "c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb": {
               "Name": "tomcat-mynet01",
               "EndpointID": "897a2af375af6cc7ff5e74826d41e3898ba49b27d276358a9fcf074ed983b76b",
               "MacAddress": "02:42:c0:a8:6e:02",
               "IPv4Address": "192.168.110.2/24",     #这个是分配的网址
               "IPv6Address": ""
          }
      },
       "Options": {},
       "Labels": {}
  }
]
[root@qq ~]#
设置了个局域网myweb后就会有这样的功能

 

可以通过域名相互ping通了(这个是docker默认的(docker0网卡)不能这样的,只能通过自己修改/etc/hosts文件(或者用命令--link 解决))
[root@qq ~]# docker exec -it tomcat-mynet01 ping tomcat-mynet02
PING tomcat-mynet02 (192.168.110.3) 56(84) bytes of data.
64 bytes from tomcat-mynet02.mynet (192.168.110.3): icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from tomcat-mynet02.mynet (192.168.110.3): icmp_seq=2 ttl=64 time=0.109 ms
^C
--- tomcat-mynet02 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.074/0.091/0.109/0.019 ms
[root@qq ~]# docker exec -it tomcat-mynet02 ping tomcat-mynet01
PING tomcat-mynet01 (192.168.110.2) 56(84) bytes of data.
64 bytes from tomcat-mynet01.mynet (192.168.110.2): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from tomcat-mynet01.mynet (192.168.110.2): icmp_seq=2 ttl=64 time=0.110 ms
^C
--- tomcat-mynet01 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.030/0.070/0.110/0.040 ms
[root@qq ~]#

 

又有个新问题

如果我有个在 docker0 网卡(172.17.0.0)的 容器tomcat01 和 tomcat02

想ping 通

在mynet(192.168.110.0) 网络的 容器 tomcat-mynet01 和 tomcat-mynet02 怎么办?

 

[root@qq ~]# docker network connect mynet tomcat01        #这个产生的结果是
[root@qq ~]# docker network inspect mynet

由原来的这个
"Containers": {
           "5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b": {
               "Name": "tomcat-mynet02",
               "EndpointID": "4882cb85e77a26e63492a29054d045b265a02ff1dfa2624143090bf988606fe6",
               "MacAddress": "02:42:c0:a8:6e:03",
               "IPv4Address": "192.168.110.3/24",
               "IPv6Address": ""
          },
           "c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb": {
               "Name": "tomcat-mynet01",
               "EndpointID": "897a2af375af6cc7ff5e74826d41e3898ba49b27d276358a9fcf074ed983b76b",
               "MacAddress": "02:42:c0:a8:6e:02",
               "IPv4Address": "192.168.110.2/24",
               "IPv6Address": ""
          }
      },
变成了这个
    "Containers": {
           "5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b": {
               "Name": "tomcat-mynet02",
               "EndpointID": "4882cb85e77a26e63492a29054d045b265a02ff1dfa2624143090bf988606fe6",
               "MacAddress": "02:42:c0:a8:6e:03",
               "IPv4Address": "192.168.110.3/24",
               "IPv6Address": ""
          },
           "825077f8c456be3ded9c46557dd554059b09a0429b3d3b17b2a5104b9e9b180f": {
               "Name": "tomcat01",
               "EndpointID": "7adc356c4cf2a7a748c1ce6c48465c553a864b033fef5e9dd16bf28e61d0aeed",
               "MacAddress": "02:42:c0:a8:6e:04",  
               "IPv4Address": "192.168.110.4/24",            ###多了个这
               "IPv6Address": ""
          },
           "c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb": {
               "Name": "tomcat-mynet01",
               "EndpointID": "897a2af375af6cc7ff5e74826d41e3898ba49b27d276358a9fcf074ed983b76b",
               "MacAddress": "02:42:c0:a8:6e:02",
               "IPv4Address": "192.168.110.2/24",
               "IPv6Address": ""
          }
      },
       
       
      这个就是 一个容器两个地址

经测试这个tomcat-myweb01 && tomcat-myweb02 && tomcat01 互联互通

 

当tomcat02 这个容器仍然不能 ping 通 myweb中的容器 ,,,,可以用connet 联通下就可以了

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/amszdj/p/12920452.html