Docker容器引擎(2)

目录

一.批量删除镜像,容器

二.Docker 网络实现原理

随机映射端口(从32768开始)

访问自己:

在10服务器上配置路由转发:

指定映射端口:

查看容器的输出和日志信息:

将宿主机目标|文件挂载到容器的数据卷:

先在宿主机上添加文件:

​编辑

创建只能读的权限的容器:

创建共享数据卷容器的数据卷:​编辑

可实现在容器内通过目标容器名或连接别名与目标容器通信:

三.docker网络模式

设置容器的网络模式:

创建网络模式:

查看c1容器进程号:

查看c3容器进程号:

四.资源控制

1.CPU 资源控制

进入id号中,查看容器进程能够使用的最大CPU时间 cpu.cfs_quota_us 文件:

查看单个CPU调度周期时间 cpu.cfs_period_us文件:

进行CPU压力测试:

设置50%的比例分配CPU使用时间上限:

设置多个容器的CPU占用份额(只能在多个容器同时运行且CPU资源紧张时生效):

分别进入容器,进行压力测试

​编辑​编辑​编辑

​编辑

​编辑

​编辑

​编辑

将t改为2:

​编辑

​编辑

设置容器绑定指定的CPU


一.批量删除镜像,容器

格式:docker rm [-f] 容器ID/名称

docker images | awk 'NR>=2{print "docker rmi "$3}' | bash

docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash    


docker rm $(docker ps -a -q)   :批量清理后台停止的容器

二.Docker 网络实现原理

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。

随机映射端口(从32768开始)
 

docker run -d --name test1 -P nginx

访问自己:

另一台服务器访问会卡顿,需要开启路由转发:

在10服务器上配置路由转发:

再次访问:

指定映射端口:

docker run -d --name test2 -p 43000:80 nginx

查看容器的输出和日志信息:

docker logs 容器的ID/名称

将宿主机目标|文件挂载到容器的数据卷:

docker run -d  -v 宿主机绝对路径:容器绝对路径[:ro] : 将宿主机目标|文件挂载到容器的数据卷:[权限]

docker run -d   --volumes-from 数据卷容器名 :  共享数据卷容器的数据卷

先在宿主机上添加文件:

进入容器test3中看下:

可以给文件进行写入查看:

 

创建只能读的权限的容器:

创建共享数据卷容器的数据卷:

可实现在容器内通过目标容器名或连接别名与目标容器通信:

docker run -d   --link 目标容器名:连接别名

docker inspect c1 |grep -i ipaddress

删除c1,在创建c1:

创建容器与目标容器通信:

三.docker网络模式


bridge


docker的默认网络模式。使用此模式的每个容器都有独立的网络命名空间namespace,即每个容器都有独立的IP、端口范围(每个容器可以用同一个端口)、路由、iptables规则等网络资源。
docker run [--network=bridge] ....

host


容器与宿主机共享网络namespace,即容器和宿主机使用同一个IP、端口范围(容器与宿主机或其它使用host模式的容器不能用同一个端口)、路由、iptables规则等网络资源。
docker run --network=host ....

container


和指定已存在的容器共享网络namespace,即这两个容器使用同一个IP、端口范围(容器与指定的容器不能用同一个端口)、路由、iptables规则等网络资源。
docker run --network=container:容器名|容器ID ....

none


每个容器都有独立的网络namespace,但是容器没有自己的eth0网卡、IP、端口等,只有lo网卡。
docker run --network=none ....

自定义网络


可以用来自定义创建一个网段、网桥、网络模式,从而可以创建容器时自定义容器IP
docker network create --subnet 自定义网段 --opt "com.docker.network.bridge.name"="自定义网桥名"  自定义网络模式名
docker run --network 自定义网络模式名  --ip 自定义容器IP ....

设置容器的网络模式:

docker run -d  --network bridge|host|none|container:容器名或ID

查看当前的网络模式:

删除所有容器:

创建网络模式:

默认bridge模式,container模式:

c2 与c1共享一个ip端口,c1的80端口开启了,c2就不行。

查看c1容器进程号:

docker inspect -f '{{.State.Pid}}'  容器名/id

创建c3:

查看ip号:

查看容器的进程、网络、文件系统等命名空间编号:

查看c3容器进程号:

none模式:

四.资源控制

Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。

