Docker 容器间通信

简介: Docker 容器间通信

容器间通信
一、容器间 Link 单向通信
一)、浅实践下
二)、单向通信简单了解
二、基于Bridge容器间双向通信
一)、网桥实现原理
二)、docker实现容器间双向通信
三)、浅实践下
三、以上操作遇到的问题及解决方案
一、容器间 Link 单向通信
一)、浅实践下
1、模拟tomcat服务器:–name 为新产生的容器命名docker run -d --name web tomcat
2、模拟数据库 -it建立交互模式,centos镜像名称 ,即创建一个基础的centos容器【centos容器创建完以后默认是自动退出的状态,想让当前容器创建完保持运行的状态,加上-it交互模式和访问 /bin/bash ,才能在docker ps列表中看到一个稳定的database容器】
docker run -d --name database -it centos /bin/bash
通过执行 docker ps 查看运行中的容器,由此可获取容器ID
3、查询容器的元数据,可以看到两个容器的ip地址【ps:输出网络设置里的ip地址即为当前容器ip】: docker inspect 容器ID
4、进入到tomcat容器内部:docker exec -it 容器ID bash
ping 数据库容器ip # 通
ping database # 不通
exit退出,把原来的web移除docker rm -f 容器ID
5、创建tomcat容器增加参数:docker run -d --name web --link database tomcat
进入tomcat容器内部:docker exec -it web容器ID /bin/bash ,
ping数据库database:ping database # 通
至此,从tomcat到database 的单向通信完成。
6、使用场景:eg:连接数据库有个ip地址,可以环境database,便于通过 ip 进行容器间通信。

二)、单向通信简单了解
下图表述的是容器间通信的一个简图:

单向通信就是两个容器间,由A向B单向建立网络连接,eg:tomcat应用单向的从mysql容器提取数据即可,mysql不需要知道tomcat容器的存在,扩展:docker容器的虚拟ip,即在每个容器创建以后,都会创建一个虚拟ip,无法从外侧直接访问,只是在docker环境中,内部彼此通信的一个标识,2个容器创建以后,彼此之间互联互通,每创建一个容器,ip地址都会变化,如果更换mysql容器,则需要重启tomcat应用并重新指向新的数据库容器,所以容器间通信不建议使用ip进行通信。

推荐方式:给两个容器建立名字,通信的以后tomcat应用不再配置要指向的ip地址,改为相应名称,便利之处就显而易见,比如更换数据库容器,无论数据库地址是什么,只需要名字对应上就可以了,对于调用方的容器不需要做调整。docker管理容器的时候,通信的时候建议通过容器名称建立连接,自动完成网络间的转发工作。

二、基于Bridge容器间双向通信
一)、网桥实现原理
可以直接看简图:

网桥实现通信的原理:
docker每创建一个网桥,都会在宿主机安装一个虚拟网卡,虚拟网卡承担网关的作用,通过将现有容器和当前虚拟网卡做关联,可以实现容器间的通信,如果想和外部进行通信,所有容器发送的数据包,都需要通过虚拟网卡和宿主机的物理网卡进行地址转换,转化为物理网卡的数据包,和外网进行通讯,即容器发送的数据包通过虚拟网卡到物理网卡的地址转换,转化为物理网卡数据包进而向外网通信。
同样从外网发来的数据包先通过物理网卡的地址转换,经过虚拟网卡,再由虚拟网卡进行数据分发,以上,为网桥实现原理。

二)、docker实现容器间双向通信

docker 提供一种方案:利用网桥简易实现多组容器间的双向通讯
网桥就是一个虚拟的网络桥接,是docker环境与外界通信必不可少的一个组件,从容器内部ping外部的百度网站事可以通的,因为网桥可以把从容器发送的数据包,通过网桥传送给外部的物理网卡来与互联网进行信息交互,物理网卡得到的响应数据也会随着网桥送回给指定的容器,网桥充当了docker环境和外部宿主机之间的通信员,在docker环境中要实现容器间的双向通信,网桥必不可少
网桥还有一个作用:把容器从网络环境中进行分组,将指定的容器都绑定到一个网桥,则绑定的容器之间是可以互相通信的。

三)、浅实践下
1、启动两个容器

docker run -d --name web tomcat
docker run -d -it --name database centos /bin/bash
1
2
2、查看两个运行容器的容器ID :docker ps
3、通过新建网桥,实现容器间互联互通:docker network create -d bridge my-bridge

若要实现某些容器间互联互通,需要创建一个新的网桥,
bridge:指明新建网络服务类型是一个网桥,名称为my-bridge
4、查docker网桥:docker network ls
docker network: docker网络服务的命令
ls 列出当前docker底层网络层服务明细,输出每一个docker在网络服务中都会有一个默认的网桥,承担容器和外界间通信的桥梁

5、把容器和网桥绑定:

docker network connect my-bridge web
docker network connect my-bridge database
1
2
以上两个容器都和网桥my-bridge 绑定后,两个容器之间是互联互通的,可视为绑定到同一个网桥分组。
通过创建一个新的网桥,将已有容器和网桥绑定,实现容器之间的互联互通

6、验证是否连通:

进到database容器内部,ping web容器:docker exec -it 容器ID /bin/bash
进到web容器内部,ping database容器
1
2
三、以上操作遇到的问题及解决方案
执行ping命令会报错:

bash: ping: command not found
1
解决:

apt-get update
apt install iputils-ping
1
2
文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————
版权声明:本文为CSDN博主「甜可儿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_17033579/article/details/133881157

目录
相关文章
|
8月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
797 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
869 6
|
8月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
791 6
|
8月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
1127 4
|
10月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1298 108
|
11月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
769 57
|
11月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
632 59

热门文章

最新文章