Docker网络一

目录

一 查看宿主机网络

二 容器网络原理



一 查看宿主机网络

ip addr

二 容器网络原理

1. 运行容器

docker run -d --name tomcat01 tomcat

2. 查看容器ip

1. 方式1 docker exec -it 容器名或id ip addr
   docker exec -it d667c0d4681b ip addr
 注意:
    如果ip addr如果不能执行,请进入容器执行命令:apt update && apt install -y iproute2

2. 方式2 
 docker inspect 容器ID或容器名 | grep IPAddress

3. 其他方式 自行百度

4. 查看容器内部网络地址 发现容器启动的时候会得到一个 eth0@if551 ip地址,docker分配!

 3.  测试宿主机和容器之间ip发现网络是否相通的

4. 在运行一个容器

docker run -d --name tomcat02 tomcat

5. 查看宿主机网络发现此时又多了一对网卡 (多的就是刚才tomcat02容器的) 

  6. 总结

1. 我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要按照了docker, 就会有一个docker0桥接模式,使用的技术是veth-pair技术!

2. 我们发现这个容器带来网卡,都是一对对的 veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连 正因为有这个特性 veth-pair 充当一个桥梁,连接各种虚拟网络设备的 OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术

  7. 两个容器:tomcat01和tomcat02 ip互相可以ping的通

docker-tomcat docker exec -it tomcat02 ping 172.17.0.2

 7.1 为什么他们是通的呢,看下图

  7.2 结论

**结论**:
1. tomcat01和tomcat02公用一个路由器,docker0。 所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用 ip

2. Docker中所有网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)只要容器删除,对应的网桥一对就没了!

7.3  Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥 docker0

1. 作用

使得两个容器之间可以,通过容器名进行互相通信。docker官方已不推荐使用docker run --link来链接2个容器互相通信,随后的版本中会删除--link。

2. 示例

1. 两个容器通过ip可以互通,但是通过名字就不可以
 docker exec -it tomcat02 ping tomca01 # ping不通 ping: tomca01: Name or service not known 

2. 新建一个容器tomcat03。关联容器tomcat02  
  docker run -d -P --name tomcat03 --link tomcat02 tomcat 

3. 用tomcat03 ping tomcat02 可以ping通 
 docker exec -it tomcat03 ping tomcat02 
 
4. 用tomcat02 ping tomcat03 ping不通
   docker exec -it tomcat02 ping tomcat03

3. 分析

3.1 列出docker的所有网络

 docker network ls

网络模式

详情见Docker容器原理剖析:https://blog.csdn.net/qq_41822345/article/details/115229833

bridge :桥接 docker(默认,自己创建也是用bridge模式)。

none :不配置网络,安全性高。使用场景较少。

host :和所主机共享网络。

container :容器网络连通(用得少!局限很大)。

 

3.2  查看某个网络内部信心

docker network inspect test-network 网络id或网络名
[root@VM-0-4-centos ~]# docker network inspect  f51c68840024
[
    {
        "Name": "bridge",
        "Id": "f51c688400249b686e1823ff12064bfb455d20ab23d76297f2147bcf8b8e58b8",
        "Created": "2022-03-17T15:11:33.103676398+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {  # 这里都是容器的网络信息
            "4dd7bf6861ba03d7c4ef9fc28e532967d88b4d13e1ffbc4a98815bc202f548e8": {
                "Name": "tomcat02",
                "EndpointID": "2ea0d23836931d104527197f2dedcab483bd74a160423a41ef8753c5b1c04e7c",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "d667c0d4681b1a62d0089dc381fae9bdce00fe62b38c4d992546460c4d76835c": {
                "Name": "tomcat01",
                "EndpointID": "095385e371f36bf74ecafd27c8861df596a616a8e646946e8dc9eb6f09edf767",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/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@VM-0-4-centos ~]# 

总结

# 我们直接启动的命令 --net bridge,而这个就是我们得docker0
# bridge就是docker0
$ docker run -d -P --name tomcat01 tomcat
等价于 => docker run -d -P --name tomcat01 --net bridge tomcat

# docker0,特点:默认,域名不能访问。 --link可以打通连接,但是很麻烦!
# 我们可以 自定义一个网络
$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值