Docker网络(上)

简介: Docker网络

一、Docker网络简介


(1)查看Docker网络


******查看Docker的网络模式
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
edca3506ab93        bridge              bridge              local        
13dcc19e20b0        host                host                local
80abc22e3804        none                null                local
#Docker的三种模式
bridge:桥接模式,此模式下容器可以通过Docker0网卡和外网通信,也可以和宿主机的其他容器进行通信,但是不能和其他主机的容器进行通信,因为可以会造成ip地址冲突,此模式是docker的默认网络模式
host:仅主机模式,此模式下容器会跟宿主机共享网络地址
none:这个模式没有任何网络,此模式下容器不可以跟其他任何主机或容器进行通信,只有一个lo网卡,地址是127的回环地址


  • 每个容器都有ip,而这个ip是由Docker生成的Docker0网卡分配的,默认分配的网段就是172.17.0.0/16的网段,这个网段是可以自定义的,并且只有容器是bridge模式时,会自动分配


容器ip:

3ae1cafdf308497eb230f260fbbb1b84.png

Docker0 ip:


98069b1373d34c068f7fa3bfb15621bb.png

可以看到ip都是同网段的


  • 使用 Docker inspect 查看容器的详细信息,可以看到网关是指向Docker0网卡的


a3a7f6a5aa9441cd87088483b5071b62.png

在查看宿主机ip时,在Docker下面还有一块网卡,那块网卡就是容器的网卡

7559be978dd1444cbe08f7ed25b3340d.png

518cdf9698ff40e9ace4f8f170b6ac42.png


这里的网卡if12表示是宿主机的序列号为12的网卡,并且宿主机的12网卡后面是if11,可以看到容器的网卡序列号为11,都是互相对应的,而宿主机的veth网卡其实相当于一个虚拟交换机,用于容器和宿主机之间互相通信


二、Docker的bridge网络


bridge网络架构示意图:


宿主机的veth网卡在每一个容器创建后都会存在,作用就是相当于一个虚拟交换机,从下面的图可以看出每个veth网卡都连接这相应的容器和宿主机

31ccb855a17346efbeb71b0424d374ca.png


(1)创建使用bridge网络的容器

******查看bridge网络模式的信息
[root@docker ~]# docker network inspect bridge
******查看镜像默认映射的端口
[root@docker ~]# docker inspect nginx 
。。。。。。
            "ExposedPorts": {
                "80/tcp": {}      #这里就是镜像默认的端口
            },
。。。。。。
******查看容器的端口号
[root@docker ~]# docker run -d --name wen --net bridge nginx:latest     #创建一个不带-p或者-P选项的容器
dac2bcfad659ecaf0eff97401f15ad0bbd66b4ae21493ca39755f06334818653  
[root@docker ~]# docker run -d -P --name web2 nginx   #创建一个带-p或-P选项的容器
de7000efdc4a5ccb37c084faac2393542ec68edde723663d122468c640c4d178
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
de7000efdc4a        nginx               "/docker-entrypoint.…"   2 seconds ago       Up 1 second         0.0.0.0:32768->80/tcp   web2
dac2bcfad659        nginx:latest        "/docker-entrypoint.…"   9 minutes ago       Up 9 minutes        80/tcp                  wen
[root@docker ~]# docker port de7000efdc4a    #后面写容器的id,只能查看使用了-p或者-P选项启动的容器端口,容器启动如果没有指定端口映射,那么这个容器的端口就是它使用镜像的默认端口
80/tcp -> 0.0.0.0:32768
[root@docker ~]# docker port dac2bcfad659    #查看不带-P选项的容器是不会输出任何信息的

(2)修改容器的默认网段

