Docker工作目录迁移
安装docker,默认的情况容器的默认存储路径会存储系统盘的 /var/lib/docker 目录下,系统盘一般默认 50G,容器输出的所有的日志,文件,镜像,都会存在这个地方,时间久了就会占满系统盘。
解决办法:
1、停掉docker服务
XML/HTML代码
- systemctl stop docker
2、找到一个大的磁盘空间,创建存储目录
XML/HTML代码
- mkdir -p /home/docker/lib/
XML/HTML代码
- rsync -r -avz /var/lib/docker /home/docker/lib/
4、备份原数据目录
XML/HTML代码
- mv /var/lib/docker /var/lib/docker.old
5、添加软链接
XML/HTML代码
- ln -s /home/docker/lib/docker /var/lib/
XML/HTML代码
- systemctl start docker
7、确认服务没有问题后,删除备份的目录
XML/HTML代码
- rm -rf /var/lib/docker.old
也可以用以下命令,原理一样。
软连接目录
XML/HTML代码
- #停止docker服务
- systemctl stop docker
- #创建备份目录,防止迁移失败
- cp -r /var/lib/docker /var/lib/docker-bak
- #迁移到新目录
- mv /var/lib/docker /data/docker
- #创建软连接
- ln -s /data/docker/ /var/lib/docker
- #启动docker
- systemctl start docker
- #查看容器
- docker ps
最新:修改默认数据存储目录(推荐)
默认情况下,docker数据存储目录为/var/lib/docker,可以通过docker info查看:
XML/HTML代码
- docker info|grep 'Docker Root Dir'
- 回显:
- Docker Root Dir: /var/lib/docker
可以通过以下方式个性数据存储目录。
方式一,修改启动配置/usr/lib/systemd/system/docker.service。
方式二,修改配置文件/etc/docker/daemon.json。
1. 修改启动配置
XML/HTML代码
- 查看默认的启动配置:
- grep 'ExecStart' /usr/lib/systemd/system/docker.service
- 回显:
- ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
- 查看dockerd帮助信息:
- dockerd --help|grep 'data-root'
- 回显:
- --data-root string Root directory of persistent Docker state (default "/var/lib/docker")
- 可以看到,只用增加--data-root参数就可以设置数据存储目录,我们在启动配置中增加--data-root=/data/docker配置,修改后配置如下:
- grep 'ExecStart' /usr/lib/systemd/system/docker.service
- 回显:
- ExecStart=/usr/bin/dockerd -H fd:// --data-root=/data/docker --containerd=/run/containerd/containerd.sock
- 注意,此处的数据存储目录/data/docker不需要我们手动创建。
命令一键修改
XML/HTML代码
- 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代码
- # 重新加载配置
- systemctl daemon-reload
- # 重启docker服务
- systemctl restart docker
- # 查看docker服务状态
- systemctl status docker
查看目录信息:
XML/HTML代码
- ls -lah /data/docker/
- ls -lah /var/lib/docker/
- du -sh /var/lib/docker/
- du -sh /data/docker/
可以看到修改数据存储目录后,原先的存储的数据并没有完成复制到新的存储目录中。
将原来目录中的文件迁移到新的目录中:
XML/HTML代码
- # 复制原来的数据目录
- /bin/cp -rf /var/lib/docker /data/
- # 重启docker服务
- systemctl restart docker
- # 再次查看镜像,可以看到镜像数据又恢复了
- docker images
- # 查看新的数据目录信息
- docker info|grep Root
- Docker Root Dir: /data/docker
2. 修改配置文件
我们将先启动配置文件还原,然后再重启docker服务:
XML/HTML代码
- # 使用vim编辑启动文件保存后,查看启动命令
- grep 'ExecStart' /usr/lib/systemd/system/docker.service
- ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
- # 重新加载配置
- systemctl daemon-reload
- # 重启docker服务
- systemctl restart docker
- # 查看当前数据存储目录,可以数据存储目录已经还原了
- docker info|grep Root
- Docker Root Dir: /var/lib/docker
修改配置文件/etc/docker/daemon.json,如果该文件不存在则创建该文件。
XML/HTML代码
- mkdir -p /etc/docker
- cat > /etc/docker/daemon.json <<EOF
- {
- "data-root": "/data/docker"
- }
- EOF
查看配置是否修改成功
XML/HTML代码
- cat /etc/docker/daemon.json
然后重启docker服务:
XML/HTML代码
- # 重启docker服务
- systemctl restart docker
- # 查看当前数据存储目录
- docker info|grep Root
- Docker Root Dir: /data/docker
可以看到数据存储目录已经更新了。