文章目录

  • 1 虚拟化网络
  • 2 单节点容器间通信
  • 3 不同节点容器间通信
  • 4 Docker容器网络
  • 5 Docker的四种网络模式
    • 5.1 host模式
    • 5.2 container模式
    • 5.3 none模式
    • 5.4 bridge模式

1 虚拟化网络

  • Linux内核支持六种名称空间,只要在用户空间有相应的客户端工具,都可以对对应的名称空间进行操作。

    • 主机名和域名的叫:UTS
    • 用户的叫:USER
    • 挂载文件系统的:Mount
    • 进程间通信的:IPC
    • 进程ID的:Pid
    • 网络的:Net
  • 网络作为docker容器化实现的6个名称空间的其中之一,是必不可少的。其在Linux内核2.6时已经被加载进内核支持了。

  • 网络名称空间主要用于实现网络设备和协议栈的隔离

  • Linux内核支持二层和三层设备的模拟,宿主机的docker0就是用软件来实现的具有交换功能的虚拟二层设备,docker中的网卡设备是成对出现的,好比网线的两头,一头处于docker中,另外一头在docker0桥上,这个使用brctl工具就能实现。

  • 如上图所示,假如我们的物理机有4块物理网卡,我们要创建4个名称空间,而这些设备是可以单独关联至某个单独的名称空间使用的,把第一块网卡分配给第一个名称空间,第二块分给第二个名称空间,第三块分给第三个名称空间,第四块分给第四个名称空间。此时其它名称空间都是看不见当前所在名称空间的,因为一个设备只能属于一个名称空间。

  • 这种方式使得每一个名称空间都能配置IP地址,并且与外部网络直接通信,因为它们使用的是物理网卡。

  • 但如果我们所拥有的名称空间数量超过物理网卡数量呢?此时我们可以使用虚拟网卡设备,用纯软件的方式来模拟一组设备来使用。Linux内核级支持2种级别设备的模拟,一种是二层设备,一种是三层设备。

二层设备(链路层)

  • 链路层,实现报文转发的设备。利用内核对二层设备的模拟,创建虚拟网卡接口,这种网络接口是成对出现的,模拟为一根网线的两头。其中一头插在主机上,另一头插在交换机上。

  • 内核原生支持二层虚拟网桥设备,用软件来构建交换机。比如bridge-utils工具的brctl来实现。

  • 利用软件交换机和软件实现的名称空间,如此就可模拟一个主机连接到交换机中,以实现网络连接的功能。两个名称空间相当于连接到同一台交换机中的两台主机。

三层设备(软件交换机)

  • OVS:Open VSwitch 开源的虚拟交换机,能模拟实现高级的三层网络设备如VLAN,VxLAN,GRE等等,它不属于Linux内核本身的模块,因此需要额外安装。它是由思科等众多网络设备生产公司开发的,其功能非常强大。

  • SDN:软件定义网络/软件驱动网络,需要在硬件层面上支持虚拟化网络,还需要在每个主机上构建复杂的虚拟化网络,来运行多个虚拟机或者容器。

Linux内核原生支持二层虚拟网桥设备,即用软件虚拟交换机的功能。如下图所示

  • 那么此时如果再有一个名称空间,它有创建了一对虚拟网卡,一端连接名称空间,一端连接虚拟交换机,此时就相当于两个名称空间连接到了同一个交换机网络中,此时如果两个名称空间的网卡地址配置在同一网段,那么很显然他们之间是可以互相通信的。如下图所示:

    从网络通信的物理设备到网卡都是用纯软件的方式来实现,这种实现方式就叫做虚拟化网络

2 单节点容器间通信

如果在同一个host上的两个namespace需要通信,可以在host上建立虚拟交换机,使用纯软件的方式建立一对网卡,一半在容器上,一半在交换机上。此时只要容器配置同子网的IP地址,即可通信。

这就是单节点上两个容器间的通信方式。单节点上两个容器之间的通信也有一些复杂情况,比如我们期望构建的容器要跨交换机通信呢

我们做两个虚拟交换机,两个交换机上各自连接不同的容器,如上图所示,此时如果要C1和C3通信又该如何实现呢?其实我们可以通过名称空间创建一对网卡,一端连SW1,另一端连SW2,这样一来两个交换机就连起来了,照理说这样一来C1和C3这两个处于不同交换机的容器就可以实现通信了,但是这样一来又存在另一个问题,那就是如果C1和C3在不同网络呢?如果不在同一网络我们就必须要通过路由转发才能使其通信,也就是我们得在两台交换机之间加一个路由器,其实Linux内核本身就是支持路由转发的,只需要我们将路由转发功能打开即可。此时我们可以再启动一个容器,这个容器里面就跑一个内核,并将其转发功能打开,这样一来就模拟了一台路由器,通过这台路由器来实现路由转发。

