C06S02-Docker网络和资源限制

一、Docker网络模式

1. 桥接模式

Docker的默认网络模式,工作在第二层,也就是数据链路层。

  1. 启动Docker的时候会在宿主机上创建一个虚拟的网桥,工作方式类似于交换机。
  2. 创建容器的时候,会分配一个和网桥相同网段的IP地址给容器使用,网桥IP地址作为这个网段的网关。容器被删除时,IP地址会被回收。
  3. 容器运行时,会生成一对Veth Pair虚拟网络接口设备。一端连在网桥上,一端连在容器上,从而实现容器和主机之间的通信。
  4. 容器之间通过IP地址直接通信,不同的容器在同一个网段,通过Veth Piar连接在同一个网桥上。

2. Host模式

容器和宿主机共享一个Network命名空间,容器不会生成虚拟的网卡、也不会配置IP地址,而是与宿主机共享网络端口和IP地址。

配置Host模式的基本命令如下。

docker run -itd --network host 镜像名称[:镜像标签] 
  • –network:用于配置容器的网络模式,这里是host模式。

3. Container模式

所有容器共享一个Network命名空间,新建的容器不会创建自己的虚拟网卡和IP地址,而是和已有的容器共享网络端口和IP地址,除网络外,其他资源也还是互相隔离的。

配置Container模式的基本命令如下。

docker run -itd --network container 镜像名称[:镜像标签] 

4. None模式

容器有单独的命名空间,但是没有虚拟网卡、IP地址等网络配置,只有一个回环地址。也就是说,不能访问外部网络,也不能被外部网络访问,这种模式常用于测试。

配置Container模式的基本命令如下。

docker run -itd --network none 镜像名称[:镜像标签] 

5. 自定义模式

用户可以自定义创建一个虚拟网桥,指定网桥的网段范围。只有先创建了自定义网桥,才能够给容器分配指定的IP地址。

配置自定义模式的基本流程如下。

# 先自定义网络,设置IP范围
docker network create --subnet=子网范围 --opt "com.docker.network.bridge.name"="网卡名称" 网络名称# 在创建并运行容器的同时,指定容器的IP
docker run -itd --network 网络名称 --ip 自定义IP地址 镜像名称[:镜像标签] 
  • –subnet:用于设置自定义网络的子网范围,采用CIDR写法。
  • –opt:用于设置自定义网络的特定配置。这里的com.docker.network.bridge.name是用于设置自定义网络的虚拟网卡名称。如果不设置,Docker会自动生成一个。

二、Docker资源限制

1. Cgroups概述

Cgroups是Linux内核实现资源限制的一种机制,而Docker正是通过Cgroups来进行资源的限制,主要限制包括CPU资源限制、内存资源限制、磁盘资源限制,其中最为常用的是CPU和内存的资源限制。

2. CPU资源限制

2.1 设置CPU使用率

Linux通过CFS (Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用,默认的CPU调度时间是100000微秒(100毫秒)。CFS的调度时间范围是1毫秒至1秒,也就是1000微秒至1000000微秒,CPU的使用时间不得小于1000微秒。

  • –cpu-period:设置CFS调度CPU的时间,单位是微秒,范围是1000—1000000。
  • –cpu-quota:设置容器对CPU的使用时间,单位是微秒,常用限制配置。数值不小于1000,不大于调度时间。
docker run -itd --name 容器名称 --cpu-quota 使用时间 镜像名称[:镜像标签]

2.2 设置CPU资源权重

通过–cpu-share来设置容器对CPU的使用权重,通常是1024的倍数,默认值是1024。只有多个容器同时设置了权重才能够生效。

docker run -itd --name 容器名称 --cpu-share 使用权重 镜像名称[:镜像标签]

2.3 设置指定CPU核

通过–cpuset-cpus来设置容器所使用的CPU核,CPU的核索引从0开始,指定多个核则用逗号分隔。

docker run -itd --name 容器名称 --cpuset-cpus 核索引 镜像名称[:镜像标签]

3. 内存资源限制

3.1 设置容器内存大小

通过–memory来设置容器的内存大小,数值后需要带单位,比如M表示MB、G表示GB。

docker run -itd --name 容器名称 --memory 内存大小 镜像名称[:镜像标签]

3.2 设置容器交换空间大小

通过–memory-swap来设置容器的交换空间大小,要和–memory一起使用,并且设置的数值大小要包括容器的内存大小。比如–memory 512M --memory-swap 1G的含义是:容器的物理内存是512MB、可使用的交换空间是1GB-512MB=512MB。

docker run -itd --name 容器名称 --memory 内存大小 --memory-swap 交换空间大小 镜像名称[:镜像标签]
  • 如果两个设置的值相同,则表示容器无法使用交换空间。
  • —memory-swap的值设置为-1表示交换空间大小不受限,宿主机有多大交换空间,容器就可以使用多大的交换空间。

4. 磁盘资源限制

通常情况下,不会限制容器对磁盘资源的使用。通过–device-read-bps和–device-write-bps来设置对容器的读数据、写数据的速度。

docker run -itd --name 容器名称 -device-read-bps 磁盘设备:速度大小 --device-write-bps 磁盘设备:速度大小 镜像名称[:镜像标签]

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

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

相关文章

Oracle(windows安装遇到的ORA-12545、ORA-12154、ORA-12541、ORA-12514等问题)

其实出现该问题就是监听或者服务没有配好。 G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMINlistener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME CLRExtProc)(ORACLE_HOME G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\d…

Mac上搭建k8s环境——Minikube

1、在mac上安装Minikube可执行程序 brew cask install minikub 安装后使用minikube version命令查看版本 2、安装docker环境 brew install --cask --appdir/Applications docker #安装docker open -a Docker #启动docker 3、安装kubectl curl -LO https://storage.g…

PostgreSQL 中进行数据导入和导出

在数据库管理中,数据的导入和导出是非常常见的操作。特别是在 PostgreSQL 中,提供了多种工具和方法来实现数据的有效管理。无论是备份数据,还是将数据迁移到其他数据库,或是进行数据分析,掌握数据导入和导出的技巧都是…

【Gitlab】虚拟机硬盘文件丢失,通过xx-flat.vmdk恢复方法

前言 由于近期过年回家,为了用电安全直接手动关闭了所有的电源,导致年后回来商上电开机后exsi上的虚拟机出现了问题。显示我的gitlab虚拟机异常。 恢复 开机之后虚拟机异常,通过磁盘浏览发现gitlab服务器下面的虚拟机磁盘文件只有一个xxx-f…

python的ruff简单使用

Ruff 是一个用 Rust 编写的高性能 Python 静态分析工具和代码格式化工具。它旨在提供快速的代码检查和格式化功能,同时支持丰富的配置选项和与现有工具的兼容性。ruff是用rust实现的python Linter&Formatter。 安装: conda install -c conda-forge…

第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)

