Docker学习(五)docker网络(Docker0、evth-pair 技术、--link、docker network)

Docker

在这里插入图片描述


一、Docker网络

1. Docker0网络

启动docker后,输入命令 ip addr,可以看到docker0地址:
docker0就是安装docker后,docker的网卡。

在这里插入图片描述

2. 测试

  1. 启动一个tomcat容器,然后查看容器内部网络地址:docker exec -it tomcat01 ip addr

在这里插入图片描述
我们可以看到两个IP地址: lo 和eth0@,这个eth0就是docker为我们分配的,我们尝试用linux主机去ping容器内部,看能否ping通?

在这里插入图片描述
发现是可以ping通的!我们看到 docker0的ip地址为:172.17.0.1 ,启动的tomcat01容器分配的地址为:172.17.0.3,这两个ip在同一网段。

  1. 再输入 ip addr 可以发现多了一对网卡和上面启动的tomcat01容器相对应

在这里插入图片描述

  • 我们只要安装了docker,就会有一个网卡(docker0),网络模式为桥接模式,使用的是 evth-pair技术;
  • 每启动一个容器docker就会为它分配一个IP地址,对应的也会多一对网卡!
  • 容器和linux主机可以ping通,而且每个容器之间也可以通过ip地址ping通。
  1. evth-pair 技术
    docker容器带来的网卡都是一对一对的,evth-pair 就是一对的虚拟设备接口,都是成对出现的,一段连着协议,一段彼此连接,evth-pair 就像一个桥梁,连接各种虚拟网络设备。

两个tomcat容器怎么通信的?(桥接+evth-pair)

在这里插入图片描述
两个容器公用一个路由器(docker0),所有容器不指定网络时,都是由docker0路由的,它会为容器分配一个默认的ip地址,当容器删除时,对应的一对网桥就消失了。

二、容器互联(–link)

1. --link

  • 问题:不使用ip地址ping,容器之间可不可以通过容器名来ping通?

这里我们启动两个tomcat容器 (tomcat01、tomcat02),通过容器名ping:

在这里插入图片描述
我们发现时ping不通的,docker提供了 --link命令

docker run -d -P --name tomcat02 --link tomcat01 tomcat

这时我们再通过容器名去ping:

在这里插入图片描述
发现可以ping通了!反向ping可以通吗?

在这里插入图片描述
不能反向ping!因为我们是用 tomcat02 --link tomcat01。

  • –link本质
    我们查看tomcat02的网络配置文件,可以发现它与tomcat01的关联:

在这里插入图片描述
所以docker 的–link命令,其实就是在hosts文件中增加了一个映射!

2. docker network [可选参数]命令

# 可选参数
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
  1. docker network ls
    网络列表

在这里插入图片描述
2. docker network NETWORK ID
检查一个或多个网络上的显示详细信息

[root@localhost ~]#  docker network inspect 6b6cc70f95a7
[
    {
        "Name": "bridge",
        "Id": "6b6cc70f95a716a340a5207191d635d2f23c9bff1ad7900a136a0b8a12a7664d",
        "Created": "2020-08-24T12:36:18.053334885+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": {
            "29704d74f807143d212b8ba19922c6d36244bb54ceefc053fc2daa3857fa5b9a": {
                "Name": "pedantic_curie",
                "EndpointID": "ec79480d7b5e5c58467dd06a2e5118805c6faa2f4a5b2836b728e7bd84ab64d4",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "7a8de64c401bc05fe680b4898febb9eb6993756e1776616a7d0b8dbbbb29e480": {
                "Name": "tomcat01",
                "EndpointID": "378f41577b6822e91ae6d64b8513d113eca2dc0f57aa260ab0afb6df8a5fbdc4",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "8d5c45c413e8e3cb3eff0f6d28af9ab7bd053935bf633fe8ae7a37d67708513d": {
                "Name": "tomcat02",
                "EndpointID": "d34fc2f33dd98cb488ada1a5de02ddd0d1d111e790d90e01ac7075fb1e04e5ed",
                "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": {}
    }
]

三、自定义网络

  1. docker network ls
    网络列表

在这里插入图片描述
bridge:桥接模式(docker默认)
host:和宿主机共享网络
none:不配置网络

  1. 我们上面启动容器通过 docker run -d -P --name tomcat01 tomcat 启动的,实际上docker默认为 docker run -d -P --name tomcat01 --net bridge tomcat,容器之间不能通过域名访问,只能使用 --link打通,这里我们自定义网络!
  2. 自定义网络
    docker network create
# docker network create --driver bridge:桥接模式 --subnet:子网 --gateway:网关 mynet:网络名
docker network create --driver bridge --subnet 192.168.0.0/16  --gateway 192.168.0.1 mynet

查看自定义网络信息:

在这里插入图片描述
我们启动两个tomcat容器,走我们自定义的网络:

docker run -d -P --name tomcat01-net --net mynet tomcat
docker run -d -P --name tomcat02-net --net mynet tomcat

查看自定义网络情况:docker network inspect mynet

在这里插入图片描述

测试:

我们发现将容器映射到自定义的网络上,容器之间不论是通过ip还是名字,不论正向还是反向都能互相ping通!!

四、网络连通

我们假象在不同网卡上的容器间能否直连?

在这里插入图片描述
显然这样是不可能的!

我们可以使用docker network connect连接,连接一个容器到一个网络,从而实现!

在这里插入图片描述
测试:

# 将docker0下的tomcat01连接到mynet网卡上
docker network connect mynet tomcat01

查看mynet信息:

在这里插入图片描述
我们发现,通过docker network connect命令,成功将tomcat01连接到mynet上,这样一个容器就拥有两个IP地址!!

此时两个容器就可以ping通了:

在这里插入图片描述

//下篇再见…谢谢
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值