IT干货网

Docker的镜像存放目录修改与迁移

itxm 2022年03月04日 DevOps 260 0

1、查看docker和文件系统

Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把docker的数据挂载到数据盘,例如:/dev/vdb目录下。

[root@10-10-63-106 docker]# df -lhT Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 xfs 20G 3.8G 16G 20% / devtmpfs devtmpfs 916M 0 916M 0% /dev tmpfs tmpfs 921M 0 921M 0% /dev/shm tmpfs tmpfs 921M 43M 878M 5% /run tmpfs tmpfs 921M 0 921M 0% /sys/fs/cgroup /dev/vdb xfs 100G 11G 90G 11% /data 

2、备份fstab和迁移已有的文件

其中主要的步骤如下:

(1) 首先,备份fstab文件 sudo cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)

(2) 停止docker, 用rsync同步/var/lib/docker到新位置.

   如果rsync没有安装,则使用apt install -y rsync 进行安装,停止docker ,service docker stop,在数据分区中建立要挂载的目录,mkdir /data/docker 使用rsync工具同步,~~rsync -aXS /var/lib/docker/.  /data/docker/~~,这可能需要花费的较长的时间,取决于/var/lib/docker的大小。 

在使用overlay文件系统的Docker上面,会出现数据快速膨胀的问题。
解决办法,使用下面的方法复制文件:
** rsync -avPHSX /var/lib/docker /new/partition/**
解释:

  • -a,档案模式。
  • -v,显示详细信息。
  • -P,显示进度。
  • -H,处理Hardlink为Hardlink,关键!
  • -S,稀疏文件优化处理。
  • -X,保留所有属性。

3、修改fstab,然后重新挂载

修改fstab 在该文件中把下面一行添加到fstab里,将新位置挂载到 /var/lib/docker /data/docker /var/lib/docker none bind 0 0 文件的内如如下:

[root@10-10-63-106 docker]# cat /etc/fstab  
# 
# /etc/fstab 
# Created by anaconda on Thu Jul 31 07:50:13 2014 
# # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/vda1 / xfs errors=remount-ro 0 1 /swapfile none swap defaults 0 0 /dev/vdb /data xfs defaults,noatime 0 0 /data/docker /var/lib/docker none bind 0 0 

(4)重新挂载 mount –a

(5)使用下面的命令检查一下

df

/var/lib/docker/ Filesystem 1K-blocks Used Available Use%

Mounted on /dev/vdb 104806400 47204 104759196 1% /var/lib/docker

(6)进入Container查看我们的空间

bash-4.1# df -lhT 
Filesystem    Type    Size  Used Avail Use% Mounted on rootfs rootfs 9.8G 1.4G 7.9G 15% / tmpfs tmpfs 921M 0 921M 0% /dev shm tmpfs 64M 0 64M 0% /dev/shm /dev/vdb xfs 100G 2.1G 98G 3% /etc/resolv.conf /dev/vdb xfs 100G 2.1G 98G 3% /etc/hostname /dev/vdb xfs 100G 2.1G 98G 3% /etc/hosts tmpfs tmpfs 921M 0 921M 0% /run/secrets tmpfs tmpfs 921M 0 921M 0% /proc/kcore 

没有更改/var/lib/docker路径之前的情况:

bash-4.1# df -lhT 
Filesystem    Type    Size  Used Avail Use% Mounted on rootfs rootfs 9.8G 1.4G 7.9G 15% / tmpfs tmpfs 921M 0 921M 0% /dev shm tmpfs 64M 0 64M 0% /dev/shm /dev/vda1 xfs 20G 13G 6.9G 66% /etc/resolv.conf /dev/vda1 xfs 20G 13G 6.9G 66% /etc/hostname /dev/vda1 xfs 20G 13G 6.9G 66% /etc/hosts tmpfs tmpfs 921M 0 921M 0% /run/secrets tmpfs tmpfs 921M 0 921M 0% /proc/kcore 

宿主机中的分区大小信息:

[root@10-10-63-106 ~]# df -lhT Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 xfs 20G 13G 6.9G 65% / devtmpfs devtmpfs 916M 0 916M 0% /dev tmpfs tmpfs 921M 0 921M 0% /dev/shm tmpfs tmpfs 921M 89M 832M 10% /run tmpfs tmpfs 921M 0 921M 0% /sys/fs/cgroup /dev/vdb xfs 100G 33M 100G 1% /data 

4、总结一下,搞成个脚本来执行

#备份fstab文件 
sudo cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d) 
 
#停止docker 
sudo service docker stop 
 
#/data/docker/为目标路径,根据机器情况设定。 
export DOCKER_PATH=/data/docker/ 
 
#用rsync同步/var/lib/docker到新位置 rsync -avPHSX /var/lib/docker/. $DOCKER_PATH echo $DOCKER_PATH /var/lib/docker none bind 0 0 >> /etc/fstab mount –a df -h 

把上面的保存为脚本,修改里面的路径,然后添加执行权限,执行即可。

然后重启docker(sudo service docker start),镜像存储就使用新的路径了。

挂载新的文件目录还可以使用软连接 ln /var/lib/docker /targetpath/docker,或者使用Docker启动参数-g path来完成。



作者:负二贷
链接:https://www.jianshu.com/p/6d5e471875c6
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!