暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker修改默认数据存储目录,优化存储策略,轻松管理容器磁盘,解决存储空间不足问题

IT后浪 2024-07-14
472


点击关注公众号↓

Docker的默认存储目录是/var/lib/docker/
,但是该目录一般存储空间有限,随着Docker的持续使用,安装镜像,启动容器,数据日志写入,会让该目录的的可使用空间越来越小;因此需要修改一下,默认的存储目录,让其放到空间更大的磁盘中;

查看磁盘空间大小

Linux的 df -h
命令可以查看磁盘的空间大小

df -h

返回结果

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                  16G     0   16G   0% /dev
tmpfs                     16G     0   16G   0% /dev/shm
tmpfs                     16G  1.6G   15G  10% /run
tmpfs                     16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/centos-root   98G   11G   88G  11% /
/dev/sda1                2.0G  150M  1.9G   8% /boot
/dev/loop0               4.5G  4.5G     0 100% /mnt/centos
/dev/sdb1                886G   77M  841G   1% /data
tmpfs                    3.2G     0  3.2G   0% /run/user/0

根据上面的返回结果,可以看到 /
跟目录下的空间大小只有 98 G ,而 /data
目录下有 886G 的空间,因此将Docker 的数据存储目录放到 /data
目录下会更好;可以避免Docker 的持续使用照成空间不够用的情况;

修改默认存储目录

  1. 停止Docker服务:运行以下命令停止Docker服务:

    sudo systemctl stop docker

    当使用systemctl stop docker
    命令停止Docker服务时,如果出现错误提示

    Warning: Stopping docker.service, but it can still be activated by: docker.socket

    这通常是因为Docker服务是通过docker.socket
    来启动的。

    要正确停止Docker服务,可以使用以下命令:

    sudo systemctl stop docker.socket
    sudo systemctl stop docker.service

    首先停止docker.socket
    ,然后再停止docker.service
    。这样可以确保Docker服务被完全停止。

    当然这只是一个警告信息,你可以直接忽略,有句话说的很好,程序员只关心错误,不关心警告

  2. 复制现有的Docker数据目录:运行以下命令复制现有的Docker数据目录到新的位置。假设你要将数据目录从/var/lib/docker
    迁移到/data/dockerdata

    sudo rsync -av /var/lib/docker/ /data/dockerdata/

    这将递归地复制所有文件和子目录。

  3. 修改Docker配置文件:打开Docker的配置文件/etc/docker/daemon.json
    ,如果该文件不存在,则创建它。在配置文件中添加以下内容:

    {
      "data-root""/data/dockerdata"
    }

    /data/dockerdata
    替换为你选择的新数据目录的路径。

  4. 重新加载 daemon.json
    文件:daemon.json
    是 Docker 的配置文件,用于配置 Docker 引擎的行为。可以使用该文件重新配置和修改 Docker 引擎的默认行为。当我们修改了 daemon.json
    文件时,需要重新加载该配置文件,使其生效。

    sudo systemctl daemon-reload

  5. 启动Docker服务:运行以下命令启动Docker服务:

    sudo systemctl start docker.service

    Docker将使用新的数据目录启动,并加载现有的容器和镜像。

  6. 验证是否修改成功:运行下面的命令

    sudo docker info

    查看docker info
    返回的结果,如果出现以下内容, Docker Root Dir: /data/dockerdata
    ,说明默认的存储目录修改成功。

  7. 删除原始目录文件,该命令请谨慎执行,或者先不执行,请确保默认存储目录修改成功之后再执行。

    sudo rm -rf /var/lib/docker

请注意,迁移Docker数据目录可能需要一些时间,具体取决于数据目录的大小和系统性能。在迁移过程中,请确保不要对Docker进行任何操作,以免数据丢失或损坏。完成迁移后,你可以验证Docker是否正常工作,并确保容器和镜像都在新的数据目录中。可以执行sudo docker images
命令,查看之前的镜像是否存在。

rsync命令参数解析

上面再复制Docker 数据目录的时候,用到了 rsync
命令,下面详细说明一下

rsync -av
是一个用于文件同步和备份的常用命令。它的含义是将源目录中的文件和目录同步到目标目录,并保持两者之间的一致性。

rsync
命令的常用参数如下:

  • -a
    :归档模式,表示以递归方式复制文件,并保持文件的属性(包括权限、所有者、组、时间等)。
  • -v
    :详细模式,显示文件传输的详细信息。
  • -r
    :递归复制目录及其内容。
  • -l
    :保持文件的硬链接。
  • -p
    :保持文件的权限。
  • -t
    :保持文件的时间戳。
  • -z
    :压缩传输数据。
  • -u
    :仅复制源目录中更新或新增的文件。
  • -h
    :以人类可读的格式显示文件大小。
  • --delete
    :删除目标目录中源目录没有的文件。

使用 rsync
命令的基本语法如下:

rsync [options] <source> <destination>

其中,<source>
是源目录或文件的路径,<destination>
是目标目录的路径。

例如,要将本地的 /path/to/source
目录同步到远程服务器的 /path/to/destination
目录,可以使用以下命令:

rsync -av /path/to/source user@remote:/path/to/destination

这将递归地将源目录中的文件和目录复制到远程服务器的目标目录,并保持两者之间的一致性。

点击关注公众号↓

文章转载自IT后浪,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论