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

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

场景

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

  • 启动test1 和test2
sudo docker ps
  • 停止test2,删除test2
sudo docker stop test2
sudo docker rm test2
sudo docker ps
  • 加入link创建test2
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咱们试试
sudo docker exec -it test1 /bin/sh
ping test2
上节课通过docker network ls 可以看到一个bridge host none

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

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

之前都是172.17 这里的是172.18

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

sudo docker network 
sudo docker network connect
#我们让连接到mybridage这个network上
 sudo docker network connect mybridge test2
 sudo docker network inspect mybridge

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

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试试.

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这个命令。


原文发布于微信公众号 - 编程坑太多(idig88)

原文发表时间:2018-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在CentOS上创建Kubernetes集群

在本教程中,您将使用Ansible和Kubeadm从头开始设置Kubernetes集群,然后给它部署一个容器化的Nginx程序。

5.8K12
来自专栏Debian社区

Debian 光盘安装简易教程

这篇文章我会尽可能详细地说明如何快速安装纯净的Debian 8.2.0,需要懂一点vi编辑器的使用方法。 如果是新手,没用过 vim 编辑器也不用担心,我会尽量...

1962
来自专栏北京马哥教育

Docker Swarm学习笔记(二)

搭建基础环境 官方文档中演示时用到了五台主机/虚拟机; ? 这里因为资源有限,只用三台; ? 创建虚拟机(可以用主机,也可以用虚拟机); 安装Ubuntu 16...

2827
来自专栏漫漫全栈路

.NET Core 实战笔记2-从命令开始

上一篇简要介绍了 .NET Core平台,本篇对dotnet命令进行讲解。 .NET Core作为跨平台产品,不再只依赖于Windows的图形化界面系统,因而...

39811
来自专栏Ryan Miao

Nginx代理proxy pass配置去除前缀

比如,访问abc.com/appv2/a/b.html, 要求转发到localhost:8088/appv2/a/b.html

1522
来自专栏杂七杂八

Anaconda安装与初步使用

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本...

4745
来自专栏漫漫全栈路

.NET Core 实战笔记2-从命令开始

上一篇简要介绍了 .NET Core平台,本篇对dotnet命令进行讲解。

2441
来自专栏Java 源码分析

关于apache端口被占用

正文 无论我们在安装单个的apache还是装集成环境xampp都是有可能遇到apache意外停止。查看错误日志会发现一般都是端口被占用,一般是被虚拟机占用了,这...

3887
来自专栏跟着阿笨一起玩NET

异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项

常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项

4262
来自专栏一英里广度一英寸深度的学习

No zuo no die ,用Docker安装Mysql

回显,GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

1434

扫码关注云+社区