#修改容器的默认网段只需要修改daemon.json文件即可
[root@docker ~]# vim /etc/docker/daemon.json    #修改文件
{
  "registry-mirrors": ["https://w4uieobw.mirror.aliyuncs.com"],  #这个是指定Docker Hub镜像仓库的URL
  "log-driver": "journald","bip":"192.168.200.1/24"            #这个就是设置Docker容器分配的网段,不能与宿主机同一网段
}
#保存退出
[root@docker ~]# systemctl restart docker   #重启docker,重启docker时会自动停止所有容器
[root@docker ~]# ip a | grep docker0      #查看docker0网卡网段,成功变成200网段
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
[root@docker ~]# docker ps -a    #查看容器,发现自动停止了
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
c176da0ed7d2        tomcat:latest       "/bin/bash"         11 minutes ago      Exited (0) About a minute ago                       tomcat
[root@docker ~]# docker rm c176da0ed7d2   #先删除之前创建的容器
c176da0ed7d2
[root@docker ~]# docker run -it --name tomcat  tomcat:latest /bin/bash  #再次开启
root@65f3c83d9657:/usr/local/tomcat# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    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
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:c8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.200.2/24 brd 192.168.200.255 scope global eth0   #查看ip发现成功修改
       valid_lft forever preferred_lft forever


三、none网络

#使用none网络的容器除了lo网卡,没有其他任何网卡,完全与外界隔离,适用于不需要访问外部服务也不运行外部服务访问自己的应用场景
******查看none网络的信息
[root@docker ~]# docker network inspect none
******创建使用none网络的容器
[root@docker ~]# docker run -it --name none --net none busybox:latest 
/ # ip a                       #查看网络发现只有lo一个网卡,只有一个回环地址,所以也无法和外部服务通信
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
/ # 

四、host网络


  • 使用host网络的主机,和宿主机共享网络地址,使用host网络模式可以使容器获得最好的数据转发性能
  • 也正因为和宿主机共享网络地址,所以在使用多个host网络的容器时,多个容器会共享宿主机的网络地址,这样就需要容器上运行服务的端口不能相同,如果有端口相同的服务就需要手动去修改端口号
  • 使用host模式一般只装一台容器,因为共享了宿主机的网络地址
******查看host网络的信息
[root@docker ~]# docker network inspect host
******创建使用host网络的容器
[root@docker ~]# docker run -it --name host --net host busybox:latest   
/ # ip a   #查看创建容器的网络信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:54:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.202/24 brd 192.168.100.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::34f4:cad:16ae:5b4d/64 scope link 
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:54:96 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.146/24 brd 192.168.8.255 scope global dynamic ens34
       valid_lft 84610sec preferred_lft 84610sec
    inet6 fe80::e6e9:552d:5efd:87ac/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 02:42:a8:3c:15:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:a8ff:fe3c:15ee/64 scope link 
       valid_lft forever preferred_lft forever
6: veth1faa93d@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 5e:52:59:44:18:ad brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5c52:59ff:fe44:18ad/64 scope link 
       valid_lft forever preferred_lft forever
8: vethd1ca06a@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 4e:9e:93:a0:11:c4 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::4c9e:93ff:fea0:11c4/64 scope link 
       valid_lft forever preferred_lft forever
#复制一个终端查看宿主机的网络信息
[root@docker ~]# ip a     #可以看到使用host网络的容器,网络信息和宿主机相同
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:30:54:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.202/24 brd 192.168.100.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::34f4:cad:16ae:5b4d/64 scope link 
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:30:54:96 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.146/24 brd 192.168.8.255 scope global dynamic ens34
       valid_lft 84570sec preferred_lft 84570sec
    inet6 fe80::e6e9:552d:5efd:87ac/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:a8:3c:15:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.1/24 brd 192.168.200.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:a8ff:fe3c:15ee/64 scope link 
       valid_lft forever preferred_lft forever
6: veth1faa93d@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 5e:52:59:44:18:ad brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::5c52:59ff:fe44:18ad/64 scope link 
       valid_lft forever preferred_lft forever
8: vethd1ca06a@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 4e:9e:93:a0:11:c4 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::4c9e:93ff:fea0:11c4/64 scope link 
       valid_lft forever preferred_lft forever


五、自定义网络


  • Docker除了提供三种默认的网络模式之外,也允许用户针对一些特殊的应用场景去创建一些自定义的网络模式


  • 使用自定义网络的容器会被单独隔离出来,并且容器之间可以互相通信,而没有使用相同自定义网络的容器是不能直接访问他们的,可以通过添加相同的自定义网络进行通信


  • 一个容器可以属于多个网络,并且同一个自定义网络下的容器可以通过各自的容器名访问到对方,这是因为docker内嵌了一个dns的功能


  • Docker提供的三种自定义网络驱动:


bridge


overlay

macvlan


  • 自定义网络架构图


