磁盘占满
du -x -h --max-depth=1 /var/lib/docker/containers/
docker ps -a
step by step
01. docker info
Docker Root Dir: /var/lib/docker
02.du -x -h --max-depth=1 /var/lib/docker
docker默认存放镜像地址为 /var/lib/docker
容器的日志文件在/var/lib/docker/containers/
03.docker system df
容器日志
查看容器日志命令:
# 查看所有容器下日志的大小
find /var/lib/docker/containers/ -name *-json.log |xargs du -
docker logs -f container_name(容器名称)
进程一直在持续输出,而这些输出会记录到docker日志中,
删除日志
01.通过rm 日志删除后重启docker
Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,
将会从文件系统的目录结构上解除链接(unlink)。
如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用
<1>.查看当前目录正在被哪些进程在使用
fuser -uv .
lsof
pidof
02.覆盖操作 *cat /dev/null > -json.log
限制容器日志--不禁止日志输出,可以限制文件的大小
全局:docker需要重新加载配置文件和重启
/etc/docker/daemon.json 中log-opts参数
参数 说明
log-opts max-size 容器日志文件上限大小
log-opts max-file 窗口日志文件上限个数
容器范围内
docker run增加如下参数
--log-opt max-size=100m --log-opt max-file=3
容器日志过大
1.具体容器名称的日志位置
docker inspect --format='{{.LogPath}}' mytest
2./var/lib/docker/containers 目录中,通过下面的命令可以将日志文件夹根据升序的方式罗列出来
sudo du -d1 -h /var/lib/docker/containers | sort -h
3.删除日志方式-删除大的 log 文件
方式一:
cat /dev/null>$log
Linux执行sudo echo xxx >> 命令提示权限不够的问题
bash -c命令。该命令可以让bash运行整条字符串命令,前加sudo使得整条命令运行时具有root权限
sudo bash -c 'echo aa >> a.txt'
方法二:
使用tee命令。该命令可以将管道中内容写入文件,只需要对该命令赋予root权限就可以操作a.txt文件
echo aa |sudo tee -a a.txt >/dev/null
注意:tee命令的-a选项是追加的意思,如果不加此选项,输出文本将覆盖文件。
方式三
使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。
原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接
过rm -rf删除后重启docker服务
单行命令
sudo find /var/lib/docker/containers/ -name *-json.log |xargs -i sudo bash -c " cat /dev/null > {} "
定时删除日志 #超过5G自动清理 字节B
#!/bin/sh
echo "=================== start clean docker containers logs =========================="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs;
do
log_size=$(ls -l $log|awk '{print $5}')
if [ ${log_size} -gt 5368709120 ]; then
echo "clean logs:"
echo $log
cat /dev/null>$log
fi
done
echo "==================== end clean docker containers logs =========================="
echo `date`
###脚本说明
出现如题的“ integer expression expected”错误。这是因为这几个参数: -gt ,-lt,-eq 比较的都是数字和变量
dev/null被使用的最大方式是丢弃整个输出中的标准输出或标准错误。
crontab -e
###每日定时清理dockerlog
0 0 * * * /bin/bash /opt/crondocker/clear.sh > /opt/crondocker/clear-log.log
硬盘空间
df 是 disk free 的缩写
命令即可做到,即搜索所有的deleted的进程,然后将所有的deleted的进程杀死
lsof | grep deleted|awk '{print $2}'|xargs kill -9
lsof(list open files),
-i <条件> 输出符合条件与网络相关的文件
lsof -p 1335
lsof /dev/vda1
# 323 号端口相关的文件
lsof -i:323
lsof -u root
fuser是一个用于显示文件或目录被哪些进程使用的工具
fuser命令仅针对Linux系统,而lsof命令则可以在多种操作系统平台上使用,包括Linux、UNIX以及Mac等
tar
压缩 c
解压 x x代表解压,v代表显示详细的解压过程,f表示接下来的参数是文件名
附录
02.删除roscore进程
killall -9 roscore
killall -9 rosmaster
03.端口占用
fuser -v 66/udp 77/udp
lsof -i:66
04.ROS主从设置取消
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
05.ping 192.128.1.2 判断硬件是否可以连接通
sudo chown -R tt:tt ./data
--recursive
lsblk -d -o name,rota
查看,0表示固态硬盘,1表示机械硬盘,
lsblk -f
也可以查看挂载和未挂载的文件系统类型
file -s /dev/sda3
查看指定挂载盘的文件系统类型
df -Th 命令 查看文件系统类型在Type列输出
du -h -x --max-depth=1
磁盘空间根目录占满,命令逐级查找大文件
scp -r
镜像的架构
Linux container runtime / Wasm containerd shim
###Docker容器引擎安装后包含有这些组件:dockerd、Containerd、runc。
dockershim “shim”,意思是“垫片”。
###k8s -CRI
Kubelet
CRI(Container Runtime Interface)
CRI shim是实现CRI接口的gRPC server服务,负责连接Kubelet和Container runtime
Container runtime是容器运行时工具,它为用户进程隔离出一个独立的运行环境
K8s的调用方式
CRI 接口调用 dockershim,然后 dockershim 调用 docker,docker 再去 containerd 操作容器。
CRI 接口直接调用 containerd 操作容器
ctr 是 containerd 的一个客户端工具。
crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。
docker 由 docker-client,dockerd,docker-shim,containerd,runc组成,所以containerd是docker的基础组件之一
容器运行时标准(runtime spec) 容器镜像标准(image spec) ###
OCI (Open Container Initiative 开放容器标准),该规范包含两部分内容:
容器运行时标准(runtime spec)、容器镜像标准(image spec)
容器运行时标准 -init creating created running stopped
高级容器运行时--开源containerd
containerd
cri-o
低级容器运行时有:
runc : 我们最熟悉也是被广泛使用的容器运行时,代表实现Docker。runv:
runV : 是一个基于虚拟机管理程序(OCI)的运行时。它通过虚拟化 guest kernel,将容器和主机隔离开来,使得其边界更加清晰,。代表实现是kata和Firecracker
runsc: runsc = runc + safety ,典型实现就是谷歌的gvisor,通过拦截应用程序的所有系统调用,提供安全隔离的轻量级容器运行时沙箱。用案例。
wasm : Wasm的沙箱机制带来的隔离性和安全性,都比Docker做的更好。
--runtime=io.containerd.wasmedge.v1
容器镜像标准(image spec)
--platform=wasi/wasm32 指定我们想要使用的镜像的体系结构。通过利用Wasm体系结构,我们不需要为不同的体系结构构建单独的镜像
镜像主要是由镜像层和容器配置两大部分组成的。
文件系统:以 layer 保存的文件系统
b). config 文件
c). manifest 文件
d). index 文件:可选的文件,指向不同平台的 manifest 文件,这个文件能保证一个镜像可以跨平台使用
Reference
File formats
Command-line interfaces