记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

Docker工作目录迁移

Docker工作目录迁移
安装docker,默认的情况容器的默认存储路径会存储系统盘的 /var/lib/docker 目录下,系统盘一般默认 50G,容器输出的所有的日志,文件,镜像,都会存在这个地方,时间久了就会占满系统盘。
解决办法:
1、停掉docker服务
XML/HTML代码
  1. systemctl stop docker
2、找到一个大的磁盘空间,创建存储目录
XML/HTML代码
  1. mkdir -p /home/docker/lib/
3、迁移docker数据到新的数据盘目
XML/HTML代码
  1. rsync -r -avz /var/lib/docker /home/docker/lib/
此步骤可能需要消耗十分钟左右。
4、备份原数据目录
 
XML/HTML代码
  1. mv /var/lib/docker /var/lib/docker.old
5、添加软链接
XML/HTML代码
  1. ln -s /home/docker/lib/docker /var/lib/
6、重启docker服务
XML/HTML代码
  1. systemctl start docker
启动 Docker 之后,Docker 写入的路径依然是 /var/lib/docker ,但是因为软链接的设置,实际已经是往新的目录写入了。至此,完成了 Docker数据目录的迁移。
7、确认服务没有问题后,删除备份的目录
XML/HTML代码
  1. rm -rf /var/lib/docker.old
至此实现完全迁移了Docker的数据路径。
也可以用以下命令,原理一样。
软连接目录
XML/HTML代码
  1. #停止docker服务
  2. systemctl stop docker
  3. #创建备份目录,防止迁移失败
  4. cp -r /var/lib/docker /var/lib/docker-bak
  5. #迁移到新目录
  6. mv /var/lib/docker /data/docker
  7. #创建软连接
  8. ln -s /data/docker/ /var/lib/docker
  9. #启动docker
  10. systemctl start docker
  11. #查看容器
  12. docker ps
确保Docker正常启动,且容器能正常访问后,删除备份目录。
XML/HTML代码
  1. rm -rf /var/lib/docker-bak
CSDN:https://blog.csdn.net/dkbnull/article/details/138476127
最新:修改默认数据存储目录(推荐)
默认情况下,docker数据存储目录为/var/lib/docker,可以通过docker info查看:
 
XML/HTML代码
  1. docker info|grep 'Docker Root Dir'
  2. 回显:
  3. Docker Root Dir: /var/lib/docker
可以通过以下方式个性数据存储目录。
方式一,修改启动配置/usr/lib/systemd/system/docker.service。
方式二,修改配置文件/etc/docker/daemon.json。
1. 修改启动配置
XML/HTML代码
  1. 查看默认的启动配置:
  2. grep 'ExecStart' /usr/lib/systemd/system/docker.service
  3. 回显:
  4. ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
  5. 查看dockerd帮助信息:
  6. dockerd --help|grep 'data-root'
  7. 回显:
  8.  --data-root string                        Root directory of persistent Docker state (default "/var/lib/docker")
  9. 可以看到,只用增加--data-root参数就可以设置数据存储目录,我们在启动配置中增加--data-root=/data/docker配置,修改后配置如下:
  10. grep 'ExecStart' /usr/lib/systemd/system/docker.service
  11. 回显:
  12. ExecStart=/usr/bin/dockerd -H fd:// --data-root=/data/docker --containerd=/run/containerd/containerd.sock
  13. 注意,此处的数据存储目录/data/docker不需要我们手动创建。
命令一键修改
XML/HTML代码
  1. sed -i 's|ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock|ExecStart=/usr/bin/dockerd -H fd:// --data-root=/data/docker --containerd=/run/containerd/containerd.sock|' /usr/lib/systemd/system/docker.service
重新加载配置并重启docker服务:
XML/HTML代码
  1. # 重新加载配置
  2. systemctl daemon-reload
  3. # 重启docker服务
  4. systemctl restart docker
  5. # 查看docker服务状态
  6. systemctl status docker
查看目录信息:
XML/HTML代码
  1. ls -lah /data/docker/
  2. ls -lah /var/lib/docker/
  3. du -sh /var/lib/docker/
  4. du -sh /data/docker/
可以看到修改数据存储目录后,原先的存储的数据并没有完成复制到新的存储目录中。
将原来目录中的文件迁移到新的目录中:
XML/HTML代码
  1. # 复制原来的数据目录
  2. /bin/cp -rf /var/lib/docker /data/
  3. # 重启docker服务
  4. systemctl restart docker
  5. # 再次查看镜像,可以看到镜像数据又恢复了
  6. docker images
  7. # 查看新的数据目录信息
  8. docker info|grep Root

  9. Docker Root Dir: /data/docker
2. 修改配置文件
我们将先启动配置文件还原,然后再重启docker服务:
XML/HTML代码
  1. # 使用vim编辑启动文件保存后,查看启动命令
  2. grep 'ExecStart' /usr/lib/systemd/system/docker.service
  3. ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
  4. # 重新加载配置
  5. systemctl daemon-reload
  6. # 重启docker服务
  7. systemctl restart docker
  8. # 查看当前数据存储目录,可以数据存储目录已经还原了
  9. docker info|grep Root
  10.  Docker Root Dir: /var/lib/docker
修改配置文件/etc/docker/daemon.json,如果该文件不存在则创建该文件。
XML/HTML代码
  1. mkdir -p /etc/docker
  2. cat > /etc/docker/daemon.json <<EOF
  3. {
  4.   "data-root": "/data/docker"
  5. }
  6. EOF
查看配置是否修改成功
XML/HTML代码
  1. cat /etc/docker/daemon.json
然后重启docker服务:
XML/HTML代码
  1. # 重启docker服务
  2. systemctl restart docker
  3. # 查看当前数据存储目录
  4. docker info|grep Root

  5. Docker Root Dir: /data/docker
可以看到数据存储目录已经更新了。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):