从下面的图可以看出,想要和不同网络的容器通信,只需要加一个网络即可

50966e7fa9aa497bb9246aadc24896e5.png


(1)自定义bridge网络


******(1)创建自定义网络
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
80abc22e3804        none                null                local
[root@docker ~]# docker network create --driver bridge my   #--driver用来定义使用的网络驱动
f2309a5c3d2093e12a9fd2a294624e5cde022e51350d4ef3e9217a23df05832c
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
f2309a5c3d20        my                  bridge              local
80abc22e3804        none                null                local
[root@docker ~]# ip a   #在删除所有容器后,可以看到宿主机也加了一块网卡
。。。。。。
9: br-f2309a5c3d20: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:c1:cb:32:45 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global br-f2309a5c3d20
       valid_lft forever preferred_lft forever
[root@docker ~]# docker network create --driver bridge my2  #再创建一个网络模式
2e29454a0894ade347dac9f3997e8a3ad0fd644f5abe0408276a102775054a7c
[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
f2309a5c3d20        my                  bridge              local
2e29454a0894        my2                 bridge              local
80abc22e3804        none                null                local
[root@docker ~]# ip a     #可以看到又加了一块网卡
。。。。。。
10: br-2e29454a0894: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:ad:6e:14:0d brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2e29454a0894
       valid_lft forever preferred_lft forever
******(2)使用自定义网络创建容器
#复制两个终端分别开启两个容器
[root@docker ~]# docker run -it --net my --name web httpd:latest /bin/bash
root@05c67e2b1274:/usr/local/apache2# 
[root@docker ~]# docker run -it --net my --name test busybox:latest  #创建使用my自定义网络的容器
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0    #因为my使用的是bridge网络驱动,所以会分配ip
       valid_lft forever preferred_lft forever
#切换终端,查看容器运行状态
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
8e74a880ef0d        busybox:latest      "sh"                About a minute ago   Up About a minute                                   test
05c67e2b1274        httpd:latest        "/bin/bash"         7 seconds ago       Up 6 seconds        80/tcp              web

(2)通过指定子网和网关的方式创建自定义网络

******(1)创建一个新的自定义网络my3
[root@docker ~]# docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my3 
966861dba60a47eb7abb1d6a02e147c15af8af3c9b0b41840c80b1ee9a50c3c3
[root@docker ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
16af5ad6b488        bridge              bridge              local
13dcc19e20b0        host                host                local
f2309a5c3d20        my                  bridge              local
2e29454a0894        my2                 bridge              local
966861dba60a        my3                 bridge              local
80abc22e3804        none                null                local
[root@docker ~]# docker network inspect my3
。。。。。。
            "Config": [
                {
                    "Subnet": "172.22.16.0/24",
                    "Gateway": "172.22.16.1"
                }
            ]
        },
。。。。。。
******(2)创建一个新容器使用自定义网络my3
[root@docker ~]# docker run -it --net my3 busybox:latest
/ # ip a    #查看网络信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:02 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.2/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
#切换另一个终端查看容器的详细信息  
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
6a4487b801c4        busybox:latest      "sh"                About a minute ago   Up About a minute                                   hungry_cerf
8e74a880ef0d        busybox:latest      "sh"                9 minutes ago        Exited (0) About a minute ago                       test
05c67e2b1274        httpd:latest        "/bin/bash"         11 minutes ago       Exited (0) 10 minutes ago                           web
[root@docker ~]# docker inspect 6a4487b801c4 
。。。。。。
             "Gateway": "172.22.16.1",    #可以看到网管和ip都和刚才设定的自定义网络的配置相同
                    "IPAddress": "172.22.16.2",
。。。。。。         
******(3)创建一个容器并且指定其ip
[root@docker ~]# docker rm $(docker ps -aq)
6a4487b801c4
8e74a880ef0d
05c67e2b1274
[root@docker ~]# docker run -it --net my3 --name test --ip=172.22.16.33 busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:21 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.33/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
#切换回另一个终端
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
084db6cf7491        busybox:latest      "sh"                34 seconds ago      Up 33 seconds                           test
[root@docker ~]# docker inspect 084db6cf7491
。。。。。。
                    "Gateway": "172.22.16.1",
                    "IPAddress": "172.22.16.33",
。。。。。。                    

(3)使用自定义网络和其他网络进行通信

******(1)清楚所有容器
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
084db6cf7491        busybox:latest      "sh"                4 minutes ago       Up 4 minutes                            test
[root@docker ~]# docker stop $(docker ps -aq)
084db6cf7491
[root@docker ~]# docker rm $(docker ps -aq)
084db6cf7491
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
******(2)创建三个容器,分别是使用默认网络bridge的容器,使用my自定义网络的容器,还有使用my3自定义网络的容器,最终的目的是实现my自定义网络可以和另外两个容器进行通信,而其他两个容器互相不能通信
#创建使用默认网络bridge的容器
[root@docker ~]# docker run -it --name bridge busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:c0:a8:c8:02 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.2/24 brd 192.168.200.255 scope global eth0
       valid_lft forever preferred_lft forever
#创建使用my自定义网络的容器
[root@docker ~]# docker run -it --net my --name my busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
#创建使用my3自定义网络的容器
[root@docker ~]# docker run -it --net my3 --name my3 busybox:latest
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    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
28: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:16:10:02 brd ff:ff:ff:ff:ff:ff
    inet 172.22.16.2/24 brd 172.22.16.255 scope global eth0
       valid_lft forever preferred_lft forever
******(3)想要让my自定义网络的容器可以与默认网络容器以及my3网络容器通信的话,只需要把my网络容器添加另外两个容器的网卡即可
#先使用my网络容器去ping另外两个容器,发现都无法ping通
/ # ping 192.168.200.2             
PING 192.168.200.2 (192.168.200.2): 56 data bytes
^C
--- 192.168.200.2 ping statistics ---
23 packets transmitted, 0 packets received, 100% packet loss
/ # ping 172.22.16.2
PING 172.22.16.2 (172.22.16.2): 56 data bytes
^C
--- 172.22.16.2 ping statistics ---
8 packets transmitted, 0 packets received, 100% packet loss
#添加网卡
[root@docker ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
08d19eaa9a88        busybox:latest      "sh"                4 minutes ago       Up 4 minutes                            my3
0978d9da8119        busybox:latest      "sh"                5 minutes ago       Up 5 minutes                            my
35718e6eff5f        busybox:latest      "sh"                5 minutes ago       Up 5 minutes                            bridge
[root@docker ~]# docker network connect my3 0978d9da8119   #把my3网卡添加到my容器,后面写容器id
[root@docker ~]# docker network connect bridge 0978d9da8119  #把默认网卡添加到my容器
#重新在my网络的容器中进行ping,发现可以正常通信
/ # ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2): 56 data bytes
64 bytes from 192.168.200.2: seq=0 ttl=64 time=0.132 ms
64 bytes from 192.168.200.2: seq=1 ttl=64 time=0.078 ms
^C
--- 192.168.200.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.078/0.105/0.132 ms
/ # ping 172.22.16.2
PING 172.22.16.2 (172.22.16.2): 56 data bytes
64 bytes from 172.22.16.2: seq=0 ttl=64 time=0.134 ms
64 bytes from 172.22.16.2: seq=1 ttl=64 time=0.044 ms
^C
--- 172.22.16.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.044/0.089/0.134 ms
******(4)如果不想让my网络容器可以与my3网络容器进行通信的话,可以把my网络容器的my3网卡删除
[root@docker ~]# docker network disconnect my3 0978d9da8119
#切换到my网络容器进行ping,发现无法通信了,但是bridge网络容器可以正常通信
/ # ping 172.22.16.2
PING 172.22.16.2 (172.22.16.2): 56 data bytes
^C
--- 172.22.16.2 ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss
/ # ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2): 56 data bytes
64 bytes from 192.168.200.2: seq=0 ttl=64 time=0.114 ms
64 bytes from 192.168.200.2: seq=1 ttl=64 time=0.047 ms
64 bytes from 192.168.200.2: seq=2 ttl=64 time=0.056 ms
^C
--- 192.168.200.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.047/0.072/0.114 ms


目录
相关文章
|
17天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
129 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
29天前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
38 6
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
100 7
|
2月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
46 5
|
3月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
49 5
|
3月前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
51 5
|
3月前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
43 4
|
2月前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
2月前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
2月前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。