Docker修改存储驱动VFS to Overlay2

RedHat /CentOS 使用Overlay存储驱动

现象

在centos、Redhat上运行docker的时候偶尔会出现驱动占用大量空间,且删除docker container后无法释放。
发生在使用vfs,device mapper驱动的时候。

排查

检查df,可见当前/data是挂载在一个独立的卷。/dev/mapper/rootvg-datalv

[root@dev-master ~]# df
文件系统                     1K-块    已用     可用 已用% 挂载点
/dev/mapper/rootvg-rootlv 20961280 2787044 18174236   14% /
devtmpfs                   3992528       0  3992528    0% /dev
tmpfs                      4005048       0  4005048    0% /dev/shm
tmpfs                      4005048    8996  3996052    1% /run
tmpfs                      4005048       0  4005048    0% /sys/fs/cgroup
/dev/sda1                   520876  171156   349720   33% /boot
/dev/mapper/rootvg-datalv 26183876   45700 24785064    1% /data
tmpfs                       801012       0   801012    0% /run/user/0

检查docker info,可见当前存储驱动采用的是vfs。官方建议使用overlay/overlay2模式,节省存储空间,且支持最好。

[root@dev-master ~]# docker  info
Containers: 11
 Running: 11
 Paused: 0
 Stopped: 0
Images: 20
Server Version: 18.09.4
Storage Driver: vfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:

查看docker存储路径, 默认是/var/lib/docker, 在本案例中配置的是/data/docker (通过/etc/docker/daemon.json可以指定docker文件路径)
查看xfs_info,可见 ftype=0。

[root@dev-node2 /]# xfs_info /data
meta-data=/dev/mapper/rootvg-datalv isize=256    agcount=4, agsize=1670912 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=6683648, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=3263, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

根据网上所说 https://blog.csdn.net/liukuan73/article/details/77986139

解决方案

有以下两种方式解决:

  1. 采用ext4文件系统格式,dockerd服务自然就会选择overlay2模式、
  2. 继续采用xfs文件系统格式,需要设置xfs ftype=1

解决步骤

方案1,方案2都需要进行一下步骤。

  1. 卸载当前卷
Systemctl stop docker  #停止当前docker服务。 
umount /data
  1. 格式化成ext4,或xfs格式, 注意XFS格式必须指定-n ftype=1 参数。
mkfs.ext4 /dev/mapper/rootvg-datalv
Or
mkfs.xfs -n ftype=1 /dev/mapper/rootvg-datalv

如果格式化不了,提示当前有人访问什么的,可以尝试重启机器一次 root
建议最好先禁用挂载
该步骤可以参考Linux 的mkfs命令。

  1. 重新mount卷
mount /dev/mapper/rootvg-datalv /data

重新挂载到/data目录。

  1. 配置后检查
systemctl start docker 
docker info

执行docker info

[root@dev-master ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.4
Storage Driver: overlay2    #-存储驱动已经升级成overlay2了
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
  1. 配置长期mount
vi /etc/fstab
##添加以下内容
/dev/rootvg/datalv /data ext4 defaults 0 0

关于fstab开机挂载磁盘卷设置,可以参考网上教程。

相关链接:
Docker官方关于存储驱动的讲解
https://blog.csdn.net/u014155354/article/details/86648169
https://blog.csdn.net/liukuan73/article/details/77986139
https://www.jianshu.com/p/00ffd8df6010
fstab详解

你可能感兴趣的:(Docker修改存储驱动VFS to Overlay2)