cgroup资源限制(限制容器进程对CPU 内存 磁盘IO 等资源的最大使用量)

1.CPU 资源控制

设置CPU使用率上限:

Linux通过CFS(Completely Fair Scheduler,完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。
我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少 CPU 时间。
 

docker run -itd --name test5 centos:7 /bin/bash

cd /sys/fs/cgroup/cpu/docker:查看容器的id位置

进入id号中,查看容器进程能够使用的最大CPU时间 cpu.cfs_quota_us 文件:

表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。

如果设为50000,表示占用50000/100000=50%的CPU。

查看单个CPU调度周期时间 cpu.cfs_period_us文件:

cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。

进行CPU压力测试:

docker exec -it   容器名/id /bin/bash :进入容器

写个脚本:

#!/bin/bash
i=0
while true
do
let i++
done

赋予权限:

执行脚本:

开个终端测试查看一下:

可以看到这个脚本占了很多的cpu资源。

设置50%的比例分配CPU使用时间上限:

可以重新创建一个容器并设置限额:

docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash

查看下test6的限额:

看下占用情况:

控制到50%左右。

设置多个容器的CPU占用份额(只能在多个容器同时运行且CPU资源紧张时生效):

docker run  -itd --name 容器名  --cpu-shares 容器进程最大占用CPU的份额(值为1024的倍数)  镜像

分别进入容器,进行压力测试

测试:

将t改为2:

可以看到在 CPU 进行时间片分配的时候,容器 c2 比容器 c1 多一倍的机会获得 CPU 的时间片。

设置容器绑定指定的CPU

docker run -itd --name test8 -m 512m centos:7 /bin/bash

如果 --memory-swap 设置为 0 或者 不设置,则容器可以使用的 swap 大小为 -m 值的两倍。
如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap。
如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,而可以使用的 swap 空间使用不受限制(宿主机有多少 swap 容器就可以使用多少)。

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

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

相关文章

RabbitMQ中交换机的应用及原理,案例的实现

目录 一、介绍 1. 概述 2. 作用及优势 3. 工作原理 二、交换机Exchange 1. Direct 2. Topic 3. Fanout 三、代码案例 消费者代码 1. 直连direct 生产者代码 测试 2. 主题topic 生产者代码 测试 3. 扇形fanout 生产者代码 测试 每篇一获 一、介绍 1. …

Vue的生命周期方法

beforeCreate 在实例初始化之后,数据观测(data observe)和 event/watcher 事件配置之前被调用。在当前阶段 data、methods、computed 以及 watch 上的数据和方法都不能被访问。 created 实例已经创建完成之后被调用。在这一步,实…

【JavaEE进阶】 MyBatis使用注解实现增删改查

文章目录 🍃前言🌴传递参数🎋增(Insert)🚩返回主键 🎄删(Delete)🌲改(Update)🌳查(Select)🚩起别名🚩结果映射🚩开启驼峰命名(推荐使用) ⭕总结 &#x1f343…

[UI5 常用控件] 01.Text

文章目录 前言1. 普通文本2. 长文本:3. 设置最大显示行数 ( maxLines3 )4. 单行显示 ( wrappingfalse )5. 显示空白符 ( renderWhitespacetrue )6. 使用 - 连接单词:只适用于英文 ( wrappingTypeHyphenated )7. 空白时使用 - 代替 ( emptyIndicatorModeOn )8. JSON数…

2024年需要重点关注的15种计算机病毒

2024年,计算机病毒威胁变得愈发多元化和复杂化。涉及勒索病毒、二维码病毒、挖矿木马等15种类型,这些病毒从数据勒索到系统入侵,对全球网络安全构成严峻挑战。 2024年,计算机病毒威胁变得愈发多元化和复杂化。涉及勒索病毒、二维码…

【网络安全】常见的网络威胁有哪些?

随着互联网的快速发展,网络安全问题日益凸显。常见的网络威胁包括病毒、木马、恶意软件等。这些威胁不仅会影响计算机的安全运行,还会窃取用户的个人信息,造成巨大的损失。因此,我们需要采取一些措施来保护自己的网络安全。 常见的…

android 图片添加水印

android 图片添加水印 本文主要讲下android 中如何给图片添加水印. 在Android中给图片添加水印可以使用Bitmap、Matrix和Canvas类的方法来实现. private Bitmap addWater() {// 加载原始图片Bitmap sourceBitmap BitmapFactory.decodeResource(getResources(), R.mipmap.sou…

Vue+OpenLayers7:OpenLayers7地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 本章讲解OpenLayers7地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系等配置。 前言 OpenLayers7地图初始化时如何设置默认缩放级别、初始化时设置默认地图中心点、设置…

启动mitmproxy报错 ImportError: cannot import name ‘url_quote‘ from ‘werkzeug.urls‘

报错截图 ImportError: cannot import name url_quote from werkzeug.urls (d:\soft\python\python38\lib\site-packages\werkzeug\urls.py) 原因是Werkzeug版本不兼容导致 解决方法 pip install Werkzeug2.2.2

大数据学习之Flink算子、了解(Source)源算子(基础篇二)

Source源算子(基础篇二) 目录 Source源算子(基础篇二) 二、源算子(source) 1. 准备工作 2.从集合中读取数据 可以使用代码中的fromCollection()方法直接读取列表 也可以使用代码中的fromElements()方…

北斗短报文DTU 北斗通信DTU无线数传终端

北斗是我国自主建设的卫星导航系统,被广泛应用于全球定位、导航和时间同步等领域。随着物联网的迅猛发展,北斗短报文DTU作为物联网连接的关键技术,成为了各行各业的热门话题。 ** 一、北斗短报文DTU的概念与特点 **   北斗短报文DTU(Data…

二叉树知识

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 二、二叉树初始知识 题目 源于做的一道牛课题 若一颗完全二叉树中某节点无左孩子,则该节点是 A、高度为1的节点 B、高度为2的节点…

Redis持久化和集群架构

目录 Redis持久化 RDB快照(snapshot) RDB优点 RDB缺点 RDB的触发机制 AOF持久化 AOF文件重写 AOF触发机制 混合模式 Redis主从架构 Redis哨兵高可用架构 Redis Cluster架构 槽位定位算法 跳转重定位 Redis集群节点间的通信机制 Redis持久化…

在 MATLAB 中注释多行

使用 MATLAB 中的注释块注释多行代码 要注释一行或两行代码,我们可以使用%字符来完成。但是,如果我们必须注释多行代码,则此方法将花费大量时间。我们可以使用注释块来注释多行代码,而不是使用%来注释多行代码。写在该块中的任何…

【数学建模】综合评价方法

文章目录 综合评价的基本理论和数据预处理综合评价的基本概念综合评价体系的构建综合指标的预处理方法评价指标预处理示例 常用的综合评价数学模型线性加权综合评价模型TOPSIS法灰色关联度分析熵值法秩和比(RSR)法综合评价示例 综合评价的基本理论和数据…

【学网攻】 第(3)节 -- 交换机配置聚合端口

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资源得以自由流动。随着互联网的发展,我们可以通过网络学习、工作、娱乐…

精品基于Uniapp+springboot自习室预约系统App教室阅览室

《[含文档PPT源码等]精品基于Uniappspringboot自习室预约系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:springboot、ssm 安…

【数据库连接】连接sqlite3报错:go-sqlite3 requires cgo to work. This is a stub

报错信息 register db Ping default, Binary was compiled with ‘CGO_ENABLED0’, go-sqlite3 requires cgo to work. This is a stubWindows解决办法 新建环境变量 新报错 Failed to build the application: # runtime/cgo cgo: C compiler “gcc” not found: exec: “gc…

IaC基础设施即代码:Terraform 连接 tencentcloud COS 实现多资源管理

目录 一、实验 1.环境 2.Terraform 连接 tencentcloud 腾讯云COS 3.申请VPC专有网络资源 4.申请安全组资源 5.申请CVM资源 6.申请CLB资源 7.申请DNS资源 8.销毁资源 二、问题 1. Terraform申请安全组资源失败 2.Terraform验证云主机资源报错 3. A记录和CNAME的区别 …

阿里云推出第八代企业级实例 g8i:AI 推理性能最高提升 7 倍、可支持 72B 大语言模型

云布道师 1 月 11 日,全球领先的云计算厂商阿里云宣布推出第八代企业级通用计算实例 ECS g8i,这也是国内首款搭载第五代英特尔至强可扩展处理器(代号 EMR)的云计算产品。依托阿里云自研的「飞天CIPU」架构体系,ECS g8…