【docker】网络模式管理

news2024/11/18 7:39:15

目录

一、Docker网络实现原理

二、Docker的网络模式

1、host模式

1.1 host模式原理

1.2 host模式实操

2、Container模式

2.2 container模式实操

3、none模式

4、bridger模式

4.1 bridge模式的原理

4.2 bridge实操

5、overlay模式

6、自定义网络模式

6.1 为什么需要自定义网络模式?

6.2 创建自定义网络

6.3 删除docker网络

6.4 创建指定容器的ip


一、Docker网络实现原理

暴露端口

  • docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),docker启动一个容器时会根据Docker网桥的网段分配一个IP地址,称为Container-IP
  • 同时Docker网桥是每个容器的默认网关,因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能通过容器的Container-IP直接通信。

  • Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。

  • 如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启动,访问容器的时候就通过【宿主机IP】:【容器端口】访问容器。

docker run -d --name test1 -P nginx
#(大写P)启动容器时,将容器端口递增映射到主机上(端口范围为49153开始,后面自增)

                       (宿主机的端口:容器端口)
docker run -d --name test2 -p 55555:80 nginx
#(小写p)启动容器时,将容器端口映射为主机端口的55555端口

//后面都没有加/bin/bash,为啥?
//加了/bin/bash后,会影响到commad(命令),镜像里面的命令默认是启动nginx,加了/bin/bash后,相当于有多条命令,但是它只会执行一台命令,所有就不执行启动nginx的命令。
//如果加了/bin/bash,那怎么启动容器中的nginx呢?
#可以直接进入容器执行nginx启动,或则 docker exec -it 【容器名】 /bin/bash -c "nginx"

还可以查看iptables的映射关系

iptables -nL -nat

然后可在浏览器访问宿主机ip加映射的端口

查看容器日志信息

docker logs 【容器ID】

或者

cd /var/lib/docker/containers/
目录下找到指定的容器ID目录,然后进入找到一个json.log的文件,这里面也会存在日志,平常删除,直接删除这里面即可。

二、Docker的网络模式

Host : 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和指定的容器共享IP、端口范围。

None: 该模式关闭了容器的网络功能

Bridge: 默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat表配置与宿主通信。

自定义网络 :自己创建一个虚拟网桥,可以任意分配容器的ip地址。

安装Docker时,他会自动创建三个网络:Bridge(默认)、none、host

docker network ls 

#或 都可以查看docker网络列表

docker network list

使用docker run 创建Docker容器时,可以用–net 或 --network 选项指定容器的网络模式

  • Host模式: 使用–net=host指定
  • none模式: 使用–net=node指定
  • container模式: 使用–net=container:NAME_or_ID 指定
  • bridge模式: 使用–net=bridge指定,默认设置,可省略

1、host模式

1.1 host模式原理
  • 相当于VMware中的桥接模式,与宿主机在同一个网络,但没有独立IP。

  • docker使用了linux的Namespaces技术来资源隔离,如PID namespace隔离进程,mount namespace隔离文件系统,network namespace隔离网络等

  • 一个network namespace提供了一份独立的网络环境,包括网卡,路由,iptable规则等都与其它的network namespace隔离,一个docker容器一般会分配一个独立的network namespace,但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的network namespace,而是和宿主机共用一个network namespace,容器将不会虚拟出自己的网卡,配置自己的ip等,而是宿主机的ip和端口。

  • host模式,容器的端口就相当于主机的端口,容器和主机之间一开localhost通信。

特点

  • 安全性可能存在偏差,不如bridge高。
  • 端口使用率较少,共用端口,不能重复
  • 不需要映射iptables规则,容器端口,相当于主机端口

1.2 host模式实操
docker run -d --name web1 --net-host nginx
#创建容器web1,指定网络模式为host

firefox http://20.0.0.55:80
#访问宿主机的ip和80端口,则可以访问到web3的nginx服务

