Docker(四)、容器间通信

这篇具有很好参考价值的文章主要介绍了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 进行容器间通信。

二)、单向通信简单了解

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

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

二、基于Bridge容器间双向通信

一)、网桥实现原理

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

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

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

三)、浅实践下

1、启动两个容器

docker run -d --name web tomcat
docker run -d -it --name database centos /bin/bash

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

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

6、验证是否连通:

进到database容器内部,ping web容器:docker exec -it 容器ID /bin/bash
进到web容器内部,ping database容器

三、以上操作遇到的问题及解决方案

执行ping命令会报错:

bash: ping: command not found

解决:文章来源地址https://www.toymoban.com/news/detail-724120.html

apt-get update
apt install iputils-ping

到了这里,关于Docker(四)、容器间通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Docker】网络模式详解及容器间网络通信

    目录 一、概述 二、默认网络 三、网络模式及应用 1. Bridge模式 2. Host模式 3. none网络模式 四、自定义网络应用 1. 网络相连 2. 自定义通讯 3. 自定义IP 每篇一获 在 Docker 中,网络设置包括 IP 地址、子网掩码、网关、DNS 和端口号等关键组成部分。下面我将为您详细介绍这些概念

    2024年01月18日
    浏览(40)
  • OpenWRT 中创建docker Openwrt和其他宿主机中的docker容器通信

    首先网络得支持多拨,否则没有意义,之所以这么折腾,是因为直接OpenWRT多拨的情况下,网心云从原先的映射公网型变成全锥型 openwrt主路由, cpu:Intel® Celeron® CPU J1900 @ 1.99GHz 内存:4G 网口:6口intel I211 千兆网口 原先计划是PVE,然后跑4个OpenWRT虚拟机,然而带不动,基本一

    2024年02月08日
    浏览(45)
  • Docker网络配置与自定义IP容器通信

    目录 前言 一、docker网络配置 1. bridge 虚拟网桥 2. host 网络模式 3. none 网络模式 4. 自定义container网络模式 二、自定义IP容器通信 1. 自定义IP 2. 创建所需容器(mysql,tomcat) 3. 准备项目资源 4. 构建Nginx实现负载均衡          当项目大规模使用 Docker 时,容器通信的问题也就

    2024年01月25日
    浏览(47)
  • 同一台宿主机不同的docker-compose下的容器互相通信;查看docker的network使用情况

    我的 docker 版本: 24.0.2 docker-compose 版本: 1.29.2 linux 是 ubuntu 20.04 在使用 docker 部署环境的时候大多用 docker-compose 来编排,参数的配置会清晰一点。 通常一个容器一个 docker-compose.yml 文件。 这就使得不同 docker-compose 下的容器不能自动的互相通信。 那么顺着这个思路往下想,

    2024年02月08日
    浏览(45)
  • 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

    在执行docker pull时,会发现多个Pull complete 字样,就能体现分层,如果是一个文件,只会有一个Pull complete 。 概念:文件系统是计算机系统中用于组织和管理数据存储的一种方式。它定义了数据如何存储、命名、访问和修改的方式。 举例:如Windows自带的NTFS、FAT32、EXFAT,和L

    2024年04月14日
    浏览(39)
  • net.ipv4.ip_forward=0导致docker容器无法与外部通信

    在启动一个docker容器时报错: WARNING: IPv4 forwarding is disabled. Networking will not work. 并且,此时本机上的其他容器的网络服务,只能在本机上访问,其他机器上访问不到。 原因: 在Docker网络配置中,有一项重要的参数是net.ipv4.ip_forward,它的作用是开启Linux内核的IP转发功能。通过

    2024年02月11日
    浏览(53)
  • 如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信

    MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,广泛用于物联网和传感器网络中。Mosquitto是一个流行的开源MQTT代理,可以在Docker中进行配置和部署。本文将详细介绍如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信。 在开始之前,

    2024年02月06日
    浏览(48)
  • Docker网络(网络通信),资源控制(CPU优化,内存优化,磁盘优化),数据管理(数据卷,端口映射,容器互联)

    目录 docker网络 网络实现原理 网络实现实例 网络模式 查看Docker中的网络列表: 指定容器网络模式 模式详解 Host模式(主机模式): Container模式(容器模式): None模式(无网络模式): Bridge模式(桥接模式): 自定义网络: cpu优化概述 1. 资源限制: 2. CPU 实时调度策略:

    2024年01月16日
    浏览(84)
  • 使用docker-compose.yml快速搭建开发、部署环境(nginx、tomcat、mysql、jar包、各种程序)以及多容器通信和统一配置

    image 镜像名称,可去镜像市场查找自己需要的 hostname 容器内服务名 container_name 容器名 volumes 可以把自己电脑的路径映射到容器中的文件夹中 networks 写同一个网络可以让容器之间进行通信 启动 在项目根目录的命令行中输入 docker-compose up 停止 在项目根目录的命令行中输入 d

    2024年02月12日
    浏览(55)
  • 3.docker创建容器 (docker容器命令)

    2.1. 命令解读 docker run : 创建并运行一个容器 –name : 给容器起一个名字, 比如叫做 myNginx -p : 将宿主机端口与容器端口映射, 冒号左侧是宿主机端口, 右侧是docker容器端口 -d : 后台运行容器 nginx : 镜像名称 , 例如nginx 2.2. 通过查询得知nginx容器已经创建并运行成功 2.3. 验证是否启

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包