Docker 数据管理、容器互联、网络与资源控制

一、docker数据管理

管理 Docker 容器中数据主要有两种方式:数据卷(Data volumes)和数据卷容器(Datavolumes containers)。

1、数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立即可见,并且更新数据不会影响镜像,从而实现在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作

格式:docker run -d -v 宿主机绝对路径:容器绝对路径[:ro]  镜像名:标签  [容器启动命令]

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

2、数据卷容器

如果需要在容器之问共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

格式:

docker run -d  -v  容器绝对路径  镜像名:标签  [容器启动命令] 

#创建数据卷容器的数据卷

docker run -d  --volumes-from 数据卷容器名 镜像名:标签  [容器启动命令]                     

#共享数据卷容器的数据卷

二、docker容器互联

默认情况下docker容器重新创建后,对应的容器IP地址可能会改变,这样如果两个容器之间通信就会变得非常麻烦,每次都要修改通信的IP地址。容器互联是通过容器的名称在容器问建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

docker run -d --name 容器名 --link 目标容器名:连接别名 镜像名:标签  [容器启动命令]

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

三、docker网络

1、端口映射

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

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过 Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run 创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器

格式:

docker run -d --name 容器名 -P 镜像名:标签  [容器启动命令]                                              

#使用从32768开始的随机端口映射容器


docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名:标签  [容器启动命令]            

 #使用指定的宿主机端口映射容器

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

只会显示容器pid=1的主进程日志

格式:docker logs 容器的ID|名称

3、docker 的网络模式(重点)

①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 ....

②container

③自定义网络

创建自定义网络:

格式:

docker network create --subnet 自定义网段 --opt "com.docker.network.bridge.name"="自定义网桥名"  自定义网络模式名

再使用指定IP运行docker:

格式:

docker run -itd --name 自定义容器名 --network 自定义网络模式名 --ip 自定义IP centos:7 /bin/bash

四、docker资源控制

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

1、CPU 资源控制

①设置CPU使用率上限

使用 --cpu-period 即可设置调度周期,使用 --cpu-quota 即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。

CFS 周期的有效范围是 1ms~1s,对应的 --cpu-period 的数值范围是 1000~1000000。而容器的 CPU 配额必须不小于 1ms,即 --cpu-quota 的值必须 >= 1000。

格式:

针对新建的容器:
docker run --cpu-period 单个CPU调度周期时间(1000~1000000)  --cpu-quota 容器进程能够使用的最大CPU时间(>=1000)

针对已存在的容器:
修改 /sys/fs/cgroup/cpu/docker/容器ID/ 目录下的 cpu.cfs_period_us(单个CPU调度周期时间)  cpu.cfs_quota_us(容器进程能够使用的最大CPU时间)  文件的值

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

docker 通过 --cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数

格式:

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

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

yum install -y epel-release

yum install -y stress

stress -c 2

③设置容器绑定指定的CPU

先分配虚拟机4个CPU核数

docker run -itd --name test7 --cpuset-cpus 1,3 centos:7 /bin/bash

进入容器,进行压力测试

yum install -y epel-release

yum install stress -y

stress -c 4

退出容器,执行 top 命令再按 1 查看CPU使用情况。

2、对内存使用的限制

使用-m选项用于限制容器可以使用的最大内存,系统默认不限制容器的内存使用

docker run -id --name c3 -m 512m centos:7 /bin/bash

使用 --memory-swap选项限制可用的 swap 大小,--memory-swap的值表示容器可用内存和可用swap的总和,--memory-swap 是必须要与 -m一起使用的

格式:

docker run -m 内存值  --memory-swap 内存和swap的总值
                                    设置 0 或 不设置,表示swap为内存的2倍
                                    设置 -1,表示不限制swap的值,宿主机有多少容器即可使用多少
                                    设置 与 -m 一样的值,表示不使用swap

3、对磁盘IO配额控制(blkio)的限制

格式:

docker run --device-read-bps    磁盘设备文件路径:速率           

#限制容器在某个磁盘上读的速度
docker run --device-write-bps   磁盘设备文件路径:速率                  

#限制容器在某个磁盘上写的速度
docker run --device-read-iops   磁盘设备文件路径:次数                

 #限制容器在某个磁盘上读的次数
docker run --device-write-iops  磁盘设备文件路径:次数                  

#限制容器在某个磁盘上写的次数

创建容器,并限制写速度 

docker run -id --name c5 --device-write-bps /dev/sda:1M centos:7 /bin/bash

通过dd来验证写速度

dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct #添加oflag参数以规避掉文件系统cache(缓存)

4、清理docker占用的磁盘空间

docker system prune -a

可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

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

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

相关文章

Prometheus 容器化部署

实验部署 工作中是基于kube-api的自动发现 1、创建账户绑定集群 kubectl create serviceaccount monitor -n monitor-sa #创建账户 kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrolecluster-admin --serviceaccountmonitor-sa:…

FileViewer纯前端预览项目Vue2 demo

FileViewer 项目Vue2 demo 本demo基于vue-clijsvue2.x构建,如果您需要vue3版本的demo,请前往main分支。 适用于Vue2 Webpack,本集成方法要求最低Webpack版本为5,也就是Vue Cli Service 5.0.0以上,当然,if…