2、Container模式

  • container模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机共享。

  • 新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等,同样,两个容器除了网络方面其它的如文件系统,进程列表等还是隔离的。

  • 两个容器的进程可以通过lo网卡设备通信.

特点

  • 节省网络资源
  • 容器内部的端口,还是共用。使用率较少。

2.2 container模式实操
docker run -itd --name test1 centos:7 /bin/bash
#基于镜像centos:7创建一个名为test1的容器

docker inspect -f '{{.State.Pid}}' test1
#查看容器的pid号

ls -l /proc/pid号/ns
#查看该容器的命名空间编号

docker run -itd --name test2 --net=container:test1 centos:7
#创建test2容器,使用container模式,和test1共享network namespace

dcoker inspect -f '{{.State.Pid}}' test2
#查看test2容器的pid

ls -l /proc/pid号/ns
#查看该容器的命令空间编号

3、none模式

  • 使用none模式,Docker容器拥有自己的network namespace,但是,并不为docker容器进行任何网络配置。

  • 也就是说,这个docker容器没有网卡,IP、路由等信息,这种网络模式下容器只有lo回环网络。没有其它网卡。这种类型的网络没有办法联网

  • 该容器将完全独立于网络,用户可以根据需要为容器添加网卡,此模式拥有所有端口。

特点

  • 安全,完全隔离

4、bridger模式

4.1 bridge模式的原理

bridge模式是docker 的默认网络模式。不同–net参数,就是bridge模式

相当于Vmware中的nat模式。容器使用独立network namespace,并连接到docker0 虚拟网卡,通过dcoker0网桥以及iptables nat表配置与宿主机通信 , 此模式会为每一个容器分配 network namespace,设置ip等,并将一个主机上的docker容器连接到一个虚拟网桥上。

  • 当docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上, 虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
  • 从docker0子网中分配一个ip给容器使用,并设置docker0的ip地址为容器的默认网关, 在主机上创建一对虚拟网卡veth pair设备。veth设备总是 成对出现,他们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来 , 因此veth设备常用来连接两个网络设备。
     
  • docker将veth pari 设备的一端放在新创建的容器中,并命令为eth0(容器的网卡),另一端放在主机中,以 veth* 这样类似的名字命名,并将这个网络设备加入到docker0网桥中, 可以通过brctl show 命令查看。
  • 使用docker run -p 时,docker实际是在ipyables做了DNAT规则,实现端口转发功能, 可以使用iptables -t nat -vnL 查看。

特点

  • 容器都有自己的network,端口
  • 需要veth对来连接容器和host主机
  • 需要通过iptables来映射容器端口到主机上。

4.2 bridge实操
docker run -itd --name test3 centos:7 /bin/bash
#创建时,不需要指定网络模式。默认即可

docker inspect test3 |grep -i 'networkmode'
#过滤出网络模式

5、overlay模式

overlay网路模式是一种叠加式的网络模式。

  • 使用外部的服务组件作为网关和代理,例如ingress。
  • 一般和docker-swarm结合

6、自定义网络模式

6.1 为什么需要自定义网络模式?
  • 因为在我们使用bridge模式的时候,是无法支持指定IP运行docker的,
docker run -itd --name test4 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
#启动一个容器,指定为bridge模式,并且指定该容器的ip为172.17.0.10.

所以说!bridge无法手动指定容器的ip,只能依靠docker0来分配,这也太智能了吧!!

6.2 创建自定义网络

因为前面讲了,不能自定义创建容器的ip地址,全是docker0所安排的,既然这样,那我们就自己创建一个docker0出来,但是名字不能重复,ip 也不能。创建出来的默认也是bridge模式。想自定义其它网络的也可以。

特点

  • 可以自定网桥ip,自定义容器的ip。
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
#创建指定的网桥的ip地址和名称,以及显示的网络模式名称


