0
点赞
收藏
分享

微信扫一扫

docker — 容器网络

目录

一、容器网络

1、Docker Native Network drivers

1. Docker 提供如下 5 种原生的 Network drivers

2. Docker 安装时,自动在host上创建了如下3个网络

2、none 网络

3、host 网络

4、bridge 网络

1. docker0 网络

2. 在宿主机上查看 docker0

3. 查看docker0 网络配置

4. 在后台运行一个名为httpd1 的 httpd 容器

5. 查看该容器的网络配置

5、user-defined Bridge 网络

1. 用户可按需创建 bridge 网桥,称为 user-defined Bridge

2. 创建一个 user-defined Bridge,命名为net1

3. 查看 net1 网桥信息,已自动配置 subnet 和 gateway

4. 创建第二个网桥,指定IP网段,命名为 net2

5. 启动3个 centos 容器,分别命名为c1、c2、c3

 6. 查看三个 centos 容器的 IP 地址信息

7. 进入容器c3,进行连通性测试

8. 为 c1 添加一块网卡,加入到 net2 网络

9. 进入 c1,验证连通性

10. 删除相关容器


一、容器网络

1、Docker Native Network drivers

1. Docker 提供如下 5 种原生的 Network drivers

2. Docker 安装时,自动在host上创建了如下3个网络

2、none 网络

3、host 网络

4、bridge 网络

1. docker0 网络

2. 在宿主机上查看 docker0

3. 查看docker0 网络配置

4. 在后台运行一个名为httpd1 的 httpd 容器

# docker run -itd --name httpd1 httpd

5. 查看该容器的网络配置

确认"NetworkID"和docker0的ID相同,"IPAddress"同网段

# docker inspect httpd1        
...输出省略
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "7a84c0c796f04413629020321d2adc0d35fbfdef419d5b9cee78998b0c494274",
#networkID对应brigde-ID    
                    "EndpointID": "94c254fa5a2cb2da2c475ee4a24f5f00a8a6975d7c8cdb338e0fc0226389a7b9",
                    "Gateway": "172.17.0.1",    
                    "IPAddress": "172.17.0.2",    #与网桥在同一网段
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
...输出省略

5、user-defined Bridge 网络

1. 用户可按需创建 bridge 网桥,称为 user-defined Bridge

2. 创建一个 user-defined Bridge,命名为net1

# docker network create --driver bridge net1    #通过bridge桥接设备驱动创建net1
324c90cd97719e363e2e2c2ce0508f8a2d964bc41898ebcaf8bc827db3627fa8

3. 查看 net1 网桥信息,已自动配置 subnet 和 gateway

root@k8s-master:~# docker network inspect net1     
...输出省略 
       "Name": "net1",
        "Id": "324c90cd97719e363e2e2c2ce0508f8a2d964bc41898ebcaf8bc827db3627fa8",
        "Created": "2022-10-26T08:10:28.784844522Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
...输出省略 

4. 创建第二个网桥,指定IP网段,命名为 net2

# docker network create --driver bridge --subnet 172.10.10.0/24 --gateway 172.10.10.1 net2
6eecbf049df44ecbd7aad0978115aac0cad4942831fa76af2e34f99f8d09fcd5

5. 启动3个 centos 容器,分别命名为c1、c2、c3

 6. 查看三个 centos 容器的 IP 地址信息

# docker inspect c1 c2 c3 | grep -A 12 Networks | grep "IPAddress" #依次对应c1、c2、c3
                    "IPAddress": "172.18.0.2",
                    "IPAddress": "172.10.10.2",
                    "IPAddress": "172.10.10.10",

7. 进入容器c3,进行连通性测试

8. 为 c1 添加一块网卡,加入到 net2 网络

~# docker network connect net2 c1

'查看容器内网卡'
docker inspect c1 | grep -wA `docker inspect c1|wc -l` "Networks" | sed -n '/".*{$/ s/": {//p'|sed -n '2,3s/.*"//p'
net1
net2

9. 进入 c1,验证连通性

# docker exec -it c1 ping -c 3 172.10.10.1
PING 172.10.10.1 (172.10.10.1) 56(84) bytes of data.
64 bytes from 172.10.10.1: icmp_seq=1 ttl=64 time=0.170 ms
64 bytes from 172.10.10.1: icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from 172.10.10.1: icmp_seq=3 ttl=64 time=0.042 ms

--- 172.10.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2030ms
rtt min/avg/max/mdev = 0.042/0.095/0.170/0.054 ms

10. 删除相关容器

'注意停止和删除顺序,不然无法删除'
# docker stop c1 c2 c3 h1 h2    #停止容器
    
# docker rm c1 c2 c3 h1 h2      #删除容器

# docker network rm net1 net2   #删除bridge
举报

相关推荐

0 条评论