在docker的使用中随着下载镜像愈来愈多,构建镜像、运行容器愈来愈多, 数据目录必然会逐渐增大;当全部docker镜像、容器对磁盘的使用达到上限时,就须要对数据目录进行迁移。docker
1.在安装前对/var/lib/docker
(docker默认数据存储目录)目录进行扩容;
2.在docker安装完成后,修改docker默认存储位置为磁盘容量较大的位置;规避迁移数据过程当中形成的风险。vim
使用如下命令查询当前docker数据目录安装路径:bash
docker info | grep "Docker Root Dir"
下文以 /home/rain/docker
这个路径做为要迁移的新 Docker 安装(存储)目录服务器
停掉Docker服务:code
systemctl stop docker
根据上面查到的路径,移动整个/var/lib/docker
目录到数据盘的目的路径(没有rsync命令时需安装rsync):递归
rsync -avzP /var/lib/docker /home/rain/
参数解释:class
-a,归档模式,表示递归传输并保持文件属性。
-v,显示rsync过程当中详细信息。可使用"-vvvv"获取更详细信息。
-P,显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-z, 传输时进行压缩提升效率。效率
备份数据目录容器
mv /var/lib/docker /var/lib/docker.bak
添加软连接配置
ln -s /home/rain/docker /var/lib/
从新启动docker
systemctl start docker
启动 Docker 以后,Docker 写入的路径依然是 /var/lib/docker
,可是由于软连接的设置,实际已是往新的目录写入了。至此,完成了 Docker 安装(存储)目录的迁移。
经过上述方法完成迁移以后,在确认 Docker 能正常工做以后,删除原目录备份数据:
rm -rf /var/lib/docker.bak
直接移出数据,并修改docker默认存放路径位置
停掉Docker服务:
systemctl stop docker
根据上面查到的路径,移动整个/var/lib/docker
目录到数据盘的目的路径(没有rsync命令时需安装rsync):
rsync -avzP /var/lib/docker /home/rain/
在EXECStart后面添加--graph=/home/rain/docker/
vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --graph=/home/rain/docker
重启docker
systemctl daemon-reload systemctl start docker
查看docker数据存储目录
[root@ ~]#: docker info | grep "Docker Root Dir" Docker Root Dir: /home/rain/docker
确认以前的镜像是否还在
docker images
经过上述方法完成迁移以后,在确认 Docker 能正常工做以后,删除原目录数据:
rm -rf /var/lib/docker
备份 fstab文件
cp /etc/fstab /etc/fstab.$(date +%Y-%m-%d)
停掉Docker服务:
systemctl stop docker
根据上面查到的路径,移动整个/var/lib/docker
目录到数据盘的目的路径(没有rsync命令时需安装rsync):
rsync -avzP /var/lib/docker /home/rain/
将备份保存
mv /var/lib/docker/ /var/lib/docker.bak
经过mount挂载的bind命令将新位置挂载到老位置
# 建立挂载点 mkdir /var/lib/docker
mount --bind /home/rain/docker /var/lib/docker mount -a
建立开机自动挂载
vim /etc/fstab # 最后一行添加 /home/rain/docker /var/lib/docker none bind 0 0 # 挂载 mount -a
若有必要重启服务器确认是否成功迁移
reboot
经过上述方法完成迁移以后,在确认 Docker 能正常工做以后,删除原目录备份数据:
rm -rf /var/lib/docker.bak