Docker网络
ip addr查看当前linux虚拟机的ip地址
此时有三个网络,docker是如何处理网络之间的访问的呢?
启动tomcat容器,查看其ip地址
当前linux主机可以ping通当前容器的内部
原理
1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker就会有一个网卡docker0
这里使用的是桥接模式,使用的是evth-pair技术
我们发现这个容器带来的网卡,都是一对出现的
evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备
创建tomcat01和tomcat02,测试发现两个容器之间可以相互ping通
结论:
tomcat01和tomcat02共用一个路由器docker0
所有的容器不指定网络的情况下,都是docker0做路由的
docker会给我们的容器分配一个默认的可用IP
小结
Docker使用的是Linux的桥接,宿主机中是docker容器的网桥docker0
Docker中的所有的网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)
只要容器删除,对应的网桥就没了
Docker --link :添加主机名和ip的映射
docker间常常需要互联或者说通信,比如后台程序访问数据库容器,一般是需要ip+端口的形式,然而ip是经常会变化的
,docker中采用link来为容器起个名字
,以后访问只要名字+端口就行了
,这样减少了ip访问下,ip常发生变化而导致的问题
操作概述,在创建第二个容器时,将第一个容器link到第二个容器中,这样第二个容器访问第一个容器时利用名字就能访问
1.在第二个容器创建时添加一个link,如下面在创建了第一个容器test1之后创建第二个容器时:
docker run -d --name test2 --link test1 busybox /bin/sh -c "while true;do sleep 3600 ;done"
2.进入第二个容器内部
docker exec -it test2 /bin/sh
输入ping test1----->发现是可通的
但注意进入test1 ping test2是不行的,原因在于link 具有方向性
,即左边的可以ping 右面的名字
本质: 在test2容器的/etc/hosts文件中添加了172.18.0.3 test1 ,即将ip映射到了test1这个域名上
现在–link已经不建议使用了
–link命令指定别名
上面–link没有为当前容器起一个名字,那么默认ip映射到test1这个容器名上,访问的时候是ping test1
docker run -d --name test --link mysql:db -p xxx:xxx test
其中mysql是指一个name为mysql的容器,db为为其指定的别名
然后在test容器中就可以使用db来代替ip来访问mysql了
自定义网络
查看所有的docker网络 — docker network ls
docker的网络模式
- bridge : 桥接 docker默认
- none : 不配置网络
- host : 和宿主机共享网络
- container : 容器网络连通(用的少)
docker network --help 查看网络相关的命令
自定义网络
# 我们直接启动命令,有默认的参数,只是省略掉了 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
docker0的特点 :默认的,域名不能访问,–link可以打通连接
创建自定义网络命令:docker network create
docker network create --driver bridge --subnet 192.168.1.0/16 --gateway 192.168.1.0 mynet
解析:
--driver bridge 表示使用桥接模式
--subnet 192.168.1.0/16 表示子网ip 可以分配 192.168.1.2 到 192.168.255.255
--gateway 192.168.1.0 表示网关
mynet 表示网络名
查看自己定义的网络相关信息
使用自定义网络中的网桥创建容器
这里启动两个容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
再次使用 docker network inspect mynet 查看网络信息
测试ping IP及name是否都可以ping通:
测试结果如下:
使用自定义网络 ping 容器的 ip 地址和名称都能 ping 通(不使用–link也可以ping通名字)
我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络
好处:不同的集群使用不同的网络,保证集群是安全和健康的
网络连通
如何打通不同网段,实现连接
打通的是容器和对应的网卡,而不是打通网卡和网卡
查看相关帮助
在不指定网络的情况下再次启动两个容器,即默认的docker0
在不打通的情况下进行测试
结果:发现ping不通
测试
测试tomcat01 连通 mynet
案例实践:docker network connect
[root@web ~]# docker network connect mynet tomcat01
[root@web ~]# docker inspect mynet
连通之后就是将tomcat01 放到了mynet网络下
官方:一个容器两个ip地址;与阿里云服务,公网ip 私网ip类似
tomcat01 连通 tomcat-net-01
**结论:假设要跨网络操作别人,就需要使用docker network connect 连通! **
推荐文章
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十