【Docker知识】重定向 Docker 的根目录

Docker默认将所有数据存储在系统驱动器的单一目录中,但可以通过配置data-root或使用--data-root标志改变此路径,允许将镜像、容器和卷存储在其他位置,如外存或网络共享。在更改设置后,需重启Docker守护进程以应用变更。注意,这会移除对旧数据的访问,除非事先复制到新路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、说明

        Docker 将下载的镜像、正在运行的容器和持久卷数据存储在系统驱动器上的单个共享目录根目录中。如果您期望在外存(磁盘)、或网络共享存储docker各种对象(比如将一个容器通过U盘拷走),就需要配置个性化存储空间(重定向数据路径)。

二、准备活动

        本指南的主要部分适用于 Linux 的 Docker 引擎和 Windows 和 Mac 上的 Docker 桌面。您需要在所有三个平台上找到您的 Docker daemon.json 文件。这将位于以下位置之一:

  • /etc/docker/daemon.json ( Linux系统).
  • %programdata%\docker\config\daemon.json ( Windows.系统)
  • ~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/etc/docker/daemon.json ( Mac系统)

        Docker 建议 Windows 和 Mac 用户通过 UI 更新配置文件,而不是在文本编辑器中手动应用更改。您可以通过前往 Docker Desktop 界面中的 Preferences > Docker Engine > Edit file 来访问设置窗口。

三、个性化设定您的数据路径

        Docker 数据目录的位置由配置文件中的数据根设置控制。 17.06 之前发布的旧 Docker 版本使用图形代替。您可以通过运行 docker version 命令来检查您获得的版本。

$ docker version
...
Server: Docker Engine - Community
  Engine:
    Version: 20.10.17

        在配置文件中查找或添加相关密钥。将所需的目录路径设置为其值。这是一个 Linux 示例,它将 Docker 数据存储到安装在文件系统中的外部驱动器:

{
    "data-root": "/mnt/docker-data"
}

        进行更改后,您必须重新启动 Docker 守护程序:

$ sudo service docker restart

        Docker Desktop 可以在 Windows 和 Mac 上通过退出然后启动新实例来重新启动。

        如果要保留现有内容,应将当前数据目录的内容复制到新路径。否则,您将从一个干净的平板开始,无法访问以前创建的容器和图像。

$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data

四、在不重新启动的情况下更改数据目录

        在不重启守护进程下,可以通过创建从 /var/lib/docker 到新位置的符号链接来移动数据目录。如果您的主机空间不足,而条件所限,不允许 Docker 服务重启,本节内容就有用。

1)先将现有的 Docker 数据复制到新目录:

$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data

然后建立一个符号链接,将 /var/lib/docker定向到目标位置:

$ sudo ln -s /mnt/docker-data/ /var/lib/docker

       注意:不要将此技术用于快速修改文件系统数据的工作环境。如果在复制现有目录和创建符号链接之间的时间内写入数据,则存在发生不一致的风险。

五、定制路径后,哪些数据被变化了?

        更改 Docker 的根目录会影响守护程序存储的所有不同数据类型。包括:镜像、容器、已安装的插件、Swarm 配置和卷,以及 Docker 构建缓存。

        修改路径会将所有这些数据写入您的新位置。您无法选择性地将特定类型移动到单独的安装点。这意味着选择能够提供良好整体性能的存储位置非常重要。使用慢速外部驱动器可能会损害 docker CLI 操作的响应能力,即使它适合某些类型的数据,例如长期镜像存储。

        在没有每种类型的数据路径支持的情况下,修剪未使用的资源可能是管理 Docker 存储需求的更好方法。不要为 Docker 分配更多空间,而是清理冗余资源并将未使用的镜像推送到单独的中央Registry。这可以释放主机上的大量空间。

六、临时性应用不同路径

        您可以通过在启动守护程序时传递 --data-root 标志来手动启动具有特定数据目录的 Docker 引擎。这可用于在数据目录之间切换或在没有现有数据的情况下运行干净的实例。

$ sudo /usr/bin/dockerd --data-root /mnt/docker-data

        --data-root标志将忽略 daemon.json 文件指定的目录路径。配置的目录将保持不变,以便您将来可以恢复到该实例。

七、总结

        Docker 将其所有数据存储在单个目录树 /var/lib/docker中,包括构建和拉取的镜像、创建的容器和卷。但您可以通过在配置文件中添加设置或在启动守护程序时提供 --data-root 标志来自定义它。

        更改数据目录意味着您现有的数据不会出现在 Docker 中,除非您将其复制到新路径。您可以使用此功能维护多个独立的 Docker 存储库,例如一个用于个人项目,另一个用于工作。但是守护进程需要重启,因为程序是一份,无法同时指向两个数据路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值