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互相通讯了,否则跨主机容器无法通讯 )

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

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

运行第一个容器

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** **:** **默认的docker** **0** **网络只能通过ip访问** **.** ****因为**** ****用户自定义的网卡可以在容器之间提供自动的 DNS 解析****,缺省的桥接网络docker0上的容器只能通过 IP 地址互相访问,除非使用 --link 参数。在用户自定义的网卡上,容器直接可以通过名称或者别名相互解析。 ****Docker容器名访问原理是通过Docker内置的DNS服务将容器名解析为容器的IP地址。**** ****容器名访问只在Docker网络内部起作用,不能直接从宿主机外部访问容器**** 。如果****需要从宿主机外部访问容器**** ,可以****通过端口映射(Port Mapping)将容器的端口暴露给宿主机****。 运行如下命令创建bridge网络:docker network create testnet 查询到新创建的bridge testnet。 ![](https://file.jishuzhan.net/article/1794010816463245314/87d51d8fe6a6e935254a8254497ffbae.webp) **运行容器连接到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 \:\ \ ****docker swarm容器内直接可直接访问serviceName**** ,宿主机需映射serviceName+serviceIP到/etc/hosts才行****(****docker swarm overlay网络分配的VIP 无法从service inspect信息中查看,只能在具体容器中查看docker exec -it 3f3 ip addr show) **集群外 可访问 http://宿主机IP:host_port**

相关推荐
艾伦_耶格宇16 分钟前
【ACP】阿里云云计算高级运维工程师--ACP
运维·阿里云·云计算
FrankYoou1 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
一位摩羯座DBA1 小时前
Redhat&Centos挂载镜像
linux·运维·centos
隆里卡那唔1 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样1 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
cui_win2 小时前
【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
linux·运维·网络
风清再凯2 小时前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
深圳安锐科技有限公司2 小时前
深圳安锐科技发布国内首款4G 索力仪!让斜拉桥索力自动化监测更精准高效
运维·安全·自动化·自动化监测·人工监测·桥梁监测·索力监测
猫头虎2 小时前
猫头虎 AI工具分享:一个网页抓取、结构化数据提取、网页爬取、浏览器自动化操作工具:Hyperbrowser MCP
运维·人工智能·gpt·开源·自动化·文心一言·ai编程
cocologin4 小时前
RIP 技术深度解析
运维·网络·网络协议