刚开始使用docker时,不太关注docker 存储镜像和容器的位置,使用默认目录。当使用docker启动的容器越来越多时,镜像和容器占用空间也越来越大。特别是使用Linux云服务器ECS的情况下,默认系统盘大小有限,默认目录是在系统盘,很容易就将磁盘占满,导致无法重新启动更多的容器。
下面以CentOS 7为例,讲解如何修改docker的默认存储位置。修改默认存储位置,分为两种情况:

  1. 保留原有镜像和容器
  2. 不保留原有镜像和容器

1 保留原有镜像和容器

操作方法要点:将原有的镜像和容器移动到新的位置,并在原来的目录创建软链接,软链接指向新的镜像和容器存储位置。
例如,CentOS 7默认docker存储位置是/var/lib/docker,新的存储位置:/mnt/data/docker
操作步骤命令:

  1. 确认当前的docker存储位置
# docker info

找到Server下的Docker Root Dir标记,内容是当前docker镜像和容器的存储位置。

  1. 停止docker服务
systemctl stop docker
  1. 将原有数据移动到目标位置
    例如,CentOS 7默认docker存储位置是/var/lib/docker,新的存储位置:/mnt/data/docker
cp -rp /var/lib/docker /mnt/data/docker
  1. 创建软连接指向实际存储位置
    !!!强烈建议操作之前先进行备份!!!
# 备份
mv /var/lib/docker /var/lib/docker-bak-20211202
# 创建软连接/var/lib/docker,指向新的存储位置/mnt/data/docker
ln -s /mnt/data/docker /var/lib/docker
  1. 启动docker服务
systemctl start docker
  1. 修改结果确认
    运行​​​docker info​​,检查Server下的Docker Root Dir标记,显示的路径应该是新的docker镜像和容器存储位置,如本例的​​/mnt/data/docker​​。

2 不保留原有镜像和容器

例如,CentOS 7默认docker存储位置是/var/lib/docker,新的存储位置:/mnt/data/docker

  1. 确认当前的docker存储位置
# docker info

找到Server下的(1) Docker Root Dir标记,内容是当前docker镜像和容器的存储位置;(2)Storage Driver标记,内容是存储驱动器名称。

  1. 停止docker服务
systemctl stop docker
  1. 创建drop-in目录drop-in文件
mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/docker.conf
echo "[Service]">>/etc/systemd/system/docker.service.d/docker.conf
echo "ExecStart=">>/etc/systemd/system/docker.service.d/docker.conf
echo "ExecStart=/usr/bin/dockerd --graph="/mnt/data/docker" --storage-driver=overlay2">>/etc/systemd/system/docker.service.d/docker.conf

​/mnt/data/docker​​​是新的存储位置,而​​overlay2​​是当前docker所使用的存储驱动。

  1. 重新加载服务守护程序和启动docker服务
systemctl daemon-reload
systemctl start docker
  1. 修改结果确认
    运行​​​docker info​​,检查Server下的Docker Root Dir标记,显示的路径应该是新的docker镜像和容器存储位置,如本例的​​/mnt/data/docker​​。

3 参考

  1. ​​在Centos7 更改Docker默认镜像和容器的位置​​