docker 网络

Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看: ![image.png](http://upload-images.jianshu.io/upload_images/6415440-ea337f8afc206f7a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ####none 网络 什么都没有的网络,没有任何网卡。作用用于隔离一些安全要求高,但是不需要联网的应用 ####host网络 连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。可以通过 --network=host 指定使用 host 网络。 ####brideg网络 Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0 上。 通过 docker network inspect bridge 查看 bridge 网络的配置信息: ![image.png](http://upload-images.jianshu.io/upload_images/6415440-352c8836d36506d1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) bridge 网络配置的 subnet 就是 172.18.0.0/16,并且网关是 172.18.0.1。这个网关就是 docker0 ![image.png](http://upload-images.jianshu.io/upload_images/6415440-9fda315d8b70db3f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](http://upload-images.jianshu.io/upload_images/6415440-7ecf41eb106f61b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ####自定义网络 我们可通过 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](http://upload-images.jianshu.io/upload_images/6415440-3fd6b4ad359d2715.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](http://upload-images.jianshu.io/upload_images/6415440-f68f7903803a77a5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 容器要使用新的网络,需要在启动时通过 --network 指定,--ip可配置静态ip ######注:只有使用 --subnet 创建的网络才能指定静态 IP。 ``` docker run -it --network=my_net --ip 172.22.15.22 busybox ``` ![image.png](http://upload-images.jianshu.io/upload_images/6415440-c52e0fe073f8f62e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ####容器间的连通性 同一网络中的容器,网关之间都是可以通的 ![image.png](http://upload-images.jianshu.io/upload_images/6415440-49ec784d82a69e6b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 不同网桥间通信可以为 容器添加一块 net_my的网卡。这个可以通过docker network connect 命令实现。 ![image.png](http://upload-images.jianshu.io/upload_images/6415440-fc33a40e66f10ae0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ####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](http://upload-images.jianshu.io/upload_images/6415440-4304d7b90709e4c7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](http://upload-images.jianshu.io/upload_images/6415440-f989c82724266a10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ######注:只能在自定义网络中使用 ####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](http://upload-images.jianshu.io/upload_images/6415440-46a945f8e1233f14.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 两容器共享网络栈 joined适用于 1.不同容器中的程序希望通过 loopback 高效快速地通信,比如 web server 与 app server。 2.希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序。 ####外网 docker容器默认可以访问外网,只要通过nat,外网可以利用端口映射访问内部容器

你可能感兴趣的:(docker 网络)