前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『中级篇』 容器之间的Link(27)

『中级篇』 容器之间的Link(27)

作者头像
IT架构圈
发布2018-08-01 11:58:49
4350
发布2018-08-01 11:58:49
举报
文章被收录于专栏:IT架构圈IT架构圈

上次介绍了默认的网络Bridge,连接到docker0之后还可以跟外界进行通信,查看docker之间的关系link。上节生成了test1和test2,test1和test2之前可以通过ip地址的房还是进行通信的。

场景

如果创建2个容器,一个mysql容器,一个tomcat容器,tomcat容器内后台应用,需要访问mysql数据库容器,按照上节的原理,我需要先进入mysql的容器中查看mysql的ip地址,然后在在tomcat容器的应用中修改程序里面的数据库连接地址才可以完成应用的连接。这样是不是很麻烦。 其实还有一种link的方式可以让应用通信变的简单

  • 启动test1 和test2
代码语言:javascript
复制
sudo docker ps
  • 停止test2,删除test2
代码语言:javascript
复制
sudo docker stop test2
sudo docker rm test2
sudo docker ps
  • 加入link创建test2
代码语言:javascript
复制
sudo docker run -d --name test2 --link test1 busybox /bin/sh -c "while true; do sleep 3600; done"
sudo docker ps
sudo docker exec -it test2 /bin/sh
#ping test1
ping 172.17.0.2
ping test1

通过link test1 也就是直接把test1 告诉给test2的ip地址,直接可以通过test1的容器名字,直接找test1

  • 反过来我在test1里面直接ping test2咱们试试
代码语言:javascript
复制
sudo docker exec -it test1 /bin/sh
ping test2
上节课通过docker network ls 可以看到一个bridge host none

我们自己创建一个bridge,让容器直接绑定新的bridge

代码语言:javascript
复制
sudo docker network create -d bridge mybridge 
sudo docker network ls
brctl show
代码语言:javascript
复制
#新建test3 连接新的mybridge
sudo docker run -d --name test3 --network mybridge busybox /bin/sh -c "while true; do sleep 3600; done"
#查看新的mybridge上有新的接口了
brctl show
代码语言:javascript
复制
#查看下新的mybridage它的网络
sudo docker network inspect mybridge

之前都是172.17 这里的是172.18

问题来了,一个17,一个18网段如何让17网段的容器 可以连接在新的18网段上呢

代码语言:javascript
复制
sudo docker network 
sudo docker network connect
代码语言:javascript
复制
#我们让连接到mybridage这个network上
 sudo docker network connect mybridge test2
 sudo docker network inspect mybridge

我们在test3上尝试ping下test2 看能否ping通

代码语言:javascript
复制
sudo docker exec -it test3 /bin/sh
#ping test2的ip地址
ping 172.18.0.3
#ping test2
ping test2

是不是有点神奇,按照常理我不通过link不可以通过名称直接ping通test2,而这里我们成功的ping通了test2,这是为什么呢?我们test2和test3因为都连接了用户自己创建的bridge上,这2个默认就是连接好的,可以直接通过名称。咱们在试试通过test2来ping test3试试.

代码语言:javascript
复制
sudo docker exec -it test2 /bin/sh
ip a
ping test3
#ping test1,是可以ping通的 因为之前咱们已经link上去了,如果不link根本是ping不通的。如果ping不通 也可以通过 sudo docker network connect mybridge test1 的方式来ping
ping test1

PS:用户自定义的bridge 和 docker0 这个bridge他们之前的区别,docker0 如果通过名称想找到需要通过link,实际的项目中很少使用link,其实让大家知道link这个命令。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
  • 上节课通过docker network ls 可以看到一个bridge host none
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档