docker详解介绍+基础操作 (二)info详解
1 docker相关信息和优化配置
1)查看docker版本详解
root@zz:~# docker version
Client: Docker Engine - CommunityVersion: 27.3.1API version: 1.47Go version: go1.22.7Git commit: ce12230Built: Fri Sep 20 11:40:59 2024OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 27.3.1API version: 1.47 (minimum version 1.24)Go version: go1.22.7Git commit: 41ca978Built: Fri Sep 20 11:40:59 2024OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.7.22GitCommit: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311crunc:Version: 1.1.14GitCommit: v1.1.14-0-g2c9f560docker-init:Version: 0.19.0GitCommit: de40ad0
2)docker 信息详解
root@zz:~# docker info
Client: Docker Engine - CommunityVersion: 27.3.1Context: defaultDebug Mode: false #client 端是否开启debugPlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.17.1Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.29.7Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 0 #当前主机运行的容器总数Running: 0 #有几个容器是正在运行的Paused: 0 #有几个容器是暂停的Stopped: 0 #有几个容器是停止的Images: 0 #当前服务器镜像数Server Version: 27.3.1 #服务端版本Storage Driver: overlay2 #正在使用的存储引擎Backing Filesystem: extfs #后端文件系统,即服务器的磁盘系统Supports d_type: true #是否支持 d_typeUsing metacopy: false #是否使用 metacopyNative Overlay Diff: true #是否支持差异数据存储userxattr: false #是否试用 userxattrLogging Driver: json-file #日志类型,每个容器的标准输出以日志存放Cgroup Driver: systemd #cgroup类型Cgroup Version: 2 #cgroup版本Plugins: #插件Volume: local #卷Network: bridge host ipvlan macvlan null overlay #overlay跨主机通信Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog #日志类型Swarm: inactive #是否支持swarm 没有开启 类似k8s的工具Runtimes: io.containerd.runc.v2 runc #已安装的容器运行时Default Runtime: runc #默认容器运行时Init Binary: docker-init #初始化容器的守护进程,即 pid 为1的进程containerd version: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c #版本runc version: v1.1.14-0-g2c9f560 #runc版本init version: de40ad0 #init版本Security Options: #安全选项apparmor #安全模块seccomp #安全计算模块Profile: builtin cgroupns #安全计算模块Kernel Version: 6.8.0-45-generic #宿主机内核版本Operating System: Ubuntu 24.04.1 LTS #宿主机os版本OSType: linux #宿主机os类型Architecture: x86_64 #宿主机cpu架构CPUs: 2 #宿主机cpu核数Total Memory: 1.638GiB #宿主机总内存Name: zz #宿主机主机名ID: d1c4671f-58d4-4832-90be-fe062f3c9b4e #宿主机 IDDocker Root Dir: /var/lib/docker#宿主机docker数据的保存目录建议使用独立ssd磁盘保证性能和空间Debug Mode: false # server 端 debug是否开启Experimental: false #测试新功能和收集社区反馈,一般测试版会开启Insecure Registries: #非安全的镜像仓库127.0.0.0/8Live Restore Enabled: false #是否开启活动重启(重启docker-daemo 不关闭容器)WARNING: bridge-nf-call-iptables is disabled #系统警告
WARNING: bridge-nf-call-ip6tables is disabled #系统警告
①metacopy使用场景
处理大量小文件:在处理大量小文件时,metacopy 可以显著减少文件系统的 I/O 操作,提高性能。
频繁的文件创建和删除:在需要频繁创建和删除文件的场景中,metacopy 可以减少文件系统的开销。
容器镜像构建:在构建容器镜像时,如果涉及到大量文件的复制和修改,metacopy 可以加速这一过程。
启用 metacopy
metacopy 特性默认是禁用的,需要在启动 Docker 守护进程时通过配置文件或命令行参数来启用
通过配置文件启用
编辑 Docker 的配置文件(通常是 /etc/docker/daemon.json):
{"storage-driver": "overlay2","storage-opts": ["overlay2.metacopy=on"]
}
重启 Docker 服务:
sudo systemctl restart docker
通过命令行启用
在启动 Docker 守护进程时,可以通过命令行参数启用 metacopy:
sudo dockerd --storage-driver overlay2 --storage-opt overlay2.metacopy=on
注意事项
兼容性:metacopy 特性依赖于底层文件系统(如 ext4、XFS)的支持。确保你的文件系统支持 metacopy。
性能影响:虽然 metacopy 在某些场景下可以提高性能,但在其他场景下可能会带来额外的开销。建议在实际环境中进行测试,以确定是否适合启用该特性。
数据一致性:在某些情况下,metacopy 可能会影响文件系统的数据一致性。确保在启用该特性前了解其潜在的风险。
②d_type
文件系统支持 d_type 的常见情况
ext4:默认支持 d_type。
XFS:默认支持 d_type。
btrfs:默认支持 d_type。
tmpfs:默认支持 d_type。
检查 Docker 是否使用 d_type
你可以通过查看 Docker 的日志来确认是否启用了 d_type 支持:
sudo journalctl -u docker | grep d_type
d_type 支持是 Docker 中 overlay2 存储驱动的一个重要特性,可以显著提高文件系统操作的性能和可靠性。确保你的文件系统支持 d_type,并在启动 Docker 时启用该特性,可以进一步优化 Docker 的性能。如果你的文件系统不支持 d_type,Docker 会自动回退到不使用 d_type 的模式,但性能可能会受到影响。
③ userxattr 选项的作用
启用 userxattr (userxattr: true):
允许在文件和目录上设置和读取用户扩展属性。
这对于某些应用程序和工具(如 SELinux、AppArmor 和其他安全相关工具)可能非常重要,因为它们依赖于这些扩展属性来实现细粒度的安全控制。
禁用 userxattr (userxattr: false):
禁止在文件和目录上设置和读取用户扩展属性。
这可以减少文件系统的开销,提高性能,特别是在不需要这些扩展属性的情况下。
配置 userxattr 选项
通过配置文件启用或禁用 userxattr
编辑 Docker 的配置文件(通常是 /etc/docker/daemon.json):
{"storage-driver": "overlay2","storage-opts": ["overlay2.userxattr=false"]
}
重启 Docker 服务:
sudo systemctl restart docker
通过命令行启用或禁用 userxattr
在启动 Docker 守护进程时,可以通过命令行参数启用或禁用 userxattr:
sudo dockerd --storage-driver overlay2 --storage-opt overlay2.userxattr=false
④cgroupfs vs systemd
cgroupfs:
描述: cgroupfs 是 Docker 的默认 cgroup 驱动程序。
优点: 简单易用,不需要额外的依赖。
缺点: 可能与系统的其他部分(如 systemd)存在冲突,特别是在较新的系统中。
systemd:
描述: systemd 是一个系统和服务管理器,广泛用于现代 Linux 发行版。systemd 也支持 cgroup 管理。
优点: 更好的系统集成,与 systemd 服务管理器无缝配合,提供更细粒度的资源管理和监控。
缺点: 配置稍微复杂一些,需要 systemd 支持。
如何将 Docker 配置为使用 systemd 作为 cgroup 驱动程序
编辑 Docker 配置文件:
打开 Docker 的配置文件(通常是 /etc/docker/daemon.json)。
添加或修改 cgroup-driver 配置项,将其设置为 systemd。
{"exec-opts": ["native.cgroupdriver=systemd"]
}
重启 Docker 服务:
保存配置文件后,重启 Docker 服务以使更改生效。
sudo systemctl restart docker
⑤AppArmor: 用于限制程序的文件访问、网络连接和其他系统调用。
Seccomp: 用于限制进程可以执行的系统调用,减少攻击面。
cgroupns: 用于将 cgroups 隔离到不同的命名空间中,提高容器之间的资源隔离性。
⑥常见警告及解决办法
WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled
vim /etc/sysctl.conf 添加以下内容 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1最后再执行
sysctl -p
sudo systemctl restart docker
若出现 sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
则执行 sudo modprobe br_netfilter
再执行
sysctl -p
sudo systemctl restart docker
即可
方法二 用ipvs代替
当看到 `WARNING: bridge-nf-call-iptables is disabled` 警告时,确实可以考虑使用 `ipvs` 作为替代方案,尤其是在需要高性能负载均衡和网络管理的场景中。`ipvs`(IP Virtual Server)是一个内核模块,用于实现高性能的负载均衡和网络地址转换(NAT)。
什么是 `ipvs`?
`ipvs` 是 Linux 内核的一个模块,用于实现第四层(传输层)的负载均衡。它可以在内核态处理大量的网络流量,提供比 `iptables` 更高效的负载均衡和转发能力。`ipvs` 通常用于高性能的负载均衡器,如 `HAProxy` 和 `Kubernetes` 的 `kube-proxy` 组件。
为什么使用 `ipvs`?
1. **高性能**: `ipvs` 在内核态处理网络流量,性能通常优于 `iptables`。
2. **可扩展性**: `ipvs` 支持多种负载均衡算法,可以更好地处理大规模的网络流量。
3. **灵活性**: `ipvs` 提供了丰富的配置选项,可以满足不同场景的需求。如何启用 `ipvs`?
1. 安装 `ipvs` 模块
首先,确保你的系统已经安装了 `ipvs` 模块。你可以使用以下命令来加载 `ipvs` 模块:
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
这些模块分别对应 `ipvs` 的核心功能和不同的负载均衡算法(轮询、加权轮询、最少连接数)。
2. 配置 `ipvs` 模块
你可以使用 `ipvsadm` 工具来配置 `ipvs`。首先,安装 `ipvsadm`:
sudo apt-get install ipvsadm # Debian/Ubuntu
sudo yum install ipvsadm # CentOS/RHEL
3. 配置 `ipvs` 规则
使用 `ipvsadm` 添加和管理 `ipvs` 规则。例如,创建一个虚拟服务器并将流量转发到两个真实服务器:
sudo ipvsadm -A -t 192.168.1.100:80 -s rr
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g
sudo ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
```- `-A`:添加虚拟服务器
- `-t`:指定虚拟服务器的 IP 和端口
- `-s`:指定负载均衡算法(`rr` 表示轮询)
- `-a`:添加真实服务器
- `-r`:指定真实服务器的 IP 和端口
- `-g`:使用直接路由模式4. 验证配置
你可以使用以下命令查看 `ipvs` 的配置:
sudo ipvsadm -L -n
在 Docker 中使用 `ipvs`
如果你在使用 Docker 并希望使用 `ipvs`,可以考虑以下几点:
1. **Kubernetes**: 如果你在使用 Kubernetes,可以配置 `kube-proxy` 使用 `ipvs` 模式。编辑 `kube-proxy` 的配置文件(通常是 `/etc/kubernetes/manifests/kube-proxy.yaml`),添加或修改以下内容:
spec:containers:- name: kube-proxyimage: k8s.gcr.io/kube-proxy:v1.21.0command:- /usr/local/bin/kube-proxy- --config=/var/lib/kube-proxy/config.conf- --iptables-sync-period=30s- --ipvs-sync-period=30s- --feature-gates=SupportIPVSProxyMode=true- --proxy-mode=ipvs
2. **Docker Swarm**: Docker Swarm 本身没有直接支持 `ipvs` 的选项,但你可以通过自定义网络配置和使用 `ipvs` 负载均衡器来实现类似的效果。
总结
`WARNING: bridge-nf-call-iptables is disabled` 警告表示 Docker 的网桥无法调用 `iptables` 规则,这可能影响网络的安全性和功能。虽然你可以通过启用 `bridge-nf-call-iptables` 来解决这个问题,但如果你需要更高性能的负载均衡和网络管理,可以考虑使用 `ipvs` 作为替代方案。`ipvs` 提供了更高的性能和更丰富的配置选项,适用于高性能的负载均衡场景。
Docker之WARNING: IPv4 forwarding is disabled. Networking will not work
配置转发
vim /etc/sysctl.conf #配置转发 net.ipv4.ip_forward=1 #重启服务,让配置生效 systemctl restart network #查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功 sysctl net.ipv4.ip_forward检查容器是否正常访问网络
#重启docker服务 service docker restart #查看运行过的容器 docker ps -a #启动gitlab 容器 docker start gitblab2 #进入gitlab容器 docker attach gitlab2 #获取百度信息 curl baidu.comWARNING: No swap limit support
系统警告信息 (没有开启 swap 资源限制 )
vim /etc/default/grub GRUB_DEFAULT=0 GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=2 GRUB_DISTRIBUTOR=`lsb_ release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="net.ifnames=0 swapaccount=1" #修改此行swapaccount=1update-grub reboot
相关文章:

