需求

Docker 的镜像以及运行时产生的数据会占据大量的磁盘空间,因此有必要将此目录转移至大容量磁盘。

环境信息

# 系统版本
cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)

# docker 版本
docker -v
Docker version 19.03.12, build 48a66213fe

实现

方式一:自定义配置(推荐)

There are a number of ways to configure the daemon flags and environment variables for your Docker daemon. The recommended way is to use the platform-independent daemon.json file, which is located in /etc/docker/ on Linux by default.

推荐使用 /etc/docker/daemon.json 自定义配置。

操作过程

# 关闭 docker
systemctl stop docker
systemctl status docker

# 移动文件
mv /var/lib/docker /data

# 新增文件 /etc/docker/daemon.json,默认不存在
cat /etc/docker/daemon.json 
{
    "data-root": "/data/docker"
}

# 重启 docker,start 无效
systemctl restart docker

# 查看镜像是否仍存在
docker images

方式二:软链接

Docker supports softlinks for the Docker data directory (/var/lib/docker) and for /var/lib/docker/tmp.

Docker 的数据目录支持软链接。

操作过程

# 查看 docker 数据目录大小
du -sh /var/lib/docker
8.9G /var/lib/docker

# 关闭 docker
systemctl stop docker
systemctl status docker

# 移动文件
mv /var/lib/docker /data

# 创建软链接
ln -s /data/docker /var/lib/

# 启动 docker
systemctl start docker

# 查看镜像是否仍存在
docker images

# 查看 docker 数据目录大小
du -sh /var/lib/docker
0 /var/lib/docker

du -sh /var/lib/docker/
12G /var/lib/docker/

du -sh /data/docker/
12G /data/docker/

方式三:修改启动参数(不推荐)

–data-root string Root directory of persistent Docker state (default “/var/lib/docker”) –data-root string Docker 状态持久化的根目录(默认“/var/lib/docker”)

操作过程

# 查看 docker 数据目录大小
du -sh /var/lib/docker
4.8G /var/lib/docker

# 关闭 docker
systemctl stop docker
systemctl status docker

# 移动文件
mv /var/lib/docker /data

# 增加参数 --data-root /data/docker
vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd \
          --data-root /data/docker \
          $DOCKER_OPTS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $DOCKER_DNS_OPTIONS \
          $INSECURE_REGISTRY

# reload
systemctl daemon-reload

# 启动 docker
systemctl start docker

# 查看镜像是否仍存在
docker images

参考

  • https://docs.docker.com/engine/reference/commandline/dockerd/
  • https://docs.docker.com/config/daemon/systemd/