在Centos7 更改Docker默认镜像和容器的位置

                      图片出处:https://bobcares.com/wp-content/uploads/docker-change-directory.jpghtml

1、Why?docker

一般,当你开始使用docker时,咱们并不太关心Docker 用于存储镜像和容器的默认目录。当使用Docker进行更多实验时,Docker开始占用大量的空间时,你不得不按下紧急按钮。因此如今是时候把故障排除放在如何改变docker的默认存储位置了。费了很大力浏览了许多网站和论坛后,我没法肯定在Centos7主机上更改Docker镜像和容器的默认目录的步骤。这篇文章提供了特定于Centos7的说明(它也适用于RHEL7)。对于Debian,我能够找到不少文档和“如何”在互联网上发布相关的文章,但Centos7 没有多少。shell

 

2、How?app

在试图改变Docker的默认存储位置时,咱们必须知道一些重要的信息编辑器

✅ Docker 当前使用的默认存储位置
✅ Docker 当前使用的存储驱动程序
✅ 镜像和容器要存放的新存储空间字体

Docker 默认的位置在/var/lib/docker,当前全部的镜像、容器都存储在这儿。若是你有任何在运行的容器,中止这些容器,并确保没有容器在运行,而后运行如下命令,肯定当前Docker使用的存储驱动。(你会在后面的文章中找出为何要记录它)网站

# docker info

在输出的信息中,查找Storage Driver那行,并记下它。在个人主机上是devicemapper。下一步是中止Docker 服务spa

sudo systemctl stop docker

建立一个Drop-In 文件code

下一步是在/etc/systemd/system/docker.service.d 目录下建立一个Drop-In文件“docker.conf”,默认 docker.service.d 文件夹不存在。因此你必须先建立它。htm

# sudo mkdir /etc/systemd/system/docker.service.d
# sudo touch /etc/systemd/system/docker.service.d/docker.conf

建立Drop-In 文件的缘由,是咱们但愿Docker 服务,使用docker.conf文件中提到的特定参数,将默认服务所使用的位于/lib/systemd/system/docker.service文件中的参数进行覆盖。若是你想深刻了解Drop-In,请阅读system.unit文档

定义新的存储位置
如今打开docker.conf增长以下内容:

# sudo vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph="/mnt/new_volume" --storage-driver=devicemapper

保存并退出VI编辑器,/mnt/new_volume 是新的存储位置,而devicemapper是当前docker所使用的存储驱动。若是你的存储驱动有所不一样,请输入以前第一步查看并记下的值。Docker官方文档中提供了更多有关各类存储驱动器的信息。如今,你能够从新加载服务守护程序,并启动Docker服务了。这将改变新的镜像和容器的存储位置。

# sudo systemctl daemon-reload
# sudo systemctl start docker

为了确认一切顺利,运行 # docker info 命令检查Docker 的根目录.它将被更改成/mnt/new_volume

若是你已经有存在的容器和镜像,该怎么办?

若是你想将现有的容器和镜像迁移到新的位置,在修改docker.conf以后,不要从新加载daemon守护程序和启动docker服务 译者注:在不添加docker.conf文件的方式下,使用软连接的方法进行改变根目录。)将/var/lib/docker 中已存在的数据移动到新的位置里。而后建立一个符号连接。

Note:我没有尝试过如下方式,由于我不须要保留现有的容器和镜像,但这些步骤应该有效;若是你遇到任何问题和其它任何替代的方法请在下方评论。我会修改帖子。在你准备尝试冒险以前,请备份一下你的数据。

# cp -rp /var/lib/docker /mnt/new_volume

建立软连接(译者注:建立软链以前,请先将原/var/lib/docker目录修改成其它名字,如/var/lib/docker-backup)

# mv /var/lib/docker /var/lib/docker-backup-2017-0510
# ln -s /mnt/new_volume/docker /var/lib/docker

而后从新加载 daemon守护程序和 启动 docker服务。(译者注:这里无需从新加载daemon守护程序,只需启动docker 服务便可)

# sudo systemctl daemon-reload # sudo systemctl start docker 

如今已存在的数据应该在软链的源目录内,以及新的容器和镜像将存储在新的位置里,即/mnt/new_volume/docker ,运行 # docker info 进行确认。

译者注:步骤正确的话,此时根目录应该指向了软连接的源目录 /mnt/new_volume/docker,以下:)

...省略输出
Name: docker
ID: 5WBA:EF4D:WQ7P:DVRN:JCI4:LWDT:XSR2:G7RE:F5TI:PD3B:A57K:E4QA
Docker Root Dir: /mnt/new_volume/docker
...省略输出

 备注:文中有斜体并有横线的字体的意思是原文做者的有误之处(英语很差,若有误解原文之意还请各位大牛及时指出,不吝赐教),相关位置都有注释。

 

本文属于原创译文,欢迎转载,转载前请务必要注明原英文连接飞走不可

 

 

 

英文原文连接:

https://sanenthusiast.com/tag/docker-root-directory/

参考资料:

http://www.infoq.com/cn/articles/analysis-of-docker-file-system-aufs-and-devicemapper

http://coolshell.cn/articles/17200.html

相关文章
相关标签/搜索