//docker1为执行ifconfig -a 命令时,显示的网卡名,如果不使用 --opt 参数指定此名称,那你在使用ifconfig -a 命令查看网络信息时,看到的是类似 br-110add5ad5fsef 这样的名字,这显然不好记。
//mynetwork 为执行docker network list 命令时,显示的bridge网络模式名称。

6.3 删除docker网络
docker network ls
#查看所有网卡和他的id

docker network rm 【网卡ID】
#删除某个指定的网卡

6.4 创建指定容器的ip
docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

#创建启动容器,网络模式指向myneywork(可以不加=),并给予指定ip地址。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu20 编译 Android 12源码

1.安装基础库 推荐使用 Ubuntu 20.04 及以上版本编译,会少不少麻烦,以下是我的虚拟机配置 执行命令安装依赖库 // 第一步执行 update sudo apt-get update//安装相关依赖sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-de…

【c++】入门3

引用 1.swap交换两个变量值的时候可以用引用 2.例题中通过前序遍历数组构建二叉树&#xff0c;可以用引用传别名. #include <stdio.h> #include <stdlib.h> typedef struct BinaryTreeNode {char data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; …

数据库设计——DML

D M L \huge{DML} DML DML&#xff1a;数据库操作语言&#xff0c;用来对数据库中的数据进行增删改查。 增&#xff08;INSERT&#xff09; 使用insert来向数据库中增加数据。 示例&#xff1a; -- DML : 数据操作语言 -- DML : 插入数据 - insert -- 1. 为 tb_emp 表的 us…

烟花燃放如何管控?智能分析网关V4烟火检测保障烟火安全

一、方案背景 随着元旦佳节的热潮退去&#xff0c;春节也即将来临&#xff0c;在众多传统的中国节日里&#xff0c;烟花与烧纸祭祀都是必不可少的&#xff0c;一方面表达了人们对节日的庆祝的期许&#xff0c;另一方面也是一种对故者思念的寄托。烟花爆竹的燃放不仅存在着巨大的…

SparkSQL基础解析(三)

1、 Spark SQL概述 1.1什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块&#xff0c;它提供了2个编程抽象&#xff1a;DataFrame和 DataSet&#xff0c;并且作为分布式SQL查询引擎的作用。 我们已经学习了Hive&#xff0c;它是将Hive SQL转换成MapReduce然后提…

【springboot+vue项目(十一)】springboot整合EasyExcel

EasyExcel是阿里巴巴开源的一个Java库&#xff0c;用于操作Excel文件。它提供了简单易用的API&#xff0c;可以读取、写入和转换Excel文件&#xff0c;支持大量数据的导入和导出操作。 一、添加依赖&#xff08;版本3.2&#xff09; <!--easyexcel操作excel--> <depe…

风靡全网的Jmeter+ant+jenkins接口自动化测试框架

大致思路&#xff1a;Jmeter可以做接口测试&#xff0c;也能做压力测试&#xff0c;而且是开源软件&#xff1b;Ant是基于Java的构建工具&#xff0c;完成脚本执行并收集结果生成报告&#xff0c;可以跨平台&#xff0c;Jenkins是持续集成工具。将这三者结合起来可以搭建一套We…

Prometheus 不能访问k8s的中的一些metrics的问题(controller-manager、scheduler、etcd)

主要有三个点 controller-manager、scheduler、etcd 参考&#xff1a; https://www.cnblogs.com/ltaodream/p/15448953.html kube-scheduler 在每台master节点执行 vim /etc/kubernetes/manifests/kube-scheduler.yaml 将 --bind-address127.0.0.1 改为 --bind-address…

基于SSM框架的宠物商城系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 功能模块&…

软件测试|一篇文章带你深入理解SQL约束

深入理解SQL约束&#xff1a;保障数据完整性和一致性的重要工具 SQL约束是在关系型数据库中用于保障数据完整性和一致性的重要工具。本文将深入探讨SQL约束的概念、类型以及应用&#xff0c;以帮助读者更好地理解和使用SQL约束来确保数据库中的数据质量。 SQL约束 约束&…