13.前端--CSS-盒子模型

1.盒子模型的组成 CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容 2.边框(border) 2.1 边框的使用 1、border设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框…

国网四川宜宾供电公司:基于“RPA+AI”融合技术的电网设备隐患缺陷智能化识别应用

推荐单位:国网四川省电力公司宜宾供电公司 本文作者:杨鑫、唐龙、钟睿、李小航、孙雪冬 摘 要:为推进电力企业生产业务数字化转型,提高基层班组数字化运维水平。本文通过一线班组对变电站视频巡视、设备故障判断应用场景需求分析…

C++-内存管理(1)

1. C/C内存分布 首先我们需要知道,在C中的内存分为5个区。 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等,栈是向下增长的。 2. 内存映射段 是高效的 I/O 映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建…

【2023地理设计组一等奖】基于GIS的桥梁隧道三维建模与可视化

作品介绍 1 设计背景和意义 随着我国基础建设规模不断扩大和深入,构建桥梁可视化管理模型,全面推动智慧桥梁,已成为现代隧道桥梁建设行业的发展趋势。传统的桥梁建模工作需要复杂的算法设计并需要熟练编程实践技能,实现周期长。开发自主知识版权的桥梁建模软件系统或专用插…

在线mockjson

在线mockjson体验地址 在调一个问题的时候,但是问题的数据可能并不能随着想到的场景就变化,譬如说又个数组长度的情况,可能默认的情况下是返回4个元素,但是想要返回为空的时候,如果联系服务给改一下,那么流…

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本人及开发者…

Abp 从空白WebApplication开始

开发环境:VS2022、.NET6 1、创建项目:BasicAspNetCoreApplication 2、NuGet添加:Volo.Abp.AspNetCore.Mvc和Volo.Abp.Autofac,如下图所示: 3、开始写代码,目录如下图所示: 3.1、添加启动模块Ap…

使用make_grid多批次显示网格图像(使用CIFAR数据集介绍)

背景介绍 在机器学习的训练数据集中,我们经常使用多批次的训练来实现更好的训练效果,具体到cv领域,我们的训练数据集通常是[B,C,W,H]格式,其中,B是每个训练批次的大小,C是图片的通道数,如果是1…

Python网络拓扑库之mininet使用详解

概要 网络工程师、研究人员和开发人员需要进行各种网络实验和测试,以评估网络应用和协议的性能,以及解决网络问题。Python Mininet是一个功能强大的工具,它允许用户创建、配置和仿真复杂的网络拓扑,以满足各种实际应用场景。本文…

Java 面向对象进阶 01(黑马)

static案例代码: 代码: public class Student {private String gender;private String name;private int age;public static String teacherName ;public Student() {}public Student(String gender, String name, int age) {this.gender gender;this.…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉语言导航

专属领域论文订阅 VX 关注{晓理紫},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 如果你感觉对你有所帮助,请关注我,每日准时为你推送最新论文。 为了答谢各位网友的支持,从今日起免费…

费一凡:土木博士的自我救赎之道 | 提升之路系列(五)

导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

Linux true/false区分

bash的数值代表和其它代表相反:0表示true;非0代表false。 #!/bin/sh PIDFILE"pid"# truenginx进程运行 falsenginx进程未运行 checkRunning(){# -f true表示普通文件if [ -f "$PIDFILE" ]; then# -z 字符串长度为0trueif [ -z &qu…

时序数据库 Tdengine 执行命令能够查看执行的sql语句

curl是 访问6041端口,在windows系统里没有linux里的curl命令,需要用别的工具实现。我在cmd里是访问6030端口 第一步 在安装是时序数据库的服务器上也就是数据库服务端 进入命令窗口 执行 taos 第二步 执行 show queries\G;

jsjiami.v6加解密教学

1. 优点 a. 安全性提升 JavaScript 加密可以有效保护源代码,减少恶意用户的攻击风险。 b. 代码混淆 通过混淆技术,可以使代码变得难以阅读和理解,增加破解的难度。 c. 知识产权保护 对于商业项目,JavaScript 加密有助于保护…

Abp 创建一个WPF的项目

开发环境:VS2022、.NET6 1、创建项目:MyWpfApp,这里不再废话了。 2、NuGet添加: 2.1、Volo.Abp.Autofac 2.2、Serilog.Sinks.File 2.3、Serilog.Sinks.Async 2.4、Serilog.Extensions.Logging 2.5、Serilog.Extensions.Hos…

低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别

低功耗蓝牙(BLE) vs 经典蓝牙(SPP) 区别项低功耗蓝牙(BLE)经典蓝牙(SPP 串行端口协议)蓝牙版本蓝牙版本 > 4.0,又称蓝牙低功耗、蓝牙智能经典蓝牙2.0 或更早版本,经典配对模式在两台蓝牙设备之间建立虚拟串口数据连接,提供一种简单而直接…

DML的原理:一篇文章让你豁然开朗

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣(一) 给软件行业带来了春天——揭秘Spring究竟是何方神圣(二) 文章目录 推荐阅读DML 数据操纵语言INSERT语句UPDATE语句DELETE语句SELECT语句 DML 数据操纵语言 DML是…