简单来说, Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类,旅客(线程)分别手持登机牌和身份证接受工作人员的检查,示例代码如所示。…

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么,有存就有取 在取值的时候,报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中:LoginUser u…

简述mysql 主从复制原理及其工作过程,配置一主两从并验证。

MySQL 主从复制工作过程 1、二进制日志记录(Binary Logging): 主服务器开启二进制日志记录功能,将所有更改数据的操作(如 INSERT、UPDATE、DELETE)记录到二进制日志文件中。 2、日志传输(Log…

Python Pandas(3):DataFrame

1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构,类似于一个二维的表格或数据库中的数据表。它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由…

Windows Docker笔记-安装docker

安装环境 操作系统:Windows 11 家庭中文版 docker版本:Docker Desktop version: 4.36.0 (175267) 注意: Docker Desktop 支持以下Windows操作系统: 支持的版本:Windows 10(家庭版、专业版、企业版、教育…

Android学习20 -- 手搓App2(Gradle)

1 前言 昨天写了一个完全手搓的:Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt,d8这些来搞。其实不想弄Gradle的,不过想着既然开始了,就多看一些。之前写过一篇Gradle,不过是最简单的编译,不涉…

团建 蓝桥杯省a 15

问题描述 小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 nn 和 mm 的树,树上的每个结点上有一个正整数权值。 两个人需要从各自树的根结点 1 出发走向某个叶结点,从根到这个叶结点的路径上经过的所…

vscode 如何通过Continue引入AI 助手deepseek

第一步: 在deepseek 官网上注册账号,得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步: 打开vscode,在插件市场安装Continue插件, 点击设置,添加deepseek模型,默认…

计算机网络——三种交换技术

目录 电路交换——用于电话网络 电路交换的优点: 电路交换的缺点: 报文交换——用于电报网络 报文交换的优点: 报文交换的缺点: 分组交换——用于现代计算机网络 分组交换的优点: 分组交换的缺点 电路交换——…

PostgreSQL函数自动Commit/Rollback所带来的问题

一、综述 今天在PostgreSQL遇到一个奇怪的现象,简而言之,是想用函数(存储过程)实现插入记录,整个过程没报错但事后却没找到记录!忙活半天,才发现原因是PostgreSQL函数(存储过程&…

linux 进程补充

环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪 里,但是照样可以链接成功&#…

Spring Boot常用注解深度解析:从入门到精通

今天,这篇文章带你将深入理解Spring Boot中30常用注解,通过代码示例和关系图,帮助你彻底掌握Spring核心注解的使用场景和内在联系。 一、启动类与核心注解 1.1 SpringBootApplication 组合注解: SpringBootApplication Confi…

前部分知识复习05

一、多级渐远贴图MipMap 选择贴图,可以勾选贴图的多级渐远效果 [IntRange]_MipMap("MipMap",Range(0,12))0 //多级渐远贴图的LOD调节滑杆 _MipMapTexture("MipMapTexture",2D)"white"{} //定义多级渐远贴图 多级渐远贴图的采样…

解锁反序列化漏洞:从原理到防护的安全指南

目录 前言 一、什么是反序列化 二、反序列化漏洞原理 三、反序列化漏洞的危害 (一)任意代码执行 (二)权限提升 (三)数据泄露与篡改 四、常见的反序列化漏洞场景 (一)PHP 反…

理解 C 与 C++ 中的 const 常量与数组大小的关系

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯数组大小的常量要求💯C 语言中的数组大小要求💯C 中的数组大小要求💯为什么 C 中 const 变量可以作为数组大小💯进一步的…