Docker 五大网络模式

Docker 支持四种网络模式

  • bridge
    -net=bridge
    默认网络,Docker启动后创建一个Linux的 docker0网桥,默认创建的容器也是添加到这个网桥中

  • host
    -net=host
    容器不会获得一个独立的 network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离。

  • none
    -net=none
    获取独立的 network namespace,但不为容器进行任何网络配置,需要我们手动配置。

  • container
    -net=container:Name/ID
    与指定的容器使用同一个 network namespace,具有同样的网络配置信息,两个容器除了网络,其他还是隔离的。

  • 自定义网络
    与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名 或者 主机名容器之间网络通信。

bridge

ifconfig 查看一下

[root@izbp1izjo7pl5ccghnbdiuz ~]# ifconfig

---------------------------------------------------------------------------------
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500							|
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255			|
        ether 02:42:c4:5e:de:d7  txqueuelen 0  (Ethernet)                       |
        RX packets 24772  bytes 1477246 (1.4 MiB)                               |
        RX errors 0  dropped 0  overruns 0  frame 0                             |
        TX packets 25231  bytes 59046133 (56.3 MiB)                             |
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0              |
---------------------------------------------------------------------------------

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.57.19  netmask 255.255.240.0  broadcast 172.16.63.255
        ether 00:16:3e:0b:5c:f3  txqueuelen 1000  (Ethernet)
        RX packets 23061639  bytes 4276931592 (3.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23616033  bytes 4702130747 (4.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2262  bytes 287264 (280.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2262  bytes 287264 (280.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

框中内的 就是 docker启动之后的网桥了。这个 inet 172.17.0.1 就是docker容器的网关,默认的方法 bridge创建的方法都会添加到这个网桥内。

我们进入到容器内进行查看

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker run -it busybox

/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # 

inet addr:172.17.0.3 就是来自 bridge分配的内网IP

–net=host

这个时候我们将 启动命令改成

docker run -it --net=host bushbox

这个就是直接的使用宿主机的网络命名空间,比如启动的是 nginx,那么我的80端口就会被占用

netstat -antp |grep 80

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp		0		1 47.96.158.77:50582		121.29.54.199:80		LAST_ACK		-

–net=none

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker run -it --net=none busybox
/ # 
/ # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

我们可以看到,网络的确是 有的,但就是没配置。

自己设置需要

ip ns 这个命令

–net=container

我们现在要做 的是创建,busybox容器。将他 和nginx容器共享网络空间,访问 busybox映射的地址 而 展示nginx

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker run -itd --name bs -p 99:80 busybox
b2b0e28f01965cdbbb076df69f21f50de1453c73998356c8e43a42e615231154

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker run -d --name nginx01 --net container:bs nginx
248c51c68628b6da03b197d017dad0166a17d7ebecde9e94392c2dd965afd8d1
[root@izbp1izjo7pl5ccghnbdiuz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
248c51c68628        nginx               "nginx -g 'daemon of…"   37 seconds ago      Up 37 seconds                            nginx01
b2b0e28f0196        busybox             "sh"                     9 minutes ago       Up 9 minutes        0.0.0.0:99->80/tcp   bs

都在启动了 ok

在这里插入图片描述
此时的 99,就已经代表了 nginx的 80了。

进入 busybox 查看网络情况

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker exec -it bs sh
/ # 
/ # netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -
tcp        0      0 172.17.0.2:80           111.25.21.16:12958      TIME_WAIT   -
/ # 

自定义网络

docker run -it --name bs1 busybox

docker run -it --name bs2 busybox
# bs1

/ # hostname
71ae5b49348b
/ #
/ # ping bs2
ping: bad address 'bs2'
# bs2

/ # hostname
07e42ab41b5d
/ # 
/ # ping bs1
ping: bad address 'bs1'

可以看到两个独立的容器之间是不会进行网络共享的。默认的 bridge

# 创建一个自己的网络

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker network create bs-test
642af1c223ad2a6a21b6c9bf80ce5f8da238b822bbd4b6144389bad2684cc748
# bs3

[root@izbp1izjo7pl5ccghnbdiuz ~]# docker run -it --name bs3 --net bs-test busybox
/ # 
/ # ping bs2
ping: bad address 'bs2'
/ # 
/ # ping bs4
PING bs4 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.090 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.116 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.110 ms
# bs4 

ping: bad address 'bs1'
/ # [root@izbp1izjo7pl5ccghnbdiuz ~]# docker run -it --name bs4 --net bs-test busybox
/ # 
/ # ping bs3
PING bs3 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.091 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.099 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.147 ms
发布了102 篇原创文章 · 获赞 229 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_44685869/article/details/105158124