美文网首页
docker 网络

docker 网络

作者: e02f7fdbb400 | 来源:发表于2017-12-18 12:42 被阅读25次

Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看:


image.png

none 网络

什么都没有的网络,没有任何网卡。作用用于隔离一些安全要求高,但是不需要联网的应用

host网络

连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。可以通过 --network=host 指定使用 host 网络。

brideg网络

Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0 上。
通过 docker network inspect bridge 查看 bridge 网络的配置信息:


image.png

bridge 网络配置的 subnet 就是 172.18.0.0/16,并且网关是 172.18.0.1。这个网关就是 docker0


image.png
image.png

自定义网络

我们可通过 bridge 驱动创建类似前面默认的 bridge 网络

docker network create --driver bridge my_net     #创建
docker network inspect my_net 查看my_net 的配置信息

创建网段时指定 --subnet 和 --gateway 参数可自定义网段

 docker network create --driver bridge --subnet 172.22.15.0/24 --gateway 172.22.15.1 my_net
image.png
image.png

容器要使用新的网络,需要在启动时通过 --network 指定,--ip可配置静态ip

注:只有使用 --subnet 创建的网络才能指定静态 IP。
docker run -it --network=my_net  --ip 172.22.15.22  busybox
image.png

容器间的连通性

同一网络中的容器,网关之间都是可以通的


image.png

不同网桥间通信可以为 容器添加一块 net_my的网卡。这个可以通过docker network connect 命令实现。


image.png

Docker DNS Server

docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过“容器名”通信,启动时用 --name 为容器命名。
下面启动两个容器 bbox1 和 bbox2:

docker run -it --network=my_net --name=bbox1 busybox
docker run -it --network=my_net --name=bbox2 busybox

然后,bbox2 就可以直接 ping 到 bbox1 了:


image.png
image.png
注:只能在自定义网络中使用

joined 容器

joined 容器是另一种实现容器间通信的方式。
joined 容器非常特别,它可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined 容器之间可以通过 127.0.0.1 直接通信。
先创建一个 httpd 容器,名字为 web1。

docker run -d -it --name=web1 httpd

然后创建 busybox 容器并通过 --network=container:web1 指定 jointed 容器为 web1:

docker run -it --network=container:web1 busybox
image.png

两容器共享网络栈
joined适用于
1.不同容器中的程序希望通过 loopback 高效快速地通信,比如 web server 与 app server。
2.希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序。

外网

docker容器默认可以访问外网,只要通过nat,外网可以利用端口映射访问内部容器

相关文章

网友评论

      本文标题: docker 网络

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