美文网首页
Docker网络

Docker网络

作者: jan29 | 来源:发表于2020-08-18 17:23 被阅读0次

以下内容转载于Breeze
原博客地址:https://www.cnblogs.com/breezey/

八、Docker网络

1、简介

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连接在了一个二层网络中。从docker0子网中分配一个ip给容器使用,并设置docker0的ip地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。而这种网络模式即称之为bridge网络模式。

除了bridge模式以外,docker原生网络,还支持另外两种模式: none和host

可以通过如下方法查看docker的网络:

root@k8s-m:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
93392a2471d3        bridge              bridge              local
05c5ebb39921        host                host                local
3cb2552dc6e9        none                null                local

2、bridge网络

2.1、bridge网络基本用法

网络结构示意图:

docker_network_bridge

查看bridge网络信息:

# 通过如下命令会列出bridge网络的相关信息,其中"Containers"字段的表示是信息是指当前节点上有哪些容器使用了该网络
docker network inspect bridge

创建使用bridge网络容器的示例:

docker run -d --name web1 --net bridge nginx

2.2、基于bridge网络的容器访问外部网络

默认情况下,基于bridge网络容器即可访问外部网络,这是因为默认情况下,docker使用了iptables的snat转发来实现容器对外部的访问(需要内核开启net.ipv4.ip_forward=1)

2.3、外部网络访问基于bridge网络的容器

如果想让外界可以访问到基于bridge网络创建的容器提供的服务,则必须要告诉docker要使用的端口。

可以通过如下方法查看镜像会使用哪些端口:

docker inspect nginx | jq .[]."ContainerConfig"."ExposedPorts"

在创建容器的时候可以指定这个容器的端口与主机端口的映射关系:

docker run -d --name web -p 8888:80 nginx
-p: 可以指定主机与容器的端口关系,冒号左边是主机的端口,右边是映射到容器中的端口
-P:该参数会分配镜像中所有的会使用的端口,并映射到主机上的随机端口

这种端口映射基于iptables的dnat实现

查看容器的端口情况:

docker port web

如果创建容器时,-p参数后面只一个指定端口,意思是主机会随机一个端口,映射到容器的该指定端口:

docker run -d --name web -p 80 nginx

下面是一个基于端口映射的示例:

docker run -d --dns 8.8.8.8 -p 8080:80 -p 2022:22 --name webserver1 httpd:2.4

docker run -d --dns 8.8.8.8 -P --name webserver1 httpd:2.4

3、none网络

故名思议,none网络就是什么都没有的网络。使用none网络的容器除了lo,没有其他任何网卡,完全隔离。用于既不需要访问外部服务,也不允许外部服务访问自己的应用场景。

查看none网络信息:

docker network inspect none

创建使用none网络容器的示例:

docker run -d --name web_none --net none nginx

4、host网络

使用host网络的主机,与宿主机共享网络地址,可以获得最好的数据转发性能。缺点是,同一个宿主机上的多个容器共享同一个ip地址,如果多容器使用相同的端口,需要自行解决端口冲突问题。

同样的,可以通过如下方式查看host网络信息:

docker network inspect host

创建一个使用host网络容器的示例:

# 可以看到该容器没有自己的IP地址,因为它直接使用宿主机IP地址
docker run -d --name web_host -net host nginx

5、自定义网络

Docker除了提供三种的默认网络模式之外,也允许用户针对一些特定的应用场景去创建一些自定义的网络。这样属于这个网络的容器就可以单独隔离出来,它们之间可以相互通信,而不在这个网络的容器就不能直接访问到它们。一个容器可以属于多个网络,同一个自定义网络下的容器可以通过各自的容器名访问到对方,因为会使用到docker内嵌的一个dns功能。

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

  • bridge
  • overlay
  • macvlan

6、自定义bridge网络

6.1、创建一个自定义网络

1、创建一个叫作my_net的自定义网络:

docker network create --driver bridge my_net    #--driver用于指定网络类型

可以通过docker network ls 查看到新创建的my_net网络相关信息,Subnet表示这个网络下的子网IP段,那么基于my_net自定义网络创建的容器IP都会以该IP段开头。

2、基于my_net网络创建容器:

docker run -d --name web2 --net my_net nginx

6.2、通过指定子网和网关的方式创建自定义网络

1、通过指定子网和网关的方式创建my_net2网络:

docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2

2、创建一个容器使用my_net2网络:

docker run --it --network=my_net2 busybox

3、创建一个容器的使用my_net2网络的同时指定其ip地址:

docker run --it --network=my_net2 --ip=172.22.16.8 busybox

6.3、使用自定义网络与默认网络互通

假设我们在默认的bridge网络中,还有一个httpd的容器:

docker run -d --name webserver httpd:2.4

此时默认网络中的容器与my_net2网络中的容器是无法互相通信的。宿主机上网络结构如下:


docker_network_custom_bridge

如果想让默认bridge网络的httpd与my_net2中的容器通信,可以给httpd容器添加一块自定义网络的网卡,使用如下指令:

docker network connect my_net2 webserver

如果要将webserver新添加的这块网卡移除,可以使用如下命令:

docker network disconnect bridge webserver

7、自定义custom网络

7.1、创建一个自定义网络:

docker network create --driver bridge custom    #--driver用于指定网络类型

可以通过docker network ls 查看到新创建的custom网络相关信息,Subnet表示这个网络下的子网IP段,那么基于custom自定义网络创建的容器IP都会以该IP段开头。

7.2、基于custom网络创建容器:

docker run -d --name web2 --net custom nginx

如果想将已经创建的容器放到自定义网络中,使用如下指令:

docker network connect custom web

7.3、将web从bridge网络中移除:

docker network disconnect bridge web

8、同一台宿主机容器互联

同一台宿主机上的容器互联有两种方式,第一种是基于ip,默认情况下,同一个宿主机上的容器ip是互通的。另一种方式是使用--link实现:

docker run -d --name db1 -e "MYSQL_ROOT_PASSWORD=123456" -P mysql:5.6

docker run -d --link db1:db1 --name webserver1 httpd:2.4

相关文章

网友评论

      本文标题:Docker网络

      本文链接:https://www.haomeiwen.com/subject/vwigdktx.html