一个计算机技术爱好者与学习者

0%

好好学Docker:Docker修改工作目录

1. 需求描述

docker的默认工作目录(存储目录)是/var/lib/docker,会存放镜像文件、容器日志和写入到容器临时目录的文件等,默认挂载在系统盘。

而系统盘一般都不会太大,因此最好把docker工作目录更改到数据盘。

本文中,我们会把docker的工作目录从/var/lib/docker改到/data/docker,其中/data目录挂载了数据盘。

2. 思路

想到两个方法:

  • 修改配置法:拷贝数据到新目录,修改工作目录配置到新目录。
  • 软链法:拷贝数据到新目录,使用新目录的软链替换原来的工作目录。不推荐,不知道有没有什么隐藏坑。

3. 修改配置法

参考文档How to change docker root data directory

0、关闭kubelet(可选操作,只针对k8s节点)

1
systemctl stop kubelet

1、关闭docker

1
systemctl stop docker

Warning: Stopping docker.service, but it can still be activated by: docker.socket
该警告意味着:如果你试图连接到docker socket,而docker服务没有运行,系统将自动启动docker。
这是因为除了docker.service单元文件,还有一个docker.socket单元文件,用于套接字激活。

这里可以使用另外一个命令关闭docker,禁止套接字激活。

1
systemctl stop docker.socket

2、更改docker数据存储路径

1
vim /etc/docker/daemon.json

添加:

1
2
3
{
"data-root": "/data/docker"
}

3、拷贝docker数据文件到新路径

1
2
3
mkdir -p /data/docker
cp -rf /var/lib/docker/. /data/docker
mv /var/lib/docker /var/lib/docker.old

4、重启docker&确认工作目录

1
2
systemctl start docker
docker info | grep Dir

5、重启kubelet(可选操作,只针对k8s节点)

1
systemctl start kubelet

4. 软链法

0、关闭kubelet(可选操作,只针对k8s节点)

1
systemctl stop kubelet

1、关闭docker

1
2
systemctl stop docker
systemctl stop docker.socket

2、拷贝docker数据文件到新路径

1
2
3
mkdir -p /data/docker
cp -rf /var/lib/docker/. /data/docker
mv /var/lib/docker /var/lib/docker.old

3、创建软链

1
ln -s /data/docker /var/lib/docker

4、重启docker&确认工作目录

1
2
systemctl start docker
docker info | grep Dir

5、重启kubelet(可选操作,只针对k8s节点)

1
systemctl start kubelet