博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker网络的基本功能操作示例
阅读量:6574 次
发布时间:2019-06-24

本文共 5053 字,大约阅读时间需要 16 分钟。

一、Docker常用的四种网络模型

1.第一种:使用网络名称空间,但不设置任何网络设备

  这种模型中只有lo接口,是一个封闭式的容器,不能与外界进行通信。设置网络模型需要使用 --network 选项来设置,如果不指定类型,默认是第二种模型:

~]# docker container run -it --network none busybox:latest / # ifconfig -alo        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:1           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

2.第二种:桥接式网络模型。

  这种模型是将容器与宿主机上的docker0网络接口相连,可实现容器对外通信。

~]# docker container run -it --network bridge busybox:latest / # hostname f9a1612f44bd/ # ifconfig eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02            inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:8 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:648 (648.0 B)  TX bytes:0 (0.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:1           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

  此时的IP地址就多了宿主机上docker0的地址,有时可能我们会需要使用主机名来进行通信,所以还可以在启动容器时定义主机名(若不是先指定,默认主机名是容器id)。

~]# docker container run -it --network bridge -h box.docker.com busybox:latest / # hostname box.docker.com/ # cat /etc/hosts #查看本地解析规则127.0.0.1    localhost::1    localhost ip6-localhost ip6-loopbackfe00::0    ip6-localnetff00::0    ip6-mcastprefixff02::1    ip6-allnodesff02::2    ip6-allrouters172.17.0.2    box.docker.com box #已被加入到本地解析规则中/ # cat /etc/resolv.conf #查看DNS服务器指向# Generated by NetworkManagersearch example.comnameserver 192.168.29.2 #自动指向宿主机的DNS服务器/ # nslookup -type=A www.baidu.com #查看是否能正常解析Server:        192.168.29.2Address:    192.168.29.2:53Non-authoritative answer:www.baidu.com    canonical name = www.a.shifen.comName:    www.a.shifen.comAddress: 61.135.169.125Name:    www.a.shifen.comAddress: 61.135.169.121

  这种模型中默认指向的DNS服务器是宿主机指向的DNS,当然也可以用 --dns 自定义指定DNS:

~]# docker container run -it --network bridge -h box.docker.com --dns 114.114.114.114  busybox:latest / # cat /etc/resolv.conf search example.comnameserver 114.114.114.114

  使用 --add-hosts 可以注入host解析规则:

~]# docker container run -it --network bridge -h box.docker.com --add-host www.ready.com:1.1.1.1 --dns 114.114.114.114  busybox:latest / # cat /etc/hosts127.0.0.1    localhost::1    localhost ip6-localhost ip6-loopbackfe00::0    ip6-localnetff00::0    ip6-mcastprefixff02::1    ip6-allnodesff02::2    ip6-allrouters1.1.1.1    www.ready.com172.17.0.2    box.docker.com box

   使用 -p 选项将容器“暴露”到网络上去,使外部能够访问容器:

-p 
将指定容器端口映射到宿主机所有地址的一个动态端口。-p
:
将指定的容器端口映射至指定的宿主机端口。-p
:
:
将指定的容器端口映射至主机指定IP的指定端口。

  "动态端口"指随机端口,具体可使用 docker port 命令查看。

~]# docker container run --name test1 --network bridge -p 80 --rm ready/httpd:v0.2

  查看被映射到了哪个端口:

~]# docker port test1 80/tcp -> 0.0.0.0:32768

  在物理机上访问容器宿主机的地址+映射IP:

3.第三种模型:联盟容器模型。

  所谓联盟容器模式就是指使两个容器使用共同的名称空间,比如在一般情况下,启动两个容器时,会被分别分配在不同的名称空间中使容器之间相互隔离,但在一些场景中可能会需要两个容器使用相同的名称空间,这时就可以使用 --network container:<容器名> 将两个容器划分为一个共享的名称空间。要注意的是这里共享的仅仅只是网口名称空间,文件系统等还是相互隔离的。

  若要使容器共享宿主机的网络名称空间,则可以使用 --network host ,可以看到容器中的IP地址和宿主机上的IP一致了:

~]# docker container run --name box1 -it --network host --rm busybox:latest / # ifconfig docker0   Link encap:Ethernet  HWaddr 02:42:19:55:5A:6A            inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0          inet6 addr: fe80::42:19ff:fe55:5a6a/64 Scope:Link          UP BROADCAST MULTICAST  MTU:1500  Metric:1          RX packets:45 errors:0 dropped:0 overruns:0 frame:0          TX packets:55 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0           RX bytes:3432 (3.3 KiB)  TX bytes:5494 (5.3 KiB)ens33     Link encap:Ethernet  HWaddr 00:0C:29:A7:59:CC            inet addr:192.168.29.101  Bcast:192.168.29.255  Mask:255.255.255.0          inet6 addr: fe80::7c47:ae3e:a9b4:fe7c/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:8392 errors:0 dropped:0 overruns:0 frame:0          TX packets:3438 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:626540 (611.8 KiB)  TX bytes:389180 (380.0 KiB)

 二、修改默认docker0的地址以及创建网络接口

  可在docker的配置文件中修改,路径为: /etc/docker/daemon.json 

{"bip": "192.168.1.5/24", #核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其它选项可通过此地址计算得出。"fixed-cidr": "10.20.0.0/16","fixed-cidr-v6": "2001:db8::/64","mtu": 1500,"default-gateway": "10.20.1.1","default-gateway-v6": "2001:db8:abcd::89","dns": ["10.20.1.2","10.20.1.3"]}

   在容器中创建新的网络接口可使用 docker network create 命令。

转载于:https://www.cnblogs.com/readygood/p/10294633.html

你可能感兴趣的文章
redis的操作
查看>>
SDL1.3(C语言)程序移植LINUX。。。
查看>>
活动选择问题 贪心
查看>>
我的第一篇博客
查看>>
页面前端的水有多深?再议页面开发
查看>>
我的firefox插件开发历程
查看>>
我很高兴找了一张可以说明:为什么软件开发那么困难的图
查看>>
iOS:翻页效果
查看>>
(原创)Python文件与文件系统系列(5)——stat模块
查看>>
【ABAP】Cross client master/business data transfer guide(ALE &I Doc)
查看>>
一个中型项目:本地校园App
查看>>
BZOJ2809:[Apio2012]dispatching——题解
查看>>
WEBSHELL
查看>>
[转] 残差网络
查看>>
个人作业——软件工程实践总结作业
查看>>
[转载]依赖注入那些事
查看>>
学习笔记===《用户体验要素——以用户为中心的产品设计》
查看>>
CentOS搭建Git服务器
查看>>
多线程篇六:线程池
查看>>
easyui tab页面关闭根据回调函数刷新父tab页
查看>>