3 不同节点容器间通信


如上图所示,此时如果C1要与C5进行通信又该如何实现呢?如果我们采用桥接的方式,很容易产生广播风暴,因此,在大规模的虚拟机或容器的场景中,使用桥接的方式无疑是自取灭亡,所以我们不应该使用桥接的方式来实现通信。

如此一来,我们既不能桥接,又需要与外部来实现通信就需要使用以下几种方法

  • NAT

    如果希望对外通信,则应该使用nat技术而不是桥接。

    如果C3和C5通信,C3将网关指向了S1,物理机上打开核心转发功能。报文:C3 -> S1 ->(路由表,转发) -> 外部网络。但是报文无法回来,因为C3是私有地址。因此,在C3的报文离开主机前,将IP转换为S1主机上的IP地址,这就是源地址转换。

    如此C5可直接回复给S1。而S1内部的nat表可知道,该报文实际上是属于C3的,因此会自动转发给C3。

    上述通信必须经过nat实现,而且两级的nat代理。因为C5可能也是nat内部。因此S1并看不到C5,除非将C5 DNAT发布出去。

    因此,比如将C5发布到S2的地址和端口,由S2自动将其请求转换到C5中。

    经过SNAT和DNAT转换,效率不高。而且通信的双方并看不到真正的对方。其好处是,网络易于管理。

  • 叠加网络Overlay Network

    这种网络方式不用完全暴露主机,也不用完全隐藏主机。其方式如下

    • 多个host,创建虚拟桥,让VM连接到虚拟桥上。
    • 在虚拟桥上创建隧道,让C3直接看到C5
    • 物理机可直接通信,C3和C5在同一个地址段内。C3先将报文送给桥,而桥知道C5并不在本地,于是将报文通过物理网卡发出去:在使用隧道转发出去前,报文C3|C5再封装一层IP首部:H1|H2
    • H2拆开第一层封装,看到C3|C5,于是将报文转发给C5.

上述实现两级的三层封装,使用一个IP承载另一个IP,这就是隧道技术。如此C3和C5就可以直接通信


Overlay Network会将报文进行隧道转发,也就是在报文发出去之前要为其添加一个IP首部,也就是上图的1.1和1.2这部分,这里的1.1是源,1.2是目标,当宿主机2收到报文后解封装发现要找的目标容器是C2,于是把包转发给C2。

4 Docker容器网络

Docker在安装后自动提供3种网络,可以使用docker network ls命令查看

