CentOS docker 修改默认镜像存储路径

技术 Jun 05, 2019

环境:CentOS-7,docker 1.13.1

(注意自己的系统与docker的版本 - 还有请务必看完文章之后再操作,不然则后果自负)

docker默认的存储镜像路径为 /ver/lib/docker

众所周知,我们一般不会采用默认的存储位置,因为镜像文件通常较大,越是搭建的服务系统越多,宿主机的硬盘压力也是一个问题,而且每个镜像还有自己的挂载卷等等,当然这些不在本文章的讨论范围。

so 我们不能把数据存放在系统挂载卷上,应切换到对应的数据卷路径上

进入正题:修改docker的配置文件 /usr/lib/systemd/system/docker.service

添加 grap 配置 --graph="your path" \  修改保存之后

重新加载配置文件

systemctl daemon-reload

重启docker服务

systemctl restart docker.service

执行 docker info 查看 docker服务的当前信息

Docker Root Dir : / "your path" 说明配置成功

建议你下载个镜像之后 去对应文件夹里 查看是否成功

之后再重启服务器 reboot 然后再看docker 里面的镜像是否还在

docker images 执行之后 如果发现 下载的镜像消失了.

恭喜你.和我的情况一样.你可能会怀疑人生,然后再执行 docker info 发现

Docker Root Dir 的路径并没有问题。这里我的做法是删除掉原来的  /ver/lib/docker 文件夹

当然在删除之前如果你想要里面的数据我建议你先copy之后再删除或者直接移动文件夹更换你想要的文件夹名称,或者不换名称都无所谓。重要的是 让 /ver/lib/docker 不复存在 之后你在试一试,我想就应该没问题了。至少我是如此


2019-6-16

本以为是配置好了的,结果事情果然没有那么简单,由于对docker的了解还不够多。

这次服务器供应商突然修复服务器的硬件设备,导致大部分服务器强制关机。(所以还是不要贪便宜买杂牌云服务器)

我的服务器也关机了。但是修复好之后, 服务器重启 我发现我的博客仍然不能访问。我设置的docker是开机自启,容器跟随启动。然而好像并没有生效,我自然而然需要去排查问题所在。(我上次真的以为已经配置好了。结果好像却被打脸了)

登录服务器之后 执行 docker images 发现镜像又像上次一样没了。说明上次那样操作其实是错误的根本就没有生效。(这里说没有生效应该不对,配置好了是生效了的,但是随着宿主机重启之后,配置就出现了问题)

虽然docker info 下看到的Docker Root Dir 路径没问题 但其实已经出现问题,因为执行 docker images 和 docker ps -a 均没有任何信息。而且此时如果关闭docker 服务 service docker stop 之后你就启动不了docker了

你启动docker 会执行 service docker start 之后会报错,无法启动docker。

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

以上是启动错误信息,就算是执行 systemctl status docker.service ,journalctl -xe查看错误详情根本看不出个什么鬼。

这里想要看出具体的错误信息,直接执行 dockerd 启动docker服务器 就会看到启动日志信息。去里面排除错误

我在排查这个错误的途中,我学习到了很多知识,docker的5种存储驱动模式

简书:https://www.jianshu.com/p/00ffd8df6010

别人的博客:https://blog.csdn.net/qq_34018840/article/details/89853119

AUFS、Btrfs、Device mapper、OverlayFS、ZFS

最后我选择了 OverlayFS 的升级版本 Overlay2

然后我发现我原来的驱动模式是 Device mapper

我执行docker info  最下面有个 提示信息告诉我 Device mapper 这个模式只是测试环境下自动选择的,在生产环境可以自定义切换。这个更加确定我要切换Overlay2模式的兴趣,我先没有着急切换。继续找这个神奇的现象。

宿主机重启之后为啥 docker读取不到 /home/docker_data下的镜像文件呢?

我在google,百度,github,知乎,帖子,简书,官方文档,都找不到这个问题,

最后在docker的官方社区里面发现有个外国佬出现了和我差不多情况的问题。

他们讨论说这是版本问题。我就寻思着好吧 我看来要装个新点的版本

于是我就yum remove docker 以及 yum remove docker-selinux,彻底删除docker之后重新安装了一个版本 (注意:Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。)

重新装了 docker-ce-17.12.0.ce 版本。(听说最稳定的版本)

配置了 /etc/docker/daemon.json

启动docker 发现我的linux内核不能支持 overlay2 存储驱动方式。于是我升级了内核,需要4.0以上的内核才可以支持。

之后我执行docker info 发现又有提示 告诉我 我的磁盘不能支持 d_type,我又去格式化了我的挂载盘,格式化为 ftype=1 的 xfs 执行 xfs_info /home 查看信息(ftype=1)说明d_type支持

并配置了docker默认的镜像存储位置 到我格式化 可以支持 d_type的数据挂载盘,重启docker。

再执行 docker info 就没有任何警告信息。并已经开启了 d_type, 存储方式也修改为了overlay2

我感觉我已经很完美了,这次。毕竟执行 docker info 都没有任何警告。

我立刻下载了个tomcat 镜像 发现镜像已经放在指定的文件夹 太好了!

我立刻执行 reboot 重启宿主机

重启之后 docker images 镜像又没了!!!!!!!

我是谁 我在干什么,我做了这么多 我都是在干嘛?????

我真的是服了。不知道我哪里做错了什么步骤。

哎,最后我是这样解决的问题。把挂载数据盘 挂载到了 /ver/lib/docekr 这个文件夹下,并且设置了开机自动挂载。删除了/etc/docker/daemon.json 中的 data-root的配置

之后再宿主机重启 执行 docker images 就看见了我的镜像。。。。。容器也自动启动了起来。这次就算是断电 关机都不怕了。宿主机重启docker会自动启动容器的。

但之后我用阿里云服务器,什么事情都没有,一切正常,所以可能还是硬件问题。

tanzhuo

咸鱼一只