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

docker的网络模式

文章目录

  • 一、docker网络
    • 1、实现原理
    • 2、网络模式
      • ①Host模式
      • ②container模式
      • ③None模式
      • ④bridge模式
  • 二、自定义网络
    • 1、查看网络模式列表
    • 2、查看容器详细信息
    • 3、指定分配容器的IP地址
  • 三、暴露端口
  • 四、为容器创建端口映射
    • 1、随机映射端口(32768-65535)
    • 2、指定映射端口

一、docker网络

1、实现原理

①docker使用linux桥接,在宿主机虚拟一个docker的容器网桥docker0.
②docker启动一个容器时会根据网桥的网段分配给容器一个IP地址,称为Container-IP。
③docker网桥时每一个容器的默认网关。同一个宿主机内的容器都接入同一个网桥,这样容器之间就能通过容器的COntainer-IP通信。

2、网络模式

Host:容器不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口
Container:创建的容器不会创建自己的网卡、配置自己的IP,而是和一个指定给的容器共享IP和端口范围。
None:该模式关闭了容器的网络功能。
Bridge:默认为该模式,桥接。此模式会为每一个容器分配、设置IP等,并将容器来年接到一个docker0的虚拟网桥,通过docker0的网段以及iptables的nat表配置与宿主机通信。

①Host模式

使用–net=host指定。相当于VM的桥接模式,与宿主机同一网络,但是没有独立IP。
docker使用linux的Namespace技术来进行资源隔离(6个命名空间)
一个network namespace提供了一个独立的网络环境,包括网卡、路由、iptables规则等,都与其他network namespace隔离。
但是如果启动容器的时候使用host模式,那么这个容器不会获得一个独立的network namespace,而是和宿主机共用一个。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口,此时容器不再拥有隔离性。
在这里插入图片描述

在这里插入图片描述
直接访问宿主机的IP和80端口可以访问到aaa的nginx服务。

②container模式

使用–net=container:NAME_or_ID指定
之歌模式指定新创建的容器和已存在的一个容器共享一个network namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡、配置自己的IP而是和一个指定的容器共享IP、端口范围等。可以在一定程度上节省网络资源,容器内依然不会拥有所有端口。
同样,两个容器除了网络,其他的命名空间还是隔离的。
两个容器的进程可以通过io网卡设备通信。

创建一个容器
在这里插入图片描述
使用container创建新的容器
在这里插入图片描述
在这里插入图片描述

③None模式

使用–net=none指定
使用none模式,docker容器有自己的network namespace,但是并不为docker容器进行任何网络配置,也就是说这个容器没有网卡、IP、路由等信息。容器只有IO回环网络,没有其他网卡。没有联网但是封闭的网络能很好的保证容器的安全性。
该容器完全独立于网络,用户可以根据需要为容器添加网卡。此模式拥有所有端口。
PS:一般不用。

④bridge模式

docker的默认网络模式,不需要写–net参数指定。
当docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连接在一个二层网络模型中。
当容器启动时,从docker0子网中分配一个IP使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth对,veth对组成一个数据的通道,数据从一个设备进入,另一个设备出来。
docker将veth对设备的一端放在新创建的容器中并命名为eth0(容器的网卡)另一端放在主机中,以veth*的格式命名并将此设备加入到docker0网桥中。可以通过brctlshow查看。
在这里插入图片描述
容器之间通过veth对进行访问。
使用docker run -p 时docker实际是在uotables中做dnat规则来实现端口转发功能。可以使用iptables -t nat -vnL查看
在这里插入图片描述

二、自定义网络

1、查看网络模式列表

docker network ls
在这里插入图片描述

2、查看容器详细信息

docker inspect 容器ID/容器名
在这里插入图片描述

3、指定分配容器的IP地址

docker run -itd --name test3 --network bridge --ip 地址
在docker0网络下,只能自动分配。只有新创建一个docker网卡,才可以自己分配IP。
在这里插入图片描述
在这里插入图片描述
指定ip创建容器
在这里插入图片描述
在这里插入图片描述

三、暴露端口

多个容器如果端口相同,对外提供服务的时候会产生地址冲突,所以需要做一个端口映射。
在这里插入图片描述
将容器80端口映射为主机55555端口
在这里插入图片描述
开启容器服务
在这里插入图片描述
访问主机的55555端口

四、为容器创建端口映射

1、随机映射端口(32768-65535)

docker run -d --name 容器名 -P 镜像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、指定映射端口

docker run -d --name 容器名 -p 主机端口:容器端口 镜像
在这里插入图片描述
在这里插入图片描述

相关文章:

  • STM32-TIM定时器与PWM输出
  • 并发编程中的各类锁
  • ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理
  • 双目视觉(双目相机)
  • MySQL/MariaDB 如何查看当前的用户
  • librosa 语音识别 学习笔记
  • 使用HTML5画布(Canvas)模拟图层(Layers)效果
  • InnoDB高级特性篇(5)-使用InnoDB的全文索引
  • Windows中的Git Bash运行conda命令:未找到命令的错误(已解决)
  • QT C++实战:实现用户登录页面及多个界面跳转
  • ICASSP2024 | MLCA-AVSR: 基于多层交叉注意力机制的视听语音识别
  • 数据分析之数据预处理、分许建模、可视化
  • 集中供暖热计量温控一体化管理系统
  • mybatis案例--mapper代理开发
  • 【程序运行时的两种环境】
  • vue的相关概念
  • python驾到~障碍通通闪开,美女批量入内存~
  • 【UV打印机】RYPC打印软件教程(六)-系统维护
  • 数据库语句的基本
  • 【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(1)
  • 【MATLAB教程案例25】常用图像变换域的matlab仿真分析——DFT频域,DCT域,小波域等
  • VcXsrv XLaunch 闪退 failed to bind listener 的解决方法
  • 一些特殊SQL使用Mybatis的#{}和${}注意点
  • rpcs3模拟器配置要求是什么?
  • paddleNLP 安装
  • 【算法笔记】位运算详解
  • 《设计模式》装饰者模式
  • SpringBoot--在Entity(DAO)中使用枚举类型
  • Session(服务端会话跟踪技术)
  • CVPR2022 BatchFormer
  • EXCEL中ADDRESS函数的使用
  • libtorch c++ 搭建分类网络进行训练和预测