vue动态组件、保持存活

加 component :is 引入组件名称 <component :is"tabcom"></component> keep-alive 保持存活 <keep-alive> <component :is"tabcom"></component></keep-alive> 保持存活&#xff1a;切换组件后&#xff0c;不重…

人机交互主板定制_基于MT8735安卓核心板的自助查询机方案

人机交互主板是一种商显智能终端主板&#xff0c;广泛应用于广告机、工控一体机、教学一体机、智能自助终端、考勤机、智能零售终端、O2O智能设备、取号机、计算机视觉、医疗健康设备、机器人设备等领域。 人机交互主板采用联发科MTK8735芯片平台&#xff0c;四核Cortex-A53架构…

Sectigo与Geotrust ov多域名证书的区别

Sectigo和Geotrust都是比较知名的CA认证机构。其中&#xff0c;Sectigo原名Comodo&#xff0c;在2018年整合SSL证书业务&#xff0c;改名为Sectigo&#xff0c;旗下的SSL证书产品根证书也变为Sectigo。Geotrust则是另一个备受信任的数字证书品牌&#xff0c;现在是Digicert旗下…

Python Gradio构建简单的交互界面

Gradio 是一个用于构建机器学习和数据科学的交互式应用程序的 Python 库&#xff0c;但是我们可以用它来构建一些简单的交互界面&#xff0c;其代码之简单令人震惊 文本输入输出 import gradio as grdef szu(text):return textinterface gr.Interface(fnszu, inputs"text…

43 tmpfs/devtmpfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…

keras 深度学习框架实现 手写数字识别

阅读本文之前&#xff0c;请先参考--------win10搭建keras深度学习框架 安装运行环境 阅读本文之前&#xff0c;请先参考--------keras人工智能框架 MNIST 数据集 随机展示 查看训练图片 完整代码如下图&#xff1a; 在sublimeText中 使用ctrlB运行代码&#xff0c;结果如…

没有一家车企能绕开「数据闭环」

作者 |张祥威 编辑 |德新 2023年&#xff0c;在比亚迪那次公布智驾数据规模后&#xff0c;智能化下半场的战斗就正式打响了。 如今&#xff0c;自动驾驶正在沿着特斯拉提出的「BEVTransformer」急速推进&#xff0c;这条技术路线短短几年就得到了验证&#xff0c;随着智驾起较…

报表控件Stimulsoft 2023回顾:都做了哪些产品的改变?

在2023年过去一年中&#xff0c;报表控件Stimulsoft 针各类控件都做了重大改变&#xff0c;其中新增了某些产品、同时加强了很多产品的性能和UI设计&#xff0c;更加符合开发者需求&#xff0c;下面就跟随小编一起来回顾&#xff0c;具体都有哪些↓↓↓ Stimulsoft Ultimate &…

静图如何做成动态gif图?手把手教你一招制作

我们在跟小伙伴聊天时&#xff0c;都会发送gif动图&#xff0c;能够让我们的心情更加开心。当我们找不到合适的图片时&#xff0c;就可以自己制作专属于自己的gif动图&#xff0c;那么怎能操作呢&#xff1f;很简单&#xff0c;通过使用gif在线生成&#xff08;https://www.gif…

MIT_线性代数笔记:第 24 讲 马尔可夫矩阵;傅里叶级数

目录 马尔可夫矩阵 Markov matrices傅里叶级数 Fourier series 本讲学习马尔可夫矩阵和傅里叶级数&#xff0c;两者是关于特征值和投影矩阵的应用。 马尔可夫矩阵 Markov matrices A [ 0.1 0.01 0.3 0.2 0.99 0.3 0.7 0 0.4 ] A \begin{bmatrix} 0.1 & 0.01 & 0.3 \\…