docker详解介绍+基础操作 (二)info详解
1 docker相关信息和优化配置 1)查看docker版本详解 rootzz:~# docker version Client: Docker Engine - CommunityVersion: 27.3.1API version: 1.47Go version: go1.22.7Git commit: ce12230Built: Fri Sep 20 11:40:…...

C0023.在Clion中创建控件,对控件进行提升为自定义控件的步骤
新建Ui界面文件 修改新生成的ui文件头文件 关闭之前打开的ui文件,如上图Qt Designer中打开的,然后修改新生成的ui文件对应的头文件,改成自己需要的控件类即可。 提升控件为自定义类 将如下头文件中的类名和头文件名输入到提升窗口中&#…...

探索 C# 常用第三方库与框架
在 C# 开发中,第三方库和框架极大地提高了开发效率和代码质量。通过这些库,开发者可以快速处理 JSON 数据、简化对象映射、记录日志、以及高效地与数据库交互。本文将介绍四个常用的 C# 第三方库:Newtonsoft.Json、AutoMapper、NLog/Serilog …...

NodeJS GRPC简单的例子
1. 定义 .proto 文件 首先,创建一个 .proto 文件,定义服务和消息: syntax "proto3";package helloworld;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}rpc SayHelloAgain (HelloRequest) returns (Hel…...

无人机之三维航迹规划篇
一、基本原理 飞行环境建模:在三维航迹规划中,首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析,以获得可行的飞行路径。 飞行任务需求分析:根据无人机的任务需求,确定航迹规划的…...

风格迁移-StyTr 2 : Image Style Transfer with Transformers
风格迁移-StyTr 2 : Image Style Transfer with Transformers 论文链接:Image Style Transfer with Transformers 源码链接:StyTR-2 文章目录 风格迁移-StyTr 2 : Image Style Transfer with TransformersStyTR架构图图像内容编码器内容感知位置编码&…...

上百种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
待更新(持续更新),早关注,不迷路............................................................................... 目标检测系统操作说明【用户使用指南】(pythonpyside6界面系统源码可训练的数据集也完成的训练模型ÿ…...

记录搜罗到的Matlab 对散点进行椭圆拟合
需要基于一些散点拟合椭圆估计并计算出椭圆的参数和周长,搜罗到直接上代码 (1)有用的椭圆拟合及参数计算函数 function W fitellipse(x,y) % 构造矩阵 D [x.*x, x.*y, y.*y, x, y,ones(size(x))]; S D*D; G zeros(6); G(1,3) 2; G(3,1)…...

分享我最近使用《柬埔寨语翻译通》App的体验,不会说高棉语也能去柬埔寨旅游,畅通无阻!
最近,我尝试了一款名为《柬埔寨语翻译通》的应用程序,它旨在帮助用户进行中文和高棉语之间的翻译。以下是我使用这款应用的一些体验和感受。 双向翻译功能:我首先测试了它的翻译功能。《柬埔寨语翻译通》能够将中文翻译成高棉语,反…...

文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
大家好,我是微学AI,今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架,我们提供了样例代码,以帮助读者更好地理解和实践。该系统具有广…...

redis在项目中运用(基础)
mysql学完命令之后,学过jdbc。 redis也要使用Java连接redis数据库 1.Jedis 2.RedisTemplate[重点] 1、Jedis【了解】 jedis是redis的java版本的客户端实现,jedis中提供了针对redis命令的操作 1.1导入jar文件 Maven方式 <dependency><group…...

libaom 源码分析系列:svc_encoder_rtc.cc 文件
源码函数关系 文件功能:实现 AV1 svc 编码的 RTC 功能 demo文件位置:libaom/examples/svc_encoder_rtc.cc文件内函数关系图: 结构体 AppInput:svc_encoder_rtc.cc 所属 demo 的结构体,作为从命令行接受参数的结构体;AvxVideoWriter:输出视频写入结构体;aom_codec_enc_c…...

MySQL备份和还原,用mysqldump、mysql和source命令来完成
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。 mysqldump命令使用方法 1运行 | cmd |利用 cd C:\Program Files\MySQL\MySQL Server 9.0\bin”命令进入bin文件夹 2输入命令 mysqldump -h127.0.0.1 -P3306 -uroot -pQWERTY zssjkcf>d:123.sql mysqldump -…...

MySQL Server、HeidiSQL(MySQL 数据库工具)
目录 一、MySQL Server (一)官网下载 (二)安装与配置 二、HeidiSQL软件 (一)安装 1. 官网下载 2. 打开 3. 使用 (1)打开服务 (2)新增数据库 ÿ…...

矩阵相关算法
矩阵旋转90度 给定一个 n n 的二维矩阵 matrix 表示一个图像,请你将图像顺时针旋转 90 度。 #include <iostream> #include <vector>using namespace std;void rotate(vector<vector<int>>& matrix) {int n matrix.size();// 第一步…...

微信小程序-封装通用模块
文章目录 微信小程序-封装通用模块封装toast和modal封装storage封装网络请求 微信小程序-封装通用模块 封装toast和modal /** 提示消息框 */ function toast({title "数据加载中",icon "none",duration 2000,mask true, }) {wx.showToast({title,ico…...

Modnet 人像抠图(论文复现)
Modnet 人像抠图(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 Modnet 人像抠图(论文复现)论文概述论文方法复现WebUI部署 论文概述 人像抠图(Portrait matting)旨在预测一个精确的 alpha 抠图,可以用…...

利用session机制造测试账号,无需前端也可以测试后端接口
适用场景:我们在测试的时候经常会遇到前端还没有开发完毕,后端已经结束开发了,但是后端的有些接口是需要特定的账号身份调用才会生效,此时因为前端未开发完毕,所以我们不能通过web页面进行登录,那么如何解决…...

JAVA_18
JAVA_18 1.IO流2.JAVA_IO流3.标准输入输出4.对象序列化5.字符编码与字符集6.异常处理和资源关闭 1.IO流 IO流(Input/Output stream)是用于在程序和外部设备(如文件、网络等)之间进行数据传输的机制。它是Java中处理输入和输出操作的一种抽象方式。概念: 输入流(Input Stream):…...

Linux升级openssl版本
Linux升级openssl版本 服务器编译依赖库检查 $ yum -y install gcc gcc-c make libtool zlib zlib-devel版本检测 $ openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 $ ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013下载openssl 地址:https://www.o…...

多态对象的存储方案小结
某个类型有几种不同的子类,Jackson中的JsonTypeInfo 和JsonSubTypes可以应对这种情形,但有点麻烦,并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。用过一次这种方案后边就不想再用了。 …...

Linux 之 nano 编辑器
使用git提交的时候,发生冲突或要记录相关信息时会弹出nano这个编辑器。 nano [选项] [[行,列] 文件名]... nano[必要参数][选择参数][文件] 命令行白的部分是组合键,后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键,(M)表示…...

zipkin启动脚本并指定mysql数据存储
#!/bin/bash# 配置部分 ############################################################## Zipkin JAR 文件的名称 # 这里指定了 Zipkin 的可执行 JAR 文件,确保该文件在当前目录中可用。 ZIPKIN_JAR"zipkin-server-2.23.2-exec.jar"# PID 文件的位置 # 该…...

超越GPT-4的视觉与文本理解能力,开源多模态模型领跑者 - Molmo
Molmo是由艾伦人工智能研究所(Ai2)发布的一系列多模态人工智能模型,旨在提高开放系统在性能上与专有系统(如商业模型)之间的竞争力。以下是对Molmo的详细总结: Molmo是什么: Molmo是基于Qwen2和…...

输入输出--I/O流【C++提升】()
1.1基础知识: 在C中,输入输出(IO)流是通过标准库中的 <iostream> 头文件来处理的。C 提供了几种基本的输入输出流类,最常用的有以下几种: std::cin:用于输入。std::cout:用于…...

Maven 中央仓库地址推荐
目录 Maven 中央仓库地址推荐 Maven Maven 中央仓库概述 什么是 Maven 中央仓库? 中央仓库的作用 常用的 Maven 中央仓库地址 官方 Maven 中央仓库 阿里云 Maven 中央仓库镜像 腾讯云 Maven 中央仓库镜像 网易 Maven 中央仓库镜像 华为云 Maven 中央仓库…...

Fastgpt本地化部署 - 以MAC为例
1.认识fastgpt 2.私有化部署 MongoDB:用于存储除了向量外的各类数据PostgreSQL/Milvus:存储向量数据OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验) (1&a…...

SpringBoot框架下购物推荐网站的设计模式与实现
3系统分析 3.1可行性分析 通过对本东大每日推购物推荐网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本东大每日推购物推荐网站采用JAVA作为开发语言&…...

Apache Flink 和 Apache Kafka
Apache Flink 和 Apache Kafka 都是大数据生态系统中非常重要的工具,但它们的作用和应用场景有所不同。下面将分别介绍两者的主要特性和它们之间的异同点。 Apache Kafka 作用: 消息队列:Kafka 主要作为消息队列使用,用于解耦生…...

Excel中Ctrl+e的用法
重点:想要使用ctrle,前提是整合或拆分后的结果放置的单元格必须和被提取信息的单元格相邻,且被提取信息的单元格也必须相连。 下图为错误示例 这样则可以使用ctrle 1、信息整合 2、提取信息 3、添加符号 4、信息顺序调换 5、数字提取 crtle还…...