玩转Docker-------第四部------------(原生网络&自定义网络、容器通信)

Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问 前言 自定义网络 建议使用自定义的网桥来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络。你还可以创建一个网络插件或远程网络进行完整的自定义和控制。 你可以根据需要创建任意数量的网络,并且可以在任何给定时间将容器连接到这些网络中的零个或多个网络。此外,您可以... 阅读详情

玩转Docker-------第四部------------(原生网络&自定义网络、容器通信)

1.Docker原生网络

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 和host。

docker network ls

在这里插入图片描述

docker网络模式功能
Host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
Container(Joined)创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
None该模式关闭了容器的网络功能。
Bridge此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
运行容器的时候指定网络模式:

模式					参数
host模式				使用 --net=host(–network host) 指定。
none模式				使用 --net=none 指定。
bridge模式				使用 --net=bridge 指定,默认设置。
container模式			使用 --net=container:NAME_or_ID 指定。

bridge网桥模式

bridge模式是Docker默认的网络设置,当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥。
在这里插入图片描述
docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口

[root@server1 ~]# docker run -d --name nginx nginx
998e60bd9dcd844c256d2889dfbc31e5cb7b7a34cfbd9298340b57d65142ac9c
[root@server1 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02422aa432f0	no		veth3c75f87

在这里插入图片描述
可以发现,当挂起一个容器时,就会出现相对应的网桥接口:

docker inspect nginx

在这里插入图片描述
这时,我们的容器就通过docker0网桥与宿主机建立通信了:

ping 172.17.0.3
curl 172.17.0.3

在这里插入图片描述

桥接模式下容器没有公共 ip,只有宿主机可以访问,外部主机不可见,容器要访问外网必须通过宿主机的 NAT 规则,所以我们如果要想通过访问本机的80端口去访问容器,就需要做端口映射,将容器的80映射到server1主机上的80端口才行。而且桥接模式下容器是没有对外的ip的,在企业中我们的server1主机ip应该是能进入到公网的IP,所以我们打开ip_forward的功能,让容器可以通过server1访问到外网。

不仅如此,只要宿主机做了NAT,我们同时在容器中做好dns解析,就能与外网通信

在这里插入图片描述
这样在容器开启的时候,就会生成网络对,相当于一根网线,连接容器与docker0,docker0在通过内核路由功能转发到我们的真实网卡上面,然后在出去,访问到公网。

host模式

host模式下容器会和宿主机共享网络。

相当于使用了Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。

一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

做此过程之前删除上一步骤中运行的所有容器

netstat -antlp	#先查看宿主机的端口情况
docker run -d --name nginx  --network host nginx
netstat -antlp	#再次查看宿主机的端口情况(80端口打开了)
brctl show

在这里插入图片描述
在这里插入图片描述
我们可以看到它并不像bridge模式那样,没有在docker0下桥接接口,而是与宿主机共用一个网络

用外部主机访问,可以看到nginx默认发布页面

curl 192.168.43.71

在这里插入图片描述

docker run -it --rm --network host busybox
ip addr

在这里插入图片描述
可以看到与宿主机的网络一模一样

这时候,如果此时我们再开一个nginx:

docker run -d --name nginx2  --network host nginx
docker ps	#开启成功
docker ps	#其中一个nginx消失
docker ps -a	#可以看到被停掉的nginx

在这里插入图片描述
在这里插入图片描述
这是因为两个nginx的端口和ip冲突了

none模式

none模式是指禁用网络功能,只有lo接口,在容器创建时使用–network none

none模式关闭了容器的网络功能,但是在以下两种情况下是有用的:

  1. 容器并不需要网络(例如只需要写磁盘卷的批处理任务)。
  2. overlay:在docker1.7代码进行了重构,单独把网络部分独立出来编写,所以在docker1.8新加入的一个overlay网络模式。
docker run -it --rm --network none busybox
ip addr

在这里插入图片描述

可以看到只有lo接口

在这里插入图片描述
查看到网络是不可以使用的

2.Docker自定义网络

原生网络是docker安装后自动创建的,真正需要配置的是自定义网络。

Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。

bridge驱动类似默认的bridge网络模式,但增加了一些新的功能
overlay 和 macvlan 用于创建跨主机的网络

bridge网络驱动

[root@server1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f905d0cfd038        bridge              bridge              local
5dc66fa4665c        host                host                local
304f37a81f85        none                null                local
[root@server1 ~]# docker network create -d bridge my_net1     # 创建自定义桥接
c73546940ab666d4c641eed79df76d8963f133a578b570209f1a6e922ce90efe
[root@server1 ~]# docker network ls       #可以看出我们的自定义网络加进去了
NETWORK ID          NAME                DRIVER              SCOPE
f905d0cfd038        bridge              bridge              local
5dc66fa4665c        host                host                local
c73546940ab6        my_net1             bridge              local
304f37a81f85        none                null                local

[root@server1 ~]# docker run -it --name vm1 --network my_net1 ubuntu  # 用自定义网络运行
root@9616cfb055e9:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
## 发现网段变成了172.18网段了,说明自定义网络的时候网段是递增的,和开启容器时ip递增一样

## 我们还可以自定义网关和网段:
[root@server1 ~]# docker network create -d bridge --subnet 172.22.0.0/24 --gateway 172.22.0.1 my_net2
f5f5655d83dbd39958379c8c90d75025748a18787eb5de120f64224e83eee3d3
[root@server1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f905d0cfd038        bridge              bridge              local
5dc66fa4665c        host                host                local
c73546940ab6        my_net1             bridge              local
f5f5655d83db        my_net2             bridge              local
304f37a81f85        none                null                local
[root@server1 ~]# docker run -it --name vm2 --network my_net2 ubuntu
root@2da970629875:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:16:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.2/24 brd 172.22.0.255 scope global eth0  #确实变成了172.22网段
       valid_lft forever preferred_lft forever


##自定义IP
[root@server1 ~]# docker run -it --name vm3 --network my_net2  --ip 172.22.0.100 ubuntu
root@71d882cabbc7:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:16:00:64 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.100/24 brd 172.22.0.255 scope global eth0
       valid_lft forever preferred_lft forever
root@71d882cabbc7:/# ping 172.22.0.2     #可以ping同刚才那个VM2容器,因为桥接在同一网络上
PING 172.22.0.2 (172.22.0.2) 56(84) bytes of data.
64 bytes from 172.22.0.2: icmp_seq=1 ttl=64 time=0.207 ms
64 bytes from 172.22.0.2: icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from 172.22.0.2: icmp_seq=3 ttl=64 time=0.158 ms
^C
--- 172.22.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.086/0.150/0.207/0.050 ms


[root@server1 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br-c73546940ab6		8000.02421577f327	no		veth734b2f2  #my_net1只桥接了一个网卡
br-f5f5655d83db		8000.024214c10f10	no		vethee1d0ed
							vethfdca8a6                      # my_net2桥接了两个
docker0		8000.02422aa432f0	no		
# 桥接在不同网桥上的容器,彼此之间不能通信#

[root@server1 ~]# iptables -S
-A DOCKER-ISOLATION-STAGE-2 -o br-f5f5655d83db -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-c73546940ab6 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
可以看到三个网桥对互相之间的数据都是DROP
都是互相丢弃的所以不同网桥之间是无法通信的。

那我们如何让不同网桥之间进行通信呢?

[root@server1 ~]# docker network connect my_net2 vm1
[root@server1 ~]# docker attach vm1
root@9616cfb055e9:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
16: eth1@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:16:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.3/24 brd 172.22.0.255 scope global eth1      # 多了172.22的网卡
       valid_lft forever preferred_lft forever
root@9616cfb055e9:/# ping vm1
PING vm1 (172.18.0.2) 56(84) bytes of data.
64 bytes from 9616cfb055e9 (172.18.0.2): icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 9616cfb055e9 (172.18.0.2): icmp_seq=2 ttl=64 time=0.033 ms
64 bytes from 9616cfb055e9 (172.18.0.2): icmp_seq=3 ttl=64 time=0.032 ms
^C
--- vm1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.028/0.031/0.033/0.002 ms
root@9616cfb055e9:/# ping vm2
PING vm2 (172.22.0.2) 56(84) bytes of data.
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=2 ttl=64 time=0.050 ms
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=3 ttl=64 time=0.048 ms
^C64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=4 ttl=64 time=0.048 ms
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=5 ttl=64 time=0.050 ms
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=6 ttl=64 time=0.140 ms
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=7 ttl=64 time=0.066 ms
^C64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=8 ttl=64 time=0.051 ms
64 bytes from vm2.my_net2 (172.22.0.2): icmp_seq=9 ttl=64 time=0.049 ms
^C
--- vm2 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8001ms
rtt min/avg/max/mdev = 0.048/0.063/0.140/0.028 ms
root@9616cfb055e9:/# ping vm3
PING vm3 (172.22.0.100) 56(84) bytes of data.
64 bytes from vm3.my_net2 (172.22.0.100): icmp_seq=1 ttl=64 time=0.057 ms
^C
--- vm3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.057/0.057/0.057/0.000 ms
#我们发现可以ping通#

root@9616cfb055e9:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.18.0.2	9616cfb055e9
172.22.0.3	9616cfb055e9   #这就是dns的自动解析,它自带dns解析

这里我们先介绍bridge,overlay 和macvlan在我们学习了容器之间的通信之后在进行学习

3.Docker容器间通信

通过上面的实验我们可以知道,使用同一自定义网络(即同一网段)运行的容器是可以相互通信的,那么如果两个容器不在同一网段,但我们也想让它通信,怎么办?

方法1:使用内嵌的 DNS server 通过容器名去自动解析容器的IP地址

[root@server1 ~]# docker run -it --name vm1 --network my_net1 ubuntu
root@21692ff10442:/# [root@server1 ~]# docker run -it --name vm2 --network my_net1 ubuntu
root@c9c781f485c2:/# ping vm1
PING vm1 (172.18.0.2) 56(84) bytes of data.
64 bytes from vm1.my_net1 (172.18.0.2): icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from vm1.my_net1 (172.18.0.2): icmp_seq=2 ttl=64 time=0.051 ms
^C
--- vm1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.051/0.056/0.061/0.005 ms
root@c9c781f485c2:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
  我们可以看到这里多出了一个网卡eth0@if21,ip为172.18.0.3

方法2:joined(类似于默认的 host 模式,容器之间共享网络)

container模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

[root@server1 ~]# docker run -it --name vm1  ubuntu
root@9ff4ffcba7c0:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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> mtu 1500 qdisc noqueue state UP group default 
    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
root@9ff4ffcba7c0:/# [root@server1 ~]# docker run -it --name vm2  --network container:vm1 ubuntu
root@9ff4ffcba7c0:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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> mtu 1500 qdisc noqueue state UP group default 
    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

可以发现,和vm1网络完全一致,使用相同的网络name space:

这样做的用处在于,两个容器之间可以使用 localhost(回环接口)进行快速通信,适用于 web 服务器和应用服务器。

方法3:使用–link连接容器

[root@server1 ~]# docker run -d nginx     #不加--name时系统会自动分配一个容器名
105b5c0c65f16c22681f6f193411ba459b12af7a225021cb8f23282cba5d818d
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
105b5c0c65f1        nginx               "nginx -g 'daemon of…"   15 seconds ago      Up 14 seconds       80/tcp              lucid_aryabhata
[root@server1 ~]# docker run -it --name vm1 --link lucid_aryabhata:web ubuntu
###使用--link连接这个容器,并为它起个别名web,因为系统给的太难记了###
root@6c5b91bc7b5b:/# ping web
PING web (172.17.0.2) 56(84) bytes of data.
64 bytes from web (172.17.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from web (172.17.0.2): icmp_seq=2 ttl=64 time=0.106 ms
^C     #发现是可以通信的,这是因为我们的容器做了两件事
--- web ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.070/0.088/0.106/0.018 ms
root@6c5b91bc7b5b:/# cat /etc/hosts    # 第一,写了解析
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	web 105b5c0c65f1 lucid_aryabhata
172.17.0.3	6c5b91bc7b5b
root@6c5b91bc7b5b:/# env   # 第二设置了环境变量
...    
WEB_NAME=/vm1/web
WEB_PORT_80_TCP_PROTO=tcp
WEB_PORT_80_TCP_ADDR=172.17.0.2
...



[root@server1 ~]# docker stop lucid_aryabhata    #关闭刚开始的nginx容器
lucid_aryabhata
[root@server1 ~]# docker run -d nginx            #重新开一个
db52f4e7087049f0c0fba22cc2d9b909eb52a70cb266fb6940308f72a668fdf2
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
db52f4e70870        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes        80/tcp              happy_ptolemy
[root@server1 ~]# docker inspect happy_ptolemy
 "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",  #它的ip地址也是172.17.0.2
                    "IPPrefixLen": 16,

[root@server1 ~]# docker start lucid_aryabhata    #再打开刚才第一个nginx容器
lucid_aryabhata
[root@server1 ~]# docker inspect lucid_aryabhata 
 "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",      # 它的ip地址变成了0.3了
          #####说明容器关闭后其获得的ip地址会被释放#####


[root@server1 ~]# docker start lucid_aryabhata 
lucid_aryabhata
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
db52f4e70870        nginx               "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes       80/tcp              happy_ptolemy
105b5c0c65f1        nginx               "nginx -g 'daemon of…"   29 minutes ago      Up 8 seconds        80/tcp              lucid_aryabhata
[root@server1 ~]# docker start vm1 
vm1
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
db52f4e70870        nginx               "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes       80/tcp              happy_ptolemy
6c5b91bc7b5b        ubuntu              "/bin/bash"              29 minutes ago      Up 5 seconds                            vm1
105b5c0c65f1        nginx               "nginx -g 'daemon of…"   30 minutes ago      Up 25 seconds       80/tcp              lucid_aryabhata
[root@server1 ~]# docker attach vm1 
root@6c5b91bc7b5b:/# 
root@6c5b91bc7b5b:/# 
root@6c5b91bc7b5b:/# 
root@6c5b91bc7b5b:/# cat /etc/hosts 
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.3	web 105b5c0c65f1 lucid_aryabhata     #VM1上的本地解析也变了
172.17.0.4	6c5b91bc7b5b

4.容器是如何访问外网的?

容器与外网通信是通过iptables的SNAT实现的:

容器访问外网是通过 iptables 的 SNAT 实现的,容器和 docker0 是桥接的方式,docker0 是
容器的网关,到达 docker0 后,通过 linux 内核的路由功能(ip_forward),然后防火墙会做
伪装,也就是 SNAT,然后通过物理网卡接口到外网。

[root@server1 ~]# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.22.0.0/24 ! -o br-f5f5655d83db -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-c73546940ab6 -j MASQUERADE   #为容器的ip做了地址伪装
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i br-f5f5655d83db -j RETURN
-A DOCKER -i br-c73546940ab6 -j RETURN
-A DOCKER -i docker0 -j RETURN

在物理机开启ip_forward让server1可以上网

[root@server0 ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0

# 测试:
[root@server1 ~]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=51 time=61.6 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=51 time=47.0 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 47.045/54.362/61.679/7.317 ms

#然后我们在进入ubuntu容器测试:
[root@server1 ~]# docker start vm1
vm1
[root@server1 ~]# docker attach vm1 
root@6c5b91bc7b5b:/# 
root@6c5b91bc7b5b:/# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79: icmp_seq=1 ttl=47 time=58.3 ms
64 bytes from 39.156.69.79: icmp_seq=2 ttl=47 time=48.7 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 48.767/53.583/58.399/4.816 ms
root@6c5b91bc7b5b:/# 
# 这样容器就也可以上网了。

5.外网是如何访问容器的?

[root@server1 ~]# docker run -d --name vm1 -p 80:80 nginx  做端口映射(冒号后的是容器内部的端口)
d995bd5ba8fe0008c288081d958fcb0bab05c9532232dc6c1986c7be2e3eee85
[root@server1 ~]# docker port vm1     ##查看容器端口映射情况
80/tcp -> 0.0.0.0:80
[root@server1 ~]# iptables -t nat -S     ##查看防火墙策略
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80

访问流程:
外部主机访问时--> 访问到宿主机的 eth0(192.168.43.71:80)--> 然后火墙做了DNAT转换 --> 访问172.17.0.2(容器地
址)

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

在这里插入图片描述
docker-proxy 打开了80端口,我们每打开一个容器,都会开启一个docker-proxy 进程

在这里插入图片描述

注意:

宿主机访问本机容器使用 iptables 的 DNAT,外部主机访问容器或者容器之间访问是
docker-proxy 实现的。

流程:

外部主机 --> 宿主机 eth0 --> docker-proxy(外部访问容器时通过 docker-proxy 处理数据
包,不是防火墙) --> docker0(172.17.0.1) --> 容器

6.Docker跨主机的容器网络

docker跨主机的网络方式:

docker原生的overlay和macvlan
第三方的flannel、weave、calico

CNM(container network model)模型

三类组件作用
Sandbox容器网络栈(namespace
Endpoint将sandbox接入network(veth)
Network包含一组endpoint,同一network的endpoint可以通信

使用macvlan实现Docker容器跨主机网络

macvlan特点:

  1. 使用linux内核提供的一种网卡虚拟化技术
  2. 性能好:因为无需使用桥接,直接使用宿主机物理网口。

清理掉之前的容器,删除自定义网络:

[root@server1 ~]# docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
my_net1
my_net2

[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
baa31764f59f        nginx               "nginx -g 'daemon of…"   8 minutes ago       Up 8 minutes        0.0.0.0:8080->80/tcp   vm2
d995bd5ba8fe        nginx               "nginx -g 'daemon of…"   19 minutes ago      Up 19 minutes       0.0.0.0:80->80/tcp     vm1
[root@server1 ~]# docker rm -f vm1
vm1
[root@server1 ~]# docker rm -f vm2
vm2
[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

给两台主机都添加上一块新的虚拟网卡。
在这里插入图片描述

[root@server1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:a5:b1:7f brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.71/24 brd 192.168.43.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 240e:bf:d429:dd57:20c:29ff:fea5:b17f/64 scope global mngtmpaddr dynamic 
       valid_lft 2237sec preferred_lft 2237sec
    inet6 2409:8a70:f8a1:ae10:20c:29ff:fea5:b17f/64 scope global mngtmpaddr dynamic 
       valid_lft 259144sec preferred_lft 172744sec
    inet6 fe80::20c:29ff:fea5:b17f/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:2a:a4:32:f0 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:2aff:fea4:32f0/64 scope link 
       valid_lft forever preferred_lft forever
44: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:0c:29:a5:b1:89 brd ff:ff:ff:ff:ff:ff

添加之后,我们可以看到现在有ens0和eth1这两块网卡

激活这两块网卡,并开启混杂模式:

server1:
[root@server1 ~]# ip link set up eth1
[root@server1 ~]# ip link set eth1 promisc on

server2:
[root@server2 ~]# ip link set up eth1
[root@server2 ~]# ip link set eth1 promisc on
[root@server2 ~]# ip a
能看到PROMISC 就会说明开启了
4: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> 

在这里插入图片描述

server1和server2上创建macvlan 网络模型:

[root@server1 ~]# docker network create -d macvlan --subnet 172.20.0.0/24 --gateway 172.20.0.1 -o parent=eth0 macvlan1
90bee86d976bb3293faf2531d7c71e82666f540cafed47ec6d3f756480cbb1fc

[root@server2 ~]# docker network create -d macvlan --subnet 172.20.0.0/24 --gateway 172.20.0.1 -o parent=eth0 macvlan1
499d58aa9c967b3559302a57a664d1abde6c0afef74d12c7cc70a8f9eba3b0ee

在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# docker run -it --name vm1 --network macvlan1 --ip 172.20.0.11 ubuntu
[root@server2 ~]# docker run -it --name vm2 --network macvlan1 --ip 172.20.0.12 ubuntu
#运行容器,macvlan 模型这里必须手动指定 ip 地址,如果不指定会自动分配,单调递增,两台主机可能会冲突。

在server1上:
root@1046c09fdcab:/# ping 172.20.0.12
PING 172.20.0.12 (172.20.0.12) 56(84) bytes of data.
64 bytes from 172.20.0.12: icmp_seq=1 ttl=64 time=0.956 ms
64 bytes from 172.20.0.12: icmp_seq=2 ttl=64 time=0.548 ms

在server2上:
root@e22da2aae025:/# ping 172.20.0.11
PING 172.20.0.11 (172.20.0.11) 56(84) bytes of data.
64 bytes from 172.20.0.11: icmp_seq=1 ttl=64 time=0.458 ms
64 bytes from 172.20.0.11: icmp_seq=2 ttl=64 time=0.558 ms


#########两台主机就可以互相通信了##########


[root@server1 rpms]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02422aa432f0	no	

[root@server2 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242c65fa427	no	

并且两台主机的网络都没有桥接到docker0上。而是直接占用了物理网卡。无需 NAT 或端口映射

但是,我们发现这样就出现了一个问题,我们每次创建一个网络就需要一块新的网卡,这样显然是不现实的。

解决方法:

macvlan会独占网卡,但是可以使用vlan的子接口实现多macvlan网络,最多可以将物理二层网络划分成4094各逻辑网络,且彼此隔离。

所以:macvlan网络在物理网络二层是隔离的,无法直接通信,但是可以在三层上(即容器内部)通过网关将macvlan网络连通起来。

使用 vlan 子接口实现多 macvlan 网络

vlan 可以将物理二层网络划分为 4094 个逻辑网络,彼此隔离,取值为 1~4094,这样就极大的提升了网卡的复用性

[root@server1 rpms]# docker network create -d macvlan --subnet 172.21.0.0/24 --gateway 172.21.0.1 -o parent=eth0.1 macvlan2
b908e524d6ae3471366ef0351b7fcfb6d8213fcbd1258d065e6bb7324329a541
[root@server1 rpms]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f905d0cfd038        bridge              bridge              local
5dc66fa4665c        host                host                local
90bee86d976b        macvlan1            macvlan             local
b908e524d6ae        macvlan2            macvlan             local
304f37a81f85        none                null                local


[root@server2 ~]# docker network create -d macvlan --subnet 172.21.0.0/24 --gateway 172.21.0.1 -o parent=eth0.1 macvlan2
6731f6bfad762ebe68028166a566a59102d6a4a34017c00408fa4aa5a0a7da70
[root@server2 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
353e8449c00f        bridge              bridge              local
0c145a0ac5db        host                host                local
499d58aa9c96        macvlan1            macvlan             local
6731f6bfad76        macvlan2            macvlan             local
7369a58f2403        none                null                local

server1和server2:
6: eth0.1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:0c:29:05:08:07 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:fe05:807/64 scope link 
       valid_lft forever preferred_lft forever

[root@server1 ~]# docker run -it --name vm3 --network macvlan2 --ip 172.21.0.11 ubuntu
[root@server2 ~]# docker run -it --name vm4 --network macvlan2 --ip 172.21.0.12 ubuntu

在这里插入图片描述
在这里插入图片描述
同一个macvlan的容器才可以互相通信

注意:macvlan 网络在二层是隔离的,所以不同 macvlan 容器不能通信,可以在三层通过网关连接(加路由),docker 本身不做任何限制,像传统 vlan 那样管理即可。网络选型时如果对网络比较熟悉,选 macvlan较好,因为只需要把网络设备调整好,docker 方面基本不用做什么调整。

docker 同宿主机不同网络容器通信+跨宿主机容器之间网络互连详解 覆盖网络(Overlay Network)优点:内置支持,易于使用,支持多主机通信和服务发现。缺点:需要 Docker Swarm 模式。第三方网络插件(如 Weave Net)优点:提供更高级的网络功能,适用于复杂网络需求。缺点:需要额外安装和配置。使用桥接网络(变通方法)优点:不需要额外的网络插件,适用于简单的跨宿主机通信。缺点:配置复杂,需要手动设置路由和 IP 转还有种docker compose 需要借助 docker swarm 就不介绍了。 阅读详情

相关推荐

Docker --docker网络知识详解(原生网络、自定义网络、容器通信、跨主机容器网络)

1、Docker的原生网络 docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。 docker安装后会自动创建3种网络:bridge、host、none

ly660402的博客 1247

Docker学习之路(三)Docker网络详解

1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定。 container模式,使用--net=container:NAME_or_ID指定。 none模式,使用--net=none指定。 bridge模式,使用--net=...

1693

Docker容器通信

桥接口 Docker容器通信 容器之间除了使用ip通信外,还可以使用容器名称通信。 docker 1.10开始,内嵌了一个DNS server. dns解析功能必须在自定义网络中使用。 启动容器时使用 --name 参数指定容器名称。 默认的桥接中不带解析。 server1 docker run -d --name vm1 --network my_net1 nginx #-d 打入后台 docker run -it --name vm2 --network my_net1 ubuntu ping vm1

weixin_46754666的博客 2965

docker之网络配置

docker之网络配置

weixin_67677668的博客 9280

Docker网络——原生网络介绍、自定义网络创建、实现容器间通信、容器与外网通信、跨主机网络访问

1.什么是Docker网络?     Docker早期版本中的网络基于主机桥接,但是Docker 1.0包含了一种新形式的网络,允许容器直接连接到主机以太网接口。默认情况下,一个容器有一个回路以及一个连接到默认内部桥接的接口,但是如果需要的话也可以配制成直接访问。通常,直接访问比桥接的速度更快。   然而,桥接方法在许多情况下是非常有用的。桥接是通过主机自动创建一个内部网络适配器并为其分配一个主机本身尚未使用的子网。然后,当新的容器连接到这座桥,它们的地址进行自动分配。容器启动时你可以将其连接到主机接口或端

weixin_45792518的博客 973

【云原生】第七篇--Docker容器网络与通信原理深度解析

自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信。而本文将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker。...

检哥说IT的博客 1978

Docker—— --net=host参数改变容器网络模式

--net=host: (1).加了--net=host以后就不需要再做端口映射了.比如docker容器内在8080端口起了一个web server.不加的话需要把本机的某个port比如7979和docker内的8080做一个映射关系,访问的时候访问7979. 加了net=host则直接访问8080. 另外,加了net=host后会使得创建的容器进入命令行好名称显示为主机的名称而不是一串id.  root@box:/# (2).容器中的app1无法访问到宿主机的app2,因为两者不在一个网络内。最简

Ti__iT的博客 2万+

SE (3) -Transformers:三维旋转 - 平移等变注意力网络

E (3) 变换器,这是一种用于三维点云和图的自注意力模块变体,在连续三维旋转平移下具有等变性。注意力机制的计算量会随着点云规模的增大呈二次方增长,因此引入邻域的概念是很有必要的:每个点不再关注所有其他点,而只关注其最近的邻点。注意力机制此前已在图的领域中以内部注意力、自注意力、顶点注意力或图注意力等名称被引入 [17, 31, 32, 12, 26]。等变性意味着当输入数据发生旋转或平移时,模型的输出也会以相应的、可预测的方式进行变换,从而保证模型性能的稳定性和可预测性。

qq_49786473的博客 1480

docker容器使用--net=host获取容器IP,报错VM-XX:Name or Service not known

目录标题1. 背景和问题背景问题问题查找 1. 背景和问题 背景 项目使用了Nacos微服务架构,由于项目运行需要启动注册中心、网关、认证中心、分布式事务中心等多个微服务,非常占用物理机内存和CPU,所以部署了一个开发服务器,把这些服务运行在服务器上,我只需要运行自己正在开发的的服务模块就可以,这样开发用的物理机一下就释放了很多内存,开发起来更顺畅。 问题 但是问题来了,docker容器自动分配的ip为172.17.0.0/24网段的ip,开发用的物理机和这个容器不在一个网段,根本没法访问到,这时候网上查到

小兀的博客 6288

Mac新手必看:用Homebrew安装wget的保姆级教程,附常见报错一键修复

本文为Mac新手提供使用Homebrew安装wget的详细教程,涵盖从Homebrew安装到wget基础使用的全流程,并附常见报错一键修复方案。通过本指南,用户可轻松掌握命令行下载工具wget的安装与使用技巧,解决Mac环境下资源下载的各种问题。

weixin_30635053的博客 367

YOLOv8【第一章:基础入门篇·第2节】一文搞定,数据集制作与标注完全指南!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 1506

5、网络配置

目标 1、Docker网络配置 2、Docker部署SpringCloud项目 Docker网络配置 Docker网络模式介绍 Docker在创建容器时有四种网络模式:bridge/host/container/none,bridge为默认不需要用–net去指定,其他三种模式需要在创建容器时使用–net去指定 1.bridge模式(默认模式) docker run时使用–net=bridge,这种...

weixin_45180919的博客 402

【AI产品与商业航图】Flux.1 完全开源 AI 绘图模型:本地部署与 ComfyUI 实战指南

Flux.1是一个开源项目,用户可以自由使用和修改,完全免除使用费用。🖥️本地部署支持:与一些依赖云端计算的工具不同,Flux.1支持本地部署,确保用户可以离线使用并自主控制数据隐私。🔄兼容ComfyUI框架:Flux.1可以无缝集成到ComfyUI中,用户可以享受更加简便和直观的操作界面。🎨卓越的图像生成能力:Flux.1能够生成高质量、细腻的图像,支持多种风格与创作主题的切换。💾低硬件要求。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1737

Docker 4 (网络模式:Docker原生网络、自定义网络、容器通信、跨主机容器网络)

目录一、Docker原生网络1.桥接网络2.host网络3.none模式二、Docker自定义网络2.创建自定义网桥3.双网卡实现不同网段间通信三、Docker容器通信1.内部访问外部2.外部访问内部四、跨主机容器网络1.跨主机同网段容器通信2.跨主机不同网段容器通信 一、Docker原生网络 docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。docker安装后会自动创建3种网络:bridge、host、none; 首先将前面的harbor仓库停掉 docker安装时会创建一个名为 doc

qq_38664479的博客 2215

结构优化软件:OptiStruct_(11).拓扑优化

在OptiStruct中,设计空间可以通过定义设计区域来实现。设计区域是结构中可以进行材料变化的部分。几何区域:通过几何选择工具选择特定的区域。网格区域:通过网格选择工具选择特定的单元。假设我们有一个简单的梁结构模型,网格文件为beam.fem。我们希望在梁的中部进行拓扑优化,以减轻重量并保持刚度。

kkchenjj的博客 1367

在 RAP 里把编号这件事做得既优雅又合规:Early Numbering 与 Late Numbering 的落地指南

本文探讨了 SAP RAP 框架中的三种主键编号策略及其适用场景。文章首先指出传统 ABAP 应用中主键处理的局限性,详细分析了早期编号(外部/内部)和延迟编号的差异,强调延迟编号在避免业务断号方面的优势。通过 Partner 业务对象案例,文章演示了延迟编号的实现方法,包括行为定义配置、保存类实现和编号分配逻辑。同时指出测试中常见的校验陷阱,并提醒生产环境应避免简单的 MAX+1 方案,建议采用原子取号机制确保并发安全。全文从业务合规性和技术实现两个维度,为 RAP 应用的编号策略选择提供了实用指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1843

Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络

Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络

weixin_44891093的博客 1721

【图像超分】论文复现:CVPR 2024 | 轻量化超分 | 窗口注意力改进 | CAMixerSR的Pytorch源码复现,跑通源码,获得指标和超分结果,计算复杂度,架构梳理拆解,逐行注释!

本文介绍了超分辨率重建方法CAMixerSR的代码实现与运行指南。文章亮点包括:完整跑通源码获取PSNR/SSIM指标和可视化结果;详细解析模型架构与关键代码注释,帮助快速复现基线模型。实验部分提供了测试配置文件和训练设置说明,支持2K/4K/8K大图像超分和x2/x4轻量化超分。环境依赖PyTorch和BasicSR框架,数据集包含DIV2K等常用基准。测试结果与论文指标一致,可视化输出保存至指定目录。训练配置可自定义数据集路径、GPU数量等参数。该实现突出了CAMixerSR在降低W-MSA复杂度方面的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 438

Docker网络配置与自定义IP容器通信

互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于 IP地址的寻址操作。

让优秀成为一种习惯! 3044

[系统安全] 十六.PE文件逆向基础知识(PE解析和PE编辑工具)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~ 作者前面介绍了三个漏洞,包括Chrome浏览器保留密码渗透解析、通过Chrome浏

杨秀璋的专栏 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Docker 网络模型深度解析:原生模式、自定义网络与容器通信

Docker 网络是容器化应用的核心基础设施,它实现了容器与容器、容器与宿主机、容器与外部网络的互联互通。理解 Docker 网络模型,是构建复杂分布式容器应用的前提。本文将从 Docker 原生网络模式、自定义网络创建与接入、容器间通信与 DNS 解析 三个维度,全面拆解 Docker 网络的工作原理与实战操作。

YongCheng_Liang的博客 1528

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

docker网络(原生网络、自定义网络、容器间通信、外网访问容器、跨主机容器网络)

1.docker原生网络 #docker在安装好时会有3种网络模型:bridge(默认),host,none [root@server1~]#dockernetworkls NETWORKID NAME DRIVER SCOPE ea925c5af3d3 bridge bridge local be91de06ba4f host host local ed22b5d774a7 none null local #docker在安装好后会自动新建一个docker0的接口,所有的容器都会自动桥接到docker0

Aimee_c的博客 3214

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Docker 高级网络 - 自定义网桥实现容器间通信

docker netword create -d 网桥类型(不指定,默认是 bridge) 网络名称例如创建一个类型为 bridge,名称为 mynet1 的网络.

CYK_byte的博客 2937

Docker-学习总结(原生网络、自定义网络、同一主机不同容器通信、跨主机不同容器通信)

文章目录概念原生网络自定义网络容器通信访问外网跨主机容器网络模型macvlan 概念 网络对 网络栈 docker - porxy 端口映射自动创建docker-proxy 网卡混杂模式 promisc 原生网络 bridge host容器和物理机网络共享 none 自定义网络 bridge-DNS 容器名 与 IP地址解析(单机) overlay(集群) macvlan(集群) 自定义 –sub...

csdnlb的博客 935

Docker容器网络与通信

Overlay 网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在 Overlay 技术中采用扩展的隔离标识位数,能够突破 VLAN 的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。因此,Overlay 网络实际上是目前最主流的容器跨节点数据传输和路由方案。

m0_62943934的博客 1502

Docker篇之docker容器之间的通信

自从Docker容器工具诞生以来,当我们在正式线上环境进行容器部署以及容器管理任务时,通常容器之间是需要进行数据通信的,来支撑正常业务运转。因此容器间的通信也随之成为热点,也是生产环境中的重中之重。 容器间的网络通信可分为两大方面:单主机容器上的相互通信,跨主机的容器相互通信。 一、Docker单主机容器通信 1、假设通过容器ip访问 【不可行】 由于docker容器每次在重启后,其IP会发生变化。因此通过容器ip访问不可行。 2、假设通过宿主机的ip:port访问 【不可行】 通过宿主机的ip:port

小橙子的笔记屋 7403
上一篇: 玩转Docker----- 第三部-----------docker公有、私有仓库的搭建
下一篇: 玩转Docker-------第五部-----------数据卷管理&convoy卷插件
xrt0211
博客等级 码龄7年 270粉丝 115原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值