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

目录
相关文章
|
30天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
213 77
|
11天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
83 35
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
10天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
16天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
87 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
22天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
48 3
实战~如何组织一个多容器项目docker-compose
|
16天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
43 4
|
1月前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
107 3
|
1月前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
41 2
|
4月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
210 56