[root@Docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
ee8d79d4ac78   bridge    bridge    local
f07e7613bacb   host      host      local
d951c3cc12d5   none      null      local

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

5 Docker的四种网络模式

网络模式 配置 说明
host –network host 容器和宿主机共享Network namespace
container –network container:NAME_OR_ID 容器和另外一个容器共享Network namespace
none –network none 容器有独立的Network namespace, 但并没有对其进行任何网络设置, 如分配veth pair 和网桥连接,配置IP等
bridge –network bridge 默认模式

Docker创建容器时,使用选项–network来指定使用哪种网络模型。默认default为bridge (docker0)

  • Closed container:只有loop接口,就是none类型

  • Bridged container A:bridge网络类型,容器网络接入到docker0网络上

  • joined container A:container网络类型,让两个容器有一部分名称空间隔离(User、Mount、Pid),这样两个容器间就拥有同一个网络接口,网络协议栈

  • Open container:开放式网络:直接共享物理机的三个名称空间(UTS、IPC、Net),世界使用物理主机的网卡通信,赋予容器管理物理主机网络的特权,也就是host网络类型

5.1 host模式

  • Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

    • 这种模式下的容器没有隔离的 network namespace
    • 容器的 IP 地址同 Docker host 的 IP 地址
    • 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
    • host 模式能够和其它模式共存
  • 使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好
//示例
[root@Docker ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
zhaojie10/nginx   v1.20.2   6f5b02e61ad4   18 hours ago   549MB
centos            latest    5d0da3dc9764   2 months ago   231MB
[root@Docker ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:1b:44:be brd ff:ff:ff:ff:ff:ffinet 192.168.25.148/24 brd 192.168.25.255 scope global dynamic noprefixroute ens33valid_lft 1163sec preferred_lft 1163secinet6 fe80::2e0f:34ad:7328:bbf9/64 scope link noprefixroute 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:30:6d:78:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever[root@Docker ~]# docker run -it --network host --rm --name nginx 6f5b02e61ad4 /bin/sh
sh-4.4# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:1b:44:be brd ff:ff:ff:ff:ff:ffinet 192.168.25.148/24 brd 192.168.25.255 scope global dynamic noprefixroute ens33valid_lft 1796sec preferred_lft 1796secinet6 fe80::2e0f:34ad:7328:bbf9/64 scope link noprefixroute 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:30:6d:78:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft forever

5.2 container模式

  • 这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
  • Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

//示例
[root@Docker ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
zhaojie10/nginx   v1.20.2   6f5b02e61ad4   18 hours ago   549MB
centos            latest    5d0da3dc9764   2 months ago   231MB[root@Docker ~]# docker run -it --rm --name nginx 6f5b02e61ad4 /bin/sh
sh-4.4# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
4: eth0@if5: <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 link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever[root@Docker ~]# docker ps        #重新打开一个新的终端
CONTAINER ID   IMAGE          COMMAND     CREATED          STATUS          PORTS     NAMES
d964b9adf5fe   6f5b02e61ad4   "/bin/sh"   39 seconds ago   Up 37 seconds             nginx[root@Docker ~]# docker run -it --rm --name centos --network  container:d964b9adf5fe 5d0da3dc9764        #创建新容器指定网络使用container模式[root@d964b9adf5fe /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
4: eth0@if5: <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 link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

5.3 none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过–network none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

应用场景:

  • 启动一个容器处理数据,比如转换数据格式
  • 一些后台的计算和处理任务
//示例
[root@Docker ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
zhaojie10/nginx   v1.20.2   6f5b02e61ad4   19 hours ago   549MB
centos            latest    5d0da3dc9764   2 months ago   231MB[root@Docker ~]# docker run -it --rm --name nginx --network none 6f5b02e61ad4 /bin/bash
[root@2c3fe7cd5a0b /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever

5.4 bridge模式

  • bridge模式是docker的默认网络模式,不写–network参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

  • 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

  • 从Docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

bridge模式如下图所示

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

//示例
[root@Docker ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
zhaojie10/nginx   v1.20.2   6f5b02e61ad4   19 hours ago   549MB
centos            latest    5d0da3dc9764   2 months ago   231MB[root@Docker ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:1b:44:be brd ff:ff:ff:ff:ff:ffinet 192.168.25.148/24 brd 192.168.25.255 scope global dynamic noprefixroute ens33valid_lft 1309sec preferred_lft 1309secinet6 fe80::2e0f:34ad:7328:bbf9/64 scope link noprefixroute 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:30:6d:78:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:30ff:fe6d:7803/64 scope link valid_lft forever preferred_lft forever[root@Docker ~]# docker run -it --rm --name nginx  6f5b02e61ad4 /bin/bash        #我这里是没有指定网络类型默认就是使用的bridge模式
[root@a65e5aa2362c /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
6: eth0@if7: <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 link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever[root@Docker ~]# docker run -it --rm --name centos -p 8080:80 5d0da3dc9764
[root@2ddc151d2030 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever[root@Docker ~]# ss -antl
State   Recv-Q  Send-Q     Local Address:Port     Peer Address:Port  Process
LISTEN  0       128              0.0.0.0:8080          0.0.0.0:*
LISTEN  0       128              0.0.0.0:22            0.0.0.0:*
LISTEN  0       128                 [::]:8080             [::]:*
LISTEN  0       128                 [::]:22               [::]:*      [root@Docker ~]# iptables -t nat -vnL
......
Chain DOCKER (2 references)pkts bytes target     prot opt in     out     source               destination         0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.3:80[root@Docker ~]# docker network inspect bridge        #查看bridge网络的详细配置
[{"Name": "bridge","Id": "ee8d79d4ac782949ebfcd7c19baa710bcfa7587c662a82b97a772463b5ba3590","Created": "2021-12-03T04:03:23.448080844-05:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "172.17.0.0/16","Gateway": "172.17.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"2ddc151d20308ee1a6f41ea2811e18708503596924db8c5185bd3f6f020b8afe": {"Name": "centos","EndpointID": "0f82b0f327236a5f4a763de8c653a0b6bb971d0b0deb12f67e9b24261d78c07e","MacAddress": "02:42:ac:11:00:03","IPv4Address": "172.17.0.3/16","IPv6Address": ""},"a65e5aa2362cb6cf2b22d1fd756855832057b27061a0a3f769cfd5903d8dd506": {"Name": "nginx","EndpointID": "7899c74a02bfc07866268ea3b4a49d2d7984b3eff1e9f62c1ac1c0303de71c87","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.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@Docker ~]# yum -y install epel-release
[root@Docker ~]# yum install bridge-utils
[root@Docker ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.0242306d7803   no      veth3c0bcb5veth5a42188

Docker容器的虚拟化网络相关推荐

  1. 快速理解Docker - 容器级虚拟化解决方案

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 是什么 简单的说Docker是 ...

  2. ***快速理解Docker - 容器级虚拟化解决方案

    原文链接:http://blog.csdn.net/colorant/article/details/20608157 云计算(cloudcomputing)是基于互联网的相关服务的增加.使用和交付模 ...

  3. 转载: 快速理解Docker - 容器级虚拟化解决方案

    转载自: http://blog.csdn.net/colorant/article/details/20608157 是什么 简单的说Docker是一个构建在LXC之上的,基于进程容器(Proces ...

  4. Docker容器与虚拟化技术——部署KVM虚拟化平台

    部署KVM虚拟化平台 一.搭建KVM虚拟化平台 1.前置知识点 (1)什么是虚拟化         把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机 ...

  5. Docker容器网络解析

    Docker 容器网络的发展历史 在 Dokcer 发布之初,Docker 是将网络.管理.安全等集成在一起的,其中网络模块可以为容器提供桥接网络.主机网络等简单的网络功能. 从 1.7 版本开始,D ...

  6. docker容器网络及其配置

    docker容器网络及其配置 文章目录 docker容器网络及其配置 虚拟化网络 单主机与多主机的Docker网络 单节点容器间通信 不同节点容器间通信 Docker网络驱动 选择Docker网络驱动 ...

  7. Docker容器之网络详解

    目录 前言 一.网络模式 1.Bridge模式 2.Container模式 3.Host模式 4.None模式 5.overlay模式 二.自定义网络 三.暴露端口 四.Docker 数据卷和数据卷容 ...

  8. docker的容器管理和网络模式

    文章目录 一: Docker 容器操作 1.1 容器创建 1.2 查看容器运行状态 1.3 启动容器 1.4 创建并启动容器 1.5 终止容器运行 1.6 容器的进入 1.6.1 使用 docker ...

  9. Docker容器之网络模式

    目录 一.Docker网络实现原理 二.Docker的网络模式 1.Host模式 2.Container模式 3.None模式 4.bridge模式 三.自定义网络 1.查看网络模式列表 2.查看容器 ...

最新文章

  1. Oracle 冷备份
  2. 北大图灵班本科生带来动画CG福音,「最懂骨骼的卷积网络」,无需配对样本实现动作迁移 | SIGGRAPH...
  3. haproxy中acl的与或非三种規則写法
  4. linux端口对外开放
  5. yum 不小心删除后安装
  6. 博图v15.1 安装步骤
  7. NUC1196 Sum【水题+数学题】
  8. 后疫情时代,人工智能发展的四大趋势
  9. PHP判断浏览器类型和语言
  10. 孪生网络图像相似度_文本蕴含之孪生网络(Siamese Network)
  11. springboot宿舍管理系统
  12. 一、VMware及win10虚拟机的安装及环境配置
  13. EXCEL/WPS中的数组公式{},在钉钉用什么进行替代
  14. 年龄和收入对数的线性回归_金融计算收益率的时候为什么大部分用对数收益率 (Log Return) 而不是用算数收益率?...
  15. excel 2010 删除重复行(按某一列重复)
  16. linux源码分析之cpu初始化 kernel/head.s,linux源码分析之cpu初始化
  17. 启发式算法的基础定义与了解
  18. 穿山甲的广告聚合平台-GroMore
  19. JavaScript 进制之间的转换、大数或小数精度丢失、js不同进制的表示(分享)
  20. 将文件从本机上传到虚拟机中Linux系统中的几种方法

热门文章

  1. 程序员在囧途之招聘历险记
  2. VSCode python 路径设置为 anaconda 路径
  3. Git切换远程分支,以及后续的pull和push操作
  4. 微信jsapi 调用分享接口(完整版)
  5. mysql查看版本命令linux
  6. 数据库系统的结构与组成
  7. 开源 API 管理工具 v 1.6.0 发布:切换 tab 不再担心数据丢失
  8. C/C++——制作音乐播放器项目
  9. 高德地图:在地图中以点击的位置生成一个marker
  10. 两步路加载自定义图源谷歌等协议解析