docker 镜像默认的存储路径是系统盘,运行时也会增加系统盘内存的占用,随着镜像的增加,系统盘爆满运行速度变慢甚至系统崩溃。

流程汇总

  1. 查看硬盘占用 df -h
文件系统        大小  已用  可用 已用% 挂载点
tmpfs           1.6G  2.3M  1.6G    1% /run
/dev/sdc2       219G  203G  4.8G   98% /
tmpfs           7.8G  136K  7.8G    1% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
efivarfs        256K   54K  198K   22% /sys/firmware/efi/efivars
/dev/sda1       511M  6.1M  505M    2% /boot/efi
tmpfs           1.6G  128K  1.6G    1% /run/user/1000
/dev/sda2       3.6T  1.7T  1.8T   48% /media/gpp/3e9aeb8b-2940-41c6-8e36-89995757ff6a6
/dev/sdb        3.6T  3.2T  211G   94% /media/gpp/9a68876e-c08d-4b24-8389-5d41050afa2f

系统盘/dev/sdc2 占用非常多,/dev/sda2则是一个挂载的硬盘,余量充足

  1. 一般镜像文件存诸在/var/lib/docker, 运行docker info 命令查看,
sudo docker system df # 查看docker数据占用的存储空间,-v参数是详细列出
  1. 创建目标地址,new_dir 替换为你的路径
sudo mkdir new_dir 
  1. 将原来的docker镜像文件复制到新的路径下
sudo cp -r /var/lib/docker new_dir

或者使用下面的方式,能够看到进度。

sudo rsync -a /var/lib/docker/ /home/user/docker_work/docker/
  1. 打开docker的配置文件,sudo vim /etc/docker/daemon.json中添加存储路径"data-root"并保存。
{
    "data-root": "new_dir",
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://hub-mirror.c.163.com",
    ],
}
  1. 更新daemon的配置并启动docker
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 查看docker的信息中的路径是否为新地址,镜像存在
docker info
docker images
  1. 删除系统盘下的镜像及环境
sudo rm -rf /var/lib/docker/*

花一天了才填上的坑

  1. 按照上诉流程,在步骤6执行后,docker images 未打印出任何镜像,最后总结应该是我的目标盘挂载写在fstab中,保证开机自动挂载
    原来的挂载是这样的,原本只是觉得这个挂载点路径不简洁,还曾自己变化过。
文件系统        大小  已用  可用 已用% 挂载点
/dev/sda2       3.6T  1.7T  1.8T   48% /media/gpp/3e9aeb8b-2940-41c6-8e36-89995757ff6a6
/dev/sdb        3.6T  3.2T  211G   94% /media/gpp/9a68876e-c08d-4b24-8389-5d41050afa2f

(1)首先确认设备信息,获取设备的 UUID 和 文件系统类型(关键步骤,避免依赖 /dev/sdX 路径):

sudo blkid

(2)创建新的挂载目录,建议挂载到 /mnt 目录下(更规范的存储位置):

sudo mkdir -P /mnt/data1

(3)卸载当前挂载点

sudo umount /dev/sdb
sudo umount /dev/sda2

(4)配置开机自动挂载,编辑 /etc/fstab 文件,添加挂载配置:

sudo cp /etc/fstab /etc/fstab.bak  # 备份原始文件
sudo nano /etc/fstab

(5)在文件末尾添加以下内容(根据实际 UUID 和文件系统类型修改):

# /dev/sdb -> /mnt/data1
UUID=9a68876e-c08d-4b24-8389-5d41050afa2f /mnt/data1 ext4 defaults,nofail,noatime 0 2

# /dev/sda2 -> /mnt/data2
UUID=3e9aeb8b-2940-41c6-8e36-89995757ff6a /mnt/data2 ext4 defaults,nofail,noatime 0 2

参数说明:

defaults:包含读写权限、执行权限等基本选项。

nofail:系统启动时若磁盘不存在,跳过挂载避免启动失败。

noatime:禁止记录文件访问时间,提升性能。

0 2:最后两个数字分别表示备份和磁盘检查顺序(0=不备份,2=非根分区检查)。

(6) 测试并应用配置

sudo mount -a  # 挂载所有 fstab 中定义的设备

检查是否成功:

df -h | grep /mnt/data

(7)验证重启后自动挂载

sudo reboot

(8)重启后测试 docker的镜像存在。

  1. 安装步骤8中执行删除/var/lib/docker的命令后无效,内存未释放。明明加了sudo 权限仍是无法删除。其实原因还是权限不够
sudo su #进入超级用户下
rm -rf /var/lib/docker/* #重新执行删除命令即可

再次查看内存占用,极度舒适

文件系统        大小  已用  可用 已用% 挂载点
tmpfs           1.6G  2.2M  1.6G    1% /run
/dev/sdc2       219G  100G  108G   49% /
tmpfs           7.8G  136K  7.8G    1% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
efivarfs        256K   54K  198K   22% /sys/firmware/efi/efivars
/dev/sdb        3.6T  3.2T  211G   94% /mnt/data1
/dev/sda2       3.6T  1.7T  1.8T   50% /mnt/data2
/dev/sda1       511M  6.1M  505M    2% /boot/efi
tmpfs           1.6G  124K  1.6G    1% /run/user/1000
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