linux docker存储空间迁移
1、查看分区状况
根目录在/dev/mapper/centos-root
执行以下命令,可查看各文件夹空间占用情况:
du -h -x --max-depth=1
以下是两种不同的实现方法来在Linux中查找大文件的代码:
方法一:使用find命令
shell
find /var -type f -size +100M这个命令将在指定路径下搜索大于100兆字节的文件。你可以将/path/to/search替换成你要搜索的实际路径。
方法二:使用du和sort命令组合
shell
du -ha /var | grep '[0-9]G\|[0-9]M' | sort -rh这个命令将在指定路径下计算每个文件的大小,并以人类可读的方式显示。然后使用grep过滤只保留大于1兆字节的文件,并通过sort按照降序排列文件大小。你可以将/var替换成你要搜索的实际路径。
这里有两种不同的方法来查找大文件,你可以根据具体情况选择适合的方法。
方法二:使用du和sort命令组合获取大于100兆的文件
du -ha /var | awk '/[0-9]G|[0-9][0-9][0-9]M/ && $1 > 100' | sort -rh
这里使用了`awk`命令来过滤出文件大小大于100兆的行。正则表达式`/[0-9]G|[0-9][0-9][0-9]M/`匹配大于100兆的文件大小,`$1 > 100`表示第一列的文件大小必须大于10。然后再使用`sort -rh`对结果按文件大小进行降序排序。
注意,这个命令假设你正在查找/var目录下的文件大小,并且文件大小以G和M为单位。如果你想查找其他目录或使用不同的文件大小单位,需要相应地修改命令中的路径和正则表达式。
[root@oracledb ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 893M 0 893M 0% /dev tmpfs 910M 316M 594M 35% /dev/shm tmpfs 910M 11M 900M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 27G 27G 864K 100% / /dev/sda1 1014M 220M 795M 22% /boot tmpfs 182M 8.0K 182M 1% /run/user/42 overlay 27G 27G 864K 100% /var/lib/docker/overlay2/2461bbc6acac240c76f3aab098779afae24c5a5dd690454d4c6b579686ed5329/merged tmpfs 182M 0 182M 0% /run/user/0 [root@oracledb ~]#[root@oracledb ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 65G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 29G 0 part ├─centos-root 253:0 0 27G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 4.3G 0 rom
1.查看docker镜像存放目录空间大小
du -hs /var/lib/docker/
2.停止docker服务。
systemctl stop docker
3.查看磁盘容量大的空间,且在上面创建新的docker目录。
df -h
mkdir -p /mnt/www/docker/lib
4.迁移/var/lib/docker目录下的文件到新创建的目录/mnt/www/docker/lib
rsync -avz /var/lib/docker /mnt/www/docker/lib
5.编辑 /etc/docker/daemon.json 添加如下参数
{
"graph": "/mnt/www/docker/lib/docker"
}
https://mirror.ccs.tencentyun.com
http://registry.docker-cn.com
http://hub-mirror.c.163.com
{"registry-mirrors": ["https://oenttmu4.mirror.aliyuncs.com"],
"log-driver":"json-file",
"log-opts": {"max-size":"85g", "max-file":"5"},
"graph": "/mnt/www/docker/lib/docker"
},
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"log-driver":"json-file",
"log-opts": {"max-size":"85g", "max-file":"5"},
"graph": "/mnt/www/docker/lib/docker"
},
{
"regustry-mirrors": ["htts://docker.mirrors.ustc.edu.cn"],
"log-driver":"json-file",
"log-opts": {"max-size":"85g", "max-file":"5"},
"graph": "/mnt/www/docker/lib/docker"
}
max-size=85g,意味着一个容器日志大小上限是85g, max-file=5,意味着一个容器最多可以有五个日志,分别是iid+1.json、id+2.json、id+3.json、id+4.json、id+5.json。
6.重新加载docker,并重启docker服务。
systemctl daemon-reload && systemctl restart docker
systemctl daemon-reload
systemctl restart docker.service
systemctl status docker.service
7.检查docker是否变更为新目录/mnt/www/docker/lib
[root@localhost ~]# docker info
...
Docker Root Dir: /mnt/www/docker/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
...
8.删掉docker旧目录
rm -rf /var/lib/docker
常见docker清理方法
docker system df 类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system prune 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
docker system prune -a 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker
问题
故障分析
Docker 有两个服务进程文件,可以通过cd /lib/systemd/system/ && ll|grep docker查看,分别是docker.service unit file 和 docker.socket unit file,上面的警告意味着如果你试图停止docker服务,但docker.socket unit file还处于激活状态。
解决方法
停止 docker socket
# 停止 docker 服务
sudo systemctl stop docker.socket
sudo systemctl stop docker.service
# 启动 docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker.service
删除 docker socket 文件
如果上面”温和“方法并没有解决你的问题,我们可以采用下面”暴力“方法。
# 删除 docker socket 文件
cd /lib/systemd/system/ && rm -rf docker.socket
# 查看 docker 状态,已dead
sudo systemctl status docker.service
# 重新创建 docker.socket
cd /lib/systemd/system/
vim docker.socket
# 添加如下内容
[Unit]
Description=Docker Socket for the API
PartOf=docker.service
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
# 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker.service
此时,再进行 docker 相关操作,比如:停止、启动、重启,均可正常执行。
1. 容器日志文件默认存放路径: /var/lib/docker/docker日志文件后缀是container ID + "-json.log",
查看各个日志文件大小:
1) ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
查询结果sample: -rw-r----- 1 root root 2.0G Jun 28 22:47 /var/lib/docker/containers/
2)find /var/lib/docker/containers/ -name *-json.log |xargs du -sh
查询结果sample : 796K /var/lib/docker/containers/
2. 清理容器日志文件方式:
2.1 rm -rf filepath 需重启Docker后才能生效
在Linux/Unix系统中通过rm命令 or 文件管理器删除文件,只是将文件从文件系统的目录结构上解除链接unlink,如果文件是被打开的(有一个进程在使用),那么进程仍然可以读写该文件,磁盘空间也一直被占用
2.2 cat /dev/null > logfilepath 立即生效无需重启Docker,比如: cat /dev/null > *-json.log
3. 使用Docker镜像创建容器时,docker会创建一些目录,如:
/var/lib/docker/containers/容器ID,如果容器使用了默认的日志模式,那么该容器的日志会以JSON形式保存在此目录 下。
/var/lib/docker/overlay2 , 该目录包含容器的读写层,如果容器使用了自己的文件系统保存了数据,这些数据就会写到此目录下。
4. 查看Docker各类型文件占用空间情况,docker类型包括4种:Images 、 Containers、 Local Volumes、Build Cache **RECLAIMABL 这个字段明确了该类型中可以清理的空间**
docker system df
5. 查看docker容器的日志
docker logs -f 容器名称
6. 查看Linux 各目录使用磁盘空间情况,
按文件大小排序显示前20个文件 : du -a / | sort -n -r | head -n 20
按文件大小排序显示后20个文件 : du -a / | sort -n -r | -n 20
7. 只查询当前目录下各文件大小
du -h --max-depth=1