当前位置: 首页 > news >正文

docker network容器网络通信

Docker 网络主要有以下两个作用:

  • 容器间的互联和通信以及端口映射
  • 容器IP变动时候可以通过服务名直接网络通信而不受到影响

只要是处于同一个Docker 网络下的容器就可以使用服务名直接访问,而无需担心重启。

docker容器网络模式

  • bridge网络模式:使得容器与容器之间可以相互互通

bridge网络模式是基于NAT模式下的网络通信方式。此驱动为Docker的默认设置驱动,使用这个驱动的时候,将创建出来的Docker容器连接到Docker网桥上。作为最常规的模式,bridge模式已经可以满足Docker容器最基本的使用需求了。然而其与外界通信使用NAT,增加了通信的复杂性,在复杂场景下使用会有诸多限制。

  • host网络模式:让容器程序可以使用主机网络

容器内的网络并不是希望永远跟主机是隔离的,有些基础业务需要创建或更新主机的网络配置,我们的程序必须以主机网络模式运行才能够修改主机网络,这时候就需要用到 Docker 的 host 主机网络模式。因此可以认为host驱动适用于对于容器集群规模不大的场景。

  • none网络模式:不得使用任务的网络

none 网络模式即不为 Docker Container 创建任何的网络环境,容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。可以说 none 模式为 Docke Container 做了极少的网络设定,但是俗话说得好“少即是多”,在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。这也恰巧体现了 Docker 设计理念的开放。

  • container网络模式:将两个容器放到统一网络空间中,可以直接通过localhost访问

container网络模式允许一个容器共享另一个容器的网络命名空间。当两个容器需要共享网络,但其他资源仍然需要隔离时就可以使用 container 网络模式,例如我们开发了一个 http 服务,但又想使用 nginx 的一些特性,让 nginx 代理外部的请求然后转发给自己的业务,这时我们使用 container 网络模式将自己开发的服务和 nginx 服务部署到同一个网络命名空间中。container 网络模式是 Docker 中一种较为特别的网络的模式,处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。

docker容器网络命令

  • 创建网络

参数说明:

--driver:驱动程序类型

--gateway:主子网的IPV4和IPV6的网关

--subnet:代表网段的CIDR格式的子网

mynet:自定义网络名称

不指定任何选项的时候默认的–driver(网络模式)也是bridge(桥接),但是gateway和subnet会自动生成。

docker network create 网络名称
docker network create -d bridge mynetwork
docker network create --driver=bridge --gateway=192.168.137.1 --subnet=192.168.137.0/16 mynet
  • 查看查看网络列表
docker network ls
  • 查询网络的模型详细信息
docker network inspect 网络名称
  •  网络连接
docker network connect 网络名称 容器名称
  •  网络断开
docker network disconnect 网络名称 容器名称
  • 网络删除
docker network rm 网络名称
  • 删除所有不再使用的网络
docker network prune
  • 创建并运行容器时指定网络
docker run --name containerName -p 80:80 -d --network my_network nginx

Docker 安装时,自动在host上创建了如下3个网络:

# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
ff11ffdbd211   bridge            bridge    local
a80155c5275d   host              host      local
b67166d3dfba   none              null      local 

使用示例

1、创建容器时挂载网络

#创建一个桥接类型的网络
docker network create --driver=bridge --gateway=192.168.137.1 --subnet=192.168.137.0/16 myNet1#创建并运行容器时指定网络
docker run --name containerName -p 80:80 -d --network myNet1 myNginx#不想用时可以断开网络
docker network disconnect myNet1 myNginx

2、把已存在的容器连接到新网络

#创建一个桥接类型的网络
docker network create --driver=bridge --gateway=192.168.137.1 --subnet=192.168.137.0/16 myNet2#为容器连接新的网络
docker network connect myNet2 myNginx#不想用时可以断开网络
docker network disconnect myNet2 myNginx

docker-compose给容器挂载网络

使用docker-compose up -d命令编排一组容器时会默认创建一个网络,并且这组容器全部都会加入到网络当中,容器之间可以直接使用服务名去通信。

如果想要指定网络,可以参考如下配置:

networks:mynet:driver: bridgeipam:config:- subnet: "192.168.0.101/16"gateway: 192.168.0.100

配置好网络后,在每个服务下可以指定使用的网络:

version: '3'
services:nginx:image: nginx:alpinecontainer_name: nginx-devenvironment:- TZ=Asia/Shanghaiports:- "80:80"volumes:- /usr/local/docker/workspace/nginx/html:/usr/share/nginx/html- /usr/local/docker/workspace/nginx/conf/nginx.conf:/etc/nginx/conf.d/default.confnetworks:- mynetnetworks:mynet:driver: bridgeipam:config:- subnet: "192.168.0.101/16"gateway: 192.168.0.100

这样容器编排时,所有容器都会加入到mynet这个自定义网络中。

相关文章:

  • Arrays类讲解
  • 使用bard分析视频内容
  • 3、点亮一个LED
  • Redis的性能,哨兵模式,集群,
  • Selenium 4.11 正式发布--再也不用手动更新chrome driver 了
  • 发挥云计算潜力:Amazon Lightsail 与 Amazon EC2 的综述
  • Spring Boot单元测试
  • Qt 软件调试(一) Log日志调试
  • 腾讯云 小程序 SDK对象存储 COS使用记录,原生小程序写法。
  • 初学vue3与ts:路由跳转带参数
  • 【Spark源码分析】事件总线机制分析
  • 【自动化测试】拍照与闪光灯联动测试
  • 大数据Doris(二十八):Routine Load查看和修改作业
  • mac电脑文件比较工具 UltraCompare 中文for mac
  • 基于springboot和微信小程序的流浪动物管理系统
  • Apache的基本使用
  • Flannel解读
  • If…else
  • JAVA SE 6 GC调优笔记
  • JavaWeb(学习笔记二)
  • JS专题之继承
  • php中curl和soap方式请求服务超时问题
  • React系列之 Redux 架构模式
  • Vue 动态创建 component
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 对超线程几个不同角度的解释
  • 聚簇索引和非聚簇索引
  • 如何胜任知名企业的商业数据分析师?
  • 十年未变!安全,谁之责?(下)
  • 实现简单的正则表达式引擎
  • 使用API自动生成工具优化前端工作流
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 收藏好这篇,别再只说“数据劫持”了
  • 算法---两个栈实现一个队列
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小试R空间处理新库sf
  • 新版博客前端前瞻
  • Mac 上flink的安装与启动
  • PostgreSQL之连接数修改
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​用户画像从0到100的构建思路
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (六)激光线扫描-三维重建
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)VirtualBox安装增强功能
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET上SQLite的连接
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)