本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Docker默认使用bridge(单主机互联)和overlay(可跨主机互联)两种网络驱动来进行容器的网络管理,用户还可以自定义网络驱动插件进行Docker容器的网络管理。
Docker默认网络管理
查看Docker现有网络
docker network ls
- bridge: 默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现互联网通信
- host、null: 无网络,容器添加到这两个网络时不能与外界网络通信
创建并启动容器
docker run -itd --name networktest ubuntu
查看网络详情
docker network inspect bridge
需要注意的是:bridge、host、none 这三种网络是在非集群环境下Docker提供的默认网络,在Docker Swarm集群环境下,除了这三种网络,Docker还提供了 docker_gwbridge 和 ingress 两种默认网络。
自定义网络
在Docker中,可以自定义bridg、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器网络的完全定制和控制。
Bridge networks(桥接网络)
为了保证容器的安全性,可以基于bridge的驱动创建新的bridge网络,可以较好的实现容器隔离。但这种自定义的bridge网络只适用于单主机的小型网络环境管理
创建自定义网络
在Docker主机上可以使用 docker network create 命令创建网络:
docker network create --driver bridge isolated_nw
- --driver: 可简写为-d。用于指定网络驱动类型
- isolated_nw: 新创建的网络名称
使用自定义网络启动容器
docker run -itd --network isolated_nw --name nwteat ubuntu
通过如下命令查看启动后的容器网络详情:
docker inspect nwteat
可以看到,新启动的容器使用的网络是自定义的网络isolated_nw。
为容器添加网络管理
名为nwteat的容器只有自定义的isolated_nw一种网络管理,我们可以为该容器添加其他网络管理方式:
docker network connect bridge nwteat
断开容器网络连接
可以为容器连接网络,也可以断开网络:
docker network disconnect isolated_nw nwteat
移除自定义网络
docker network rm isolated_nw
Overlay network in swarm mode(Swarm集群中的覆盖网络)
在Swarm集群环境下可以创建基于overlay驱动的自定义网络。为了保证安全性,Swarm集群使自定义的overlay网络只适用于需要服务的群集中的节点,而不会对外部其他服务或者Docker主机开放。
Custom network plugins(定制网络插件)
如果前两种自定义网络无法满足需求,可以使用Docker提供的插件来自定义网络驱动插件。自定义网络插件会在Docker进程所在主机上作为另一个进程运行。
容器之间的网络通信
创建容器
创建两个使用默认的bridge网络的容器:
docker run -itd --name test1 ubuntu
docker run -itd --name test2 ubuntu
创建一个使用自定义的test-net网络(预先创建)的容器:
docker run -itd --name test --network test-net ubuntu
为test2容器添加一个自定义的test-net网络连接:
docker network connect test-net test2
上述操作完成后,test1和test2使用默认的bridge网络管理进行通信,test2和test3使用自定义的test-net网络管理进行通信,而test1和test3之间不可通信。
容器地址查看
查看容器的地址可以进入容器内部使用ifconfig命令查看,也可以使用以下命令查看指定容器的网络信息:
docker inspect test
容器连通性
不同容器想要相互通信必须在同一个网络环境下
使用默认bridge网络管理的容器可以使用容器IP进行通信,但无法使用容器名进行通信
使用自定义网络管理的容器既可以使用容器IP通信也可以使用容器名称通信