首先来讲 docker 和 containerd, docker 是个第三方软件, 它依赖于系统的 containerd, 类似于早些年的套壳 ie 浏览器, ie 坏了, 套壳浏览器也会打不开. 这两块的数据也是分开的, 也就是按照很多网上教程设置完 docker 的 json 之后, docker pull 依旧被拉取到了原目录的根本原因.
docker 配置路径文件: /etc/docker/daemon.json
docker 默认数据目录: /var/lib/docker/
containerd 配置路径文件: /etc/containerd/config.toml
containerd 默认数据目录: /var/lib/containerd
所以这两个配置文件, json 和 toml 要配置好, 再把数据目录复制或移动走, docker 才能完整地运行起来
之前干了件蠢事, 由于小鸡只给了 10GB 的固态硬盘空间, 所以我把 docker 迁移到机械盘了, 机械盘很大, 有 1000GB, 但迁移过去后悔了, 在机器重启之后, 从 docker 服务开始启动到正常运行, 花了至少五分钟, 这还是只有三个容器的情况下, 如果再跑大型的 浏览器微信 qq 客户端 docker 那得花十分钟以上, 重启容器也要花费大量时间, 后来 也不需要挂着微信和 qq 了, 就打算迁移回来. 10GB 完全够用.
现在, docker 是运行中的状态. 目前的状态:
docker 数据: /mnt/hdd/root/docker
containerd 数据: /mnt/hdd/root/docker/containerd
我想要迁移回 /var/lib/ 也就是系统默认的地方去.
从这一步开始, 我详细讲解 docker 带着数据迁移的方法. 大家如果是从默认目录迁移至别处, 注意目录的颜色, 蓝色字体是 原目录, 红色字体是 目标目录, 要迁移到的地方.
1, 确认目录位置:
docker info | grep "Docker Root Dir"
2, 停止 service 和 socket
systemctl stop docker.socket
systemctl stop docker.service
service containerd stop
3, 复制 docker 文件, 这里排除了 containerd, 因为我放到一起了:
rsync -a \
--exclude='containerd' \
/mnt/hdd/root/docker/ \
/var/lib/docker/
复制 containerd 中的文件, 由于 containerd 文件极多, rsync 效率会很低, 使用内存中转的方式在后台运行, 这种操作不会在磁盘上生成多余文件, 注意 tar -xf - -C 后面跟的是上级目录, 如果目标已存在不用的 containerd 记得删除:
nohup bash -c 'cd /mnt/hdd/root/docker && tar -cf - containerd | tar -xf - -C /var/lib' > /root/containerd.log 2>&1 &
再使用命令对比目录大小:
nohup bash -c 'du -sh /mnt/hdd/root/docker/containerd/ > /root/mnt.txt 2>&1' &
du -sh /var/lib/containerd/
4, 修改 docker 配置文件:
echo '{"data-root": "/var/lib/docker"}' | sudo tee /etc/docker/daemon.json
cat /etc/docker/daemon.json
5, 修改 containerd 配置文件, 打开 /etc/containerd 文件夹, 修改 config.toml:
root = "/var/lib/containerd"
再看一眼是否改好:
cat /etc/containerd/config.toml
6, 先启动 containerd 再启动 docker
service restart containerd
service restart docker
7, 删除旧的 docker 文件夹和 containerd 文件夹.
如果你在启动 docker 之后, 看不到 images, 看到 containers 变成了类似 md5 的名字, 那就是 containerd 的目录没设置对, 检查 toml 配置文件和实际存放的位置是不是一致, 如果你用 tar -xf - -C 一定要注意后面跟上级目录. 不然会变成 /var/lib/containerd/containerd, 变成这样也没关系, 移动一下就行.
0 条评论:
发表评论