Docker 容器间通讯

1、虚拟ip/访问 同一网络

安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间(包括宿主机)可以根据分配的ip互相访问(ps:其他主机(包括其他主机的容器)无法ping通docker容器ip无法访问,因为docker0是172.0.0.1(localhost),其分配的容器ip也是172.0.0.2等,仅与本机属于同一网段。需要暴露到宿主机端口才可以被其他主机访问到。需要安装weave、fannel等跨主机网络通讯插件,用weave分配容器ip,这样跨主机容器间才可用ip互相通讯了,否则跨主机容器无法通讯)

Docker容器的虚拟ip查看:在容器内部 cat /etc/hosts

测试:[root@e0841aa13c5b /]# ping 容器虚拟ip

2、link 容器别名访问ps: 官方文档中已经不推荐使用

运行第一个容器
[root@CentOS ~]docker run -it --name centos-1 docker.io/centos:latest
运行第二个容器
[root@CentOS ~]# docker run -it --name centos-2 --link centos-1:centos-1 docker.io/centos:latest
--link:参数中第一个centos-1是容器名,第二个centos-1是定义的容器别名(使用别名访问容器),为了方便使用,一般别名默认容器名。

测试:[root@e0841aa13c5b /]# ping centos-1

事实上,在centos-2 容器内,如果查看 hosts 文件,可以发现 docker 已经将另外1个容器配置在了 hosts 中:

/app # cat /etc/hosts

127.0.0.1    localhost

...

172.17.0.6    centos-1 7a6409598773 centos-1

3、同一自定义网络下可通过容器名访问

ps: 默认的docker0网络只能通过ip访问.

因为用户自定义的网卡可以在容器之间提供自动的 DNS 解析,缺省的桥接网络docker0上的容器只能通过 IP 地址互相访问,除非使用 --link 参数。在用户自定义的网卡上,容器直接可以通过名称或者别名相互解析。

Docker容器名访问原理是通过Docker内置的DNS服务将容器名解析为容器的IP地址。

容器名访问只在Docker网络内部起作用,不能直接从宿主机外部访问容器。如果需要从宿主机外部访问容器,可以通过端口映射(Port Mapping)将容器的端口暴露给宿主机

运行如下命令创建bridge网络:docker network create testnet

查询到新创建的bridge testnet。

运行容器连接到testnet网络
使用方法:docker run -itd --name test1 ---network testnet nginx

docker run -itd --name test2 ---network testnet nginx

测试从test2容器ping test1容器

docker exec -it test2 bash

[root@e0841aa13c5b /]# ping test1

4.docker compose部署 可通过service服务名访问(单机)

Docker Compose 是一个在单个服务器上创建多个容器的工具, 主要是用来构建多个服务(一个服务就相当于一个容器或一组相同配置的容器),一般是构建构建多个有关联的服务。

只要是处于同一个Docker 网络下的容器就可以使用服务名进行直接访问而无需担心重启导致的VIP变化

使用docker-compose编排一个配置文件的一组容器时会默认创建一个网络并且这组容器全部都会加入到网络当中。在不同配置文件的容器默认会用不同的network

4-1.同一个yml文件的情况下:

新建 docker-compose.yml 文件,编写如下

version: "3"

services:

  digger-api:

    image: "express:v1"

    ports:

      - "3000:3000"

  digger-mysql:

    image: "mysql:5.7.25"

    environment:

      - MYSQL_ROOT_PASSWORD=root

  digger-redis:

    image: "redis:5.0.3-alpine"

然后使用 docker-compose up -d 启动即可,容器会在后台运行。

digger-mysql的容器内: ping digger-api

4-2.不同yml文件的情况下,需配置成使用同一外部网络

docker network create test1 #创建一个单独的网络

这几个docker compose的  yml文件的所有容器的网络都指定到上面创建的网络,并标记为 external

version: "3"

services:

  digger-api:

    image: "express:v1"

    ports:

      - "3000:3000"

    networks:

      - test1

networks:

  frontend:

external: true #指定容器使用外部已有的网络

5.docker swarm 可通过service服务名访问(多主机集群 跨主机通讯)

