docker 网络

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容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 9,001评论 1 5
  • 【编者的话】当你在一台主机上成功运行Docker容器后,信心满满地打算将其扩展到多台主机时,却发现前面的尝试只相当...
    SDNLAB阅读 4,693评论 0 6
  • 基于对network namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,容...
    逑熙阅读 8,819评论 0 4
  • 转自:http://ju.outofmemory.cn/entry/255894 概述自从docker容器出现以来...
    dleyanlin阅读 5,355评论 0 7
  • 陆筝陆筝,哀其不幸,怒其不争。 花市到清迈泰到体育场外walk and walk, talk and talk 五...
    洛阳女儿名莫愁阅读 2,523评论 0 0