15: docker networking
来源:互联网 发布:mac手写输入如何选字 编辑:程序博客网 时间:2024/06/05 08:00
在Docker 1.9之后,Docker正式宣布可以将Networking应用于生产环境中,并且可以与Swarm以及Compose进行较好的结合。与传统的Links相比,Networking具有以下优势:
允许不同物理主机或者虚拟主机上的容器进行通信
使用了Networking的容器可以很方便地进行停止、启动或者重启等操作而不用担心会影响到与其他容器之间的连接
并不需要在连接到某个容器之前就直接创建它,换言之,Networking不再像原本的Links一样会依赖某个容器而存在
Single Host Networking
可以直接使用docker network
命令来使用Networking,其中可以使用docker network create
来创建一个新的网络,在这个示例中,我们会创建一个叫做frontend
的网络并且在其中运行一个nginx容器:
$ docker network create frontend$ docker run -itd --net=frontend --name web nginx
我们使用网络来分割应用,乃至于分割应用中的不同模块。在本例子中,我们可以创建另一个包含了应用程序的网络app
,然后将这个网络与frontend
网络相连,命令如下所示:
$ docker network create app$ docker run -itd --name myapp --net=app <my application container>$ docker network connect app web
这样我们的Nginx服务器就可以使用myapp.app
这个主机名来连接到应用程序中。我们创建两个基于busybox的容器来进行尝试:
$ docker run -d --name rose --net=frontend busybox topc1fa2dc7fa3a412b52b53f5facd25ba11e99c362d77be8cea4ff49f3d5e2cafc$ docker run --rm --net=frontend busybox ping -c 4 rosePING rose (172.19.0.2): 56 data bytes64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.122 ms64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.078 ms64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.098 ms64 bytes from 172.19.0.2: seq=3 ttl=64 time=0.241 ms
我们已将第二个容器附着到frontend
网路中,并且用ping
命令来进行内建的容器发现,我们可以用inspect
命令来查看网络的详情:
$ docker network inspect frontend[ { "Name": "frontend", "Id": "a639a457122020faa69a4ab906bc33217c9c6d73048f3dbbb69e53dbe5e0952c", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "c1fa2dc7fa3a412b52b53f5facd25ba11e99c362d77be8cea4ff49f3d5e2cafc": { "EndpointID": "976bab21d4a11cd21d5d1c1560f67f39ef15245662aeacf097eb1d5c148ed748", "MacAddress": "02:42:ac:13:00:02", "IPv4Address": "172.19.0.2/16", "IPv6Address": "" } }, "Options": {} }]
在前端网络之外,我们也可以创建一个自定义的后端网络,用于连接其他容器:
$ docker network create backend09733cac7890edca439cdc3d476b4cd1959e44065217aa581d359575b8d2288f$ docker network connect backend rose$ docker network inspect backend { "name": "backend", "id": "09733cac7890edca439cdc3d476b4cd1959e44065217aa581d359575b8d2288f", "scope": "local", "driver": "bridge", "ipam": { "driver": "default", "config": [ {} ] }, "containers": { "c1fa2dc7fa3a412b52b53f5facd25ba11e99c362d77be8cea4ff49f3d5e2cafc": { "endpoint": "438730c588915dd54dc694efdb3a15c77bc5e86c744f5f87a65f6ac46b43e5ad", "mac_address": "02:42:ac:14:00:02", "ipv4_address": "172.20.0.2/16", "ipv6_address": "" } }, "options": {} }]
再看一下容器中具体的网络的设置:
$ docker inspect -f '{{ json .NetworkSettings }}' rose{ "Bridge": "", "SandboxID": "b600bebe1e2bb6dee92335e6acfe49215c30c4964d7a982711ec12c6acca3309", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/b600bebe1e2b", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "MacAddress": "", "Networks": { "backend": { "EndpointID": "438730c588915dd54dc694efdb3a15c77bc5e86c744f5f87a65f6ac46b43e5ad", "Gateway": "172.20.0.1", "IPAddress": "172.20.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:14:00:02" }, "frontend": { "EndpointID": "976bab21d4a11cd21d5d1c1560f67f39ef15245662aeacf097eb1d5c148ed748", "Gateway": "172.19.0.1", "IPAddress": "172.19.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:13:00:02" } }}
而在容器中使用ifconfig
命令查看时:
$ docker exec rose ifconifgeth0 Link encap:Ethernet HWaddr 02:42:AC:13:00:02 inet addr:172.19.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:27 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2238 (2.1 KiB) TX bytes:1208 (1.1 KiB)eth1 Link encap:Ethernet HWaddr 02:42:AC:14:00:02 inet addr:172.20.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1296 (1.2 KiB) TX bytes:648 (648.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
而如果要将某个容器从网络中断开时,可以使用如下命令:
$ docker network disconnect backend rose
这种网络配置方式的初衷即将服务独立出来成为一个网络中不同的容器之间相互交流的唯一信息。换言之,在实践中,需要构建出大量的小型网络,每个网络中只负责某个服务的通信,并且不同的网络之间应该是相互隔离的。一个典型的例子就是负载均衡器、前端、后端以及一个数据库。
Network Customization
在创建网络的时候我们也可以设置很多的自定义的配置:
--aux-address=map[] auxiliary ipv4 or ipv6 addresses used by Network driver -d, --driver="bridge" Driver to manage the Network --gateway=[] ipv4 or ipv6 Gateway for the master subnet --help=false Print usage --ip-range=[] allocate container ip from a sub-range --ipam-driver=default IP Address Management Driver -o, --opt=map[] set driver specific options --subnet=[] subnet in CIDR format that represents a network segment
我们首先来看下--driver
选项,该选项可以来选定具体的网络驱动方式来管理网络,目前Docker提供了如下两种驱动器:
bridge -- This driver provides the same sort of networking via veth bridge devices that prior versions of docker use, it is the default.
overlay -- Not to be confused with the "overlay" storage driver (thanks overlayfs), this driver provides native multi-host networking for docker clusters. When using swarm, this is the default driver.
另一个常用的选项是--ipam-driver
,用来确定IP地址是如何分配的。目前Docker仅内置了一种IP地址分配方案,未来会添加上DHCP IAMP方式。
- 15: docker networking
- Android--(15),networking
- Networking
- Networking
- Networking
- Networking
- Networking
- Networking
- Networking
- Docker Networking Rules: EXPOSE, -p, -P, –link
- Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
- centos 7 Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work
- docker启动WARNING: IPv4 forwarding is disabled. Networking will not work.
- Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
- Docker之WARNING: IPv4 forwarding is disabled. Networking will not work.
- Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
- 2017-02-15 Head First Networking 目录
- Multimedia Networking
- 海量数据问题
- 基于opencv的鱼眼矫正法-棋盘标定
- unicode,ansi,utf-8,unicode big endian编码的区别
- 在线看Android系统源码,那些相见恨晚的几种方案
- java web 项目 无法找到com.mysql.jdbc.Driver的解决方案
- 15: docker networking
- [USACO 2009 Feb] 股票市场
- 淘宝红包专区在哪?淘宝qq群红包天猫优惠券怎么领取平台地址
- su和sudo的区别与使用
- CentOS搭建DNS服务器(三)
- 求质数:筛选法(埃拉托色尼筛法)
- ZooKeeper伪分布式环境搭建及命令行使用
- 利用GitHub搭建个人网站
- 移动互联网设备MID