服务名访问是通过服务发现与负载均衡机制实现的

服务发现:Docker Swarm管理着集群中所有服务的状态和配置信息。当你创建一个服务时,Swarm会收集服务的相关信息并将其存储在内置的服务发现机制中。

负载均衡:通过服务名访问时,Swarm会在运行服务的节点之间进行负载均衡,并将请求路由到可用的任务上。

DNS解析服务:Docker Swarm使用内置的DNS解析服务来实现服务名的解析。在Docker网络内部,可以使用服务名作为主机名来访问服务的网络服务。Swarm的DNS服务将服务名解析为可用的任务的IP地址,并将请求转发到相应的任务上

serviceName服务名访问只在Docker Swarm集群内部起作用,不能直接从集群外部访问。如果需要从集群外部访问服务,可以通过服务的暴露端口或使用Ingress等方式来配置集群的统一入口。

#创建service  --publish映射宿主机IP  自带负载均衡会随机在多主机上部署容器

docker service create --name node_v16 --publish <host_port>:<container_port> <service_image>

docker swarm容器内直接可直接访问serviceName,宿主机需映射serviceName+serviceIP到/etc/hosts才行docker swarm overlay网络分配的VIP 无法从service inspect信息中查看,只能在具体容器中查看docker exec -it 3f3 ip addr show)

集群外 可访问 http://宿主机IP:host_port

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

22个C语言小白常见问题总结

一.语言使用错误 在打代码的过程中&#xff0c;经常需要在中文与英文中进行转换&#xff0c;因此常出现一些符号一不小心就用错&#xff0c;用成中文。例如&#xff1a;“&#xff1b;”中文中的分号占用了两个字节&#xff0c;而英文中“;”分号只占用一个字节。编译器只能识…

mysql数据库主从复制,搭建从库

1 期望效果 假设我们现在有两个服务器&#xff0c;两个服务器都有数据库&#xff0c;然后我们命名一个叫主数据库&#xff08;Master&#xff09;&#xff0c;一个叫从数据库&#xff08;Slave&#xff09; 数据备份和容灾&#xff1a;通过主从复制&#xff0c;可以将主数据库…

计算机操作系统核心组件

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天给大家讲讲操作系统。 操作系统核心组件 用户借助于一个或多个应用程序与操作系统进行交互&#xff0c;常常是通过一个称为shell的特殊应用程序进行的&#xff0c;shell也叫作命令解释器。105今天的大多…

SQL——SELECT相关的题目

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表 1280、学生参加各科测试的次数 1068、产品销售分析I 1075、项目员工I 1084、销售分析III 1327、列出指…

Qt 报错总结 No suitable kits found

目录 “No suitable kits found” 解决 解决方法参考&#xff1a; chatGPT辅助解决QT构建报错error: multiple target patterns 我的解决方法&#xff1a;把语言设置为空 “No suitable kits found” 解决 没有找到合适的kits套件&#xff0c;在安装Qt Creator时没有安装Min…

程序员做推广?我劝你别干

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这是卢松松会员专区&#xff0c;一位会员朋友的咨询&#xff0c;如果你也有自研产品&#xff0c;但不知道如何推广&#xff0c;一定要阅读本文!强烈建议收藏关注&#xff0c;因为你关注的人&#xff0c;决定你看到的…

Ubuntu切换内核版本

#安装内核安装工具 sudo apt-get install software-properties-common sudo add-apt-repository ppa:cappelikan/ppa sudo apt-get update sudo apt-get install mainline#安装指定内核版本(有些版本并不能安装成功) mainline install 5.14.10#更新GRUB配置 sudo update-grub#查…

Linux 软件包管理器 yum的下载、功能介绍及使用

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 Linux下的三种软件安装方…

burpsuite抓包响应报文乱码

1、响应报文中的中文信息乱码 2、解决办法 3、设置成功后重新发起请求

储油罐智控:ThingsBoard网关实现液位温度精准监测

储油罐是采油、炼油企业储存油品的重要设备&#xff0c;对储油罐液位、温度的实时数据监测对企业的库存和安全管理有着重大意义。 场景 对于企业&#xff0c;尤其是加油站来说&#xff0c;高效的罐体液位、温度监测对于优化燃油库存、防止短缺或过剩至关重要。不准确的燃油液位…

05Django项目--前端公共文件和其他html文件的适配

对应视频链接点击直达 Django项目--前端公共文件和其他html文件的适配 对应视频链接点击直达前端页面准备Pubilc页面设置 OVER&#xff0c;不会有人不会吧不会的加Q1394006513结语 接着上一节 前端页面准备 为了方便大家更好的复制&#xff0c;我把整个项目及templates文件夹和…

RabbitMQ(一)概述第一个应用程序

文章目录 概述AMQP和JMS官网安装开始第一个程序 概述 消息队列是实现应用程序和应用程序之间通信的中间件产品 AMQP和JMS 工作体系 官网 https://www.rabbitmq.com/ RabbitMQ是一款基于AMQP、由Erlang语言开发的消息队列产品 安装 # 拉取镜像 docker pull rabbitmq:3.13-m…

运营抖音小店,这件事情每天都需要去做!一个都不能少!

大家好&#xff0c;我是电商小V 咱们的店铺开好之后&#xff0c;然后运营自己的店铺每天需要做好什么事情呢&#xff1f;这个问题是很多新手小伙伴开通抖店之后最关心的问题&#xff0c;咱们今天就来详细的说一下运营抖音小店每天需要做什么呢&#xff1f; 第一点&#xff1a;奖…

commvault学习(8):备份与恢复sql server

1.安装sql server2008r2 安装sql server 2.在客户端添加cv代理mssql server 如果此前的cv代理中没有sql server&#xff0c;那么可以手动再补充 点击setup 添加MSSQL Server 将程序添加到windows防火墙排除表 勾选自动探寻实例 3.备份sql server 3.1配置数据库内容 右击默…

Python操作MySQL实战

文章导读 本文用于巩固Pymysql操作MySQL与MySQL操作的知识点&#xff0c;实现一个简易的音乐播放器&#xff0c;拟实现的功能包括&#xff1a;用户登录&#xff0c;窗口显示&#xff0c;加载本地音乐&#xff0c;加入和删除播放列表&#xff0c;播放音乐。 点击此处获取参考源…

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的&#xff0c;通常使用渲染循环&#xff08;render loop&#xff09;来更新对象的旋转状态&#xff0c;从而实现动画效果。 具体的原理包括以下几个步骤&#xff1a; 创建对象&#xff1a;首先创建一个需要旋转…

东软联合福建省大数据集团打造“数据要素×医疗健康”服务新模式

5月23日&#xff0c;东软集团与福建省大数据集团有限公司在福州签订战略合作协议。 据「TMT星球」了解&#xff0c;双方将在健康医疗数据要素价值领域展开合作&#xff0c;通过大数据服务&#xff0c;赋能商业保险公司的产品设计和保险两核&#xff0c;打造“数据要素医疗健康…

Superset二次开发之柱状图自定义初始化时Data Zoom数据缩放值

Superset项目柱状图来自Echarts 首先Echarts实现柱状图数据缩放初始化默认值的效果 核心代码 设置Datazoom 的start 和end myChart.showLoading(); $.get(ROOT_PATH + /data/asset/data/obama_budget_proposal_2012.list.json,function (obama_budget_2012) {myChart.hideLo…

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端

工业4.0 企业级云MES全套源码&#xff0c;支持app、小程序、H5、台后管理端 采用javaspringboot-vue.jsuniapp开发 随着工业4.0的快速发展&#xff0c;制造执行系统&#xff08;MES&#xff09;成为了智能制造的核心。今天&#xff0c;将为大家介绍一款开源的MES系统——MES管…

【每日一题】52.20个机器学习问题 2 (模型部署、实践流程和应用问题)

在上一篇《20个机器学习问答题》中&#xff0c;问题主要围绕机器学习的基础概念和理论知识。 这次&#xff0c;本篇内容针对机器学习的实践和应用继续提出了20个不同的问题。【点击跳转原文】 在实际应用中&#xff0c;机器学习模型的建立流程是怎样的&#xff1f; 机器学习模…