docker网络

一、网络原理

1、查询IP地址

# 查询docker0主机IP地址
[root@172-0-0-2 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo                          #本机回环地址
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:e0:4c:36:06:04 brd ff:ff:ff:ff:ff:ff
    inet 172.0.0.2/24 brd 172.0.0.255 scope global noprefixroute enp3s0       #本机内网地址
       valid_lft forever preferred_lft forever
    inet6 fe80::c671:6192:2d73:9b29/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:0f:17:8e:3a brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0      #docker0 地址
       valid_lft forever preferred_lft forever
    inet6 fe80::42:fff:fe17:8e3a/64 scope link 
       valid_lft forever preferred_lft forever

2、运行并启动容器

#运行容器
[root@172-0-0-2 ~]# docker run -d -P --name tomcat01 tomcat
#查询容器IP命令
[root@172-0-0-2 ~]# docker exec -it tomcat01 ip addr  
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
94: eth0@if95: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
#Linux可以ping通容器
[root@172-0-0-2 ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.065 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.058 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.081 ms

3、原理

1、每启动一个docker容器,docker就会给docker容器分配一个IP,我们只要安装了docker,就会有一个网卡docker0
桥接模式,使用的技术是evth-pair技术

测试第二个容器,结论:又增加一对网卡

[root@172-0-0-2 ~]# docker exec -it tomcat2 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
96: eth0@if97: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0  
       valid_lft forever preferred_lft forever
failed to resize tty, using default size

#evth-pair 就是一对虚拟接口,成对出现,一端连接协议一端互联 (evth-pair充当一个桥梁,连接虚拟网络设备)

4、测试网络连通性

#结论:容器与容器之间网络是相通的
[root@172-0-0-2 ~]# docker exec -it tomcat2 ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.114 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.119 ms

5、结论:Tomcat01 和Tomcat02 是公用的一个路由器,docker0
所有的容器不指定网络情况下,都是docker0路由的,docker会给容器分配一个IP
#Docker使用的就是网络接口都是虚拟的,虚拟的转发效率高。只要容器删除,对应网桥一对也会删除.

二、容器互联–link(不常用)

–link参数格式为 --link name:alias,其中name是要连接的容器名称,alias是别名

#探究:inspect

[root@172-0-0-2 ~]# 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

Run 'docker network COMMAND --help' for more information on a command.

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "8ebb6f76a25020a6cd5fcd6ce033a9c44a2d5b2b6faafaaefac5fb86ca761b06",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "32771"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/8ebb6f76a250",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "1c5f74ea42b15653e1e84a93782cff9a0fad65a6199e6cd9fa55c2088ea950c3",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "416e3727e427d9235e2f61754ba96cf8b39f0aec8c8c257807b06ce0e180e41b",
                    "EndpointID": "1c5f74ea42b15653e1e84a93782cff9a0fad65a6199e6cd9fa55c2088ea950c3",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
        }
    }
]
#结论:这个tomcat03就是在本地配置了tomcat2的配置

三、容器自定义网络

#查看所有docker网络

[root@172-0-0-2 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
416e3727e427        bridge              bridge              local
51995348d6ab        host                host                local
6651035c40ec        none                null                local
#网络模式
bridge : 桥接 docker(默认)
none   :  不配置网络
host   :  和宿主机共享网络
container : 容器网络连通(用的少,局限性很大)

测试网络

[root@172-0-0-2 ~]# 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

Run 'docker network COMMAND --help' for more information on a command.
#直接启动的命令 : --net bridge,而这个就是docker0
[root@172-0-0-2 ~]# docker run -d -P --name centos01  centos
[root@172-0-0-2 ~]# docker run -d -P --name centos01 --net bridge centos

#docker0特点:默认,域名不能访问, --link可以打通连接

#自定义创建网络
# --driver bridge
# --subnet 172.0.0.3
# --gateway 172.0.0.1
[root@172-0-0-2 ~]# docker network create --help 

Usage:  docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default
                             map[])
      --config-from string   The network from which copying the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR format that represents a network segment

#修改桥接模式,IP地址,网关,子网掩码
[root@172-0-0-2 ~]# docker network create --driver bridge --subnet 172.0.0.3/24 --gateway 172.0.0.1 mynet

#列出网络模式
[root@172-0-0-2 ~]# docker network ls

四、网络连通

#docker网络连接
[root@CentOS7 ~]# docker network connect --help

Usage:  docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network

Options:
      --alias strings           Add network-scoped alias for the container
      --driver-opt strings      driver options for the network
      --ip string               IPv4 address (e.g., 172.30.100.104)
      --ip6 string              IPv6 address (e.g., 2001:db8::33)
      --link list               Add link to another container
      --link-local-ip strings   Add a link-local address for the container

#测试
[root@CentOS7 ~]# docker network connect mynet centos

#结论:连通之后就是将centos放到mynet下
#一个容器两个IP地址:例阿里云公网IP,内网IP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值