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

一、Why?

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

二、How?

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

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

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

# docker info

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

# sudo systemctl stop docker

创建一个Drop-In 文件

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

# 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

每个人都应是守望者,守望我们的心智,我们的理想,以防它在生活中不知不觉地坠落、被操控和被自己遗忘。。。

在Centos7 更改Docker默认镜像和容器的位置相关推荐

  1. Centos7修改Docker默认存储位置

    Centos7修改Docker默认存储位置 一.前言 Centos7安装docker之后,默认的镜像及容器存储路径为/var/lib/docker,可以使用命令docker info查看. 但是该路径 ...

  2. Docker的镜像和容器的区别

    Docker的镜像和容器的区别 作者:chszs,版权所有,未经同意,不得转载.博主主页:http://blog.csdn.net/chszs 一.Docker镜像 要理解Docker镜像和Docke ...

  3. Docker架构镜像及容器管理

    Docker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  4. Centos7制作docker初始镜像

    Centos7用febootstrap制作docker初始镜像包 使用工具:febootstrap 下载地址:http://down.51cto.com/data/2330414 使用命令: febo ...

  5. Docker之镜像、容器基础操作

    目录 一.docker镜像操作 1.搜索镜像 2.获取镜像(下载镜像) 3.查看镜像 3.1 查看下载到本地的所有镜像 3.2 查看下载的镜像文件信息 3.3 查看具体镜像详细信息 4.为本地的镜像添 ...

  6. Docker之镜像、容器、仓库概念

    Docker镜像 操作系统分为内核和用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相当于是一个 root 文件系 ...

  7. 【docker】关于docker 中 镜像、容器的关系理解

    例如,使用docker 拉取下来一个要用的镜像es docker pull elasticsearch:5.6.9 此时es的镜像存在与服务器上 docker images 对于你运行镜像为一个容器的 ...

  8. docker下载镜像新建容器打包容器打包tar加载tar

    首先查看下现有的容器和image docker ps #已启动的所有容器 docker ps -a #所有容器,包括未启动的 docker images #当前已有的镜像 一.查找images 例:查 ...

  9. 如何更改Docker默认的images存储位置

    Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/vda1,当有多个镜像时,/dev/vda1的空间可能不足,我们可以把d ...

最新文章

  1. Vue.js 2 渐进式前端框架 的最佳学习方法
  2. Python脚本解密RSA加密密码
  3. Luogu 3698 [CQOI2017]小Q的棋盘
  4. android拍照截图组件,Android_Android实现从相册截图的功能,在这篇文章中,我将向大家展 - phpStudy...
  5. 看上冰岛的域名con.is
  6. 全局流控介绍和实现思路
  7. NLP --- 文本分类(基于LDA的隐语意分析训练算法详解)
  8. mysql 分库备份
  9. ffmpeg文档8:软件缩放
  10. iOS字体(UIFont)的相关知识
  11. 中兴服务器默认用户名密码是什么,中兴路由器登录地址默认用户名密码
  12. 解决: Tomcat 启动项目没问题,访问网页页面出现空白无显示
  13. SPDK Delay Bdev 介绍及应用实例
  14. oracle 唯一约束 和 唯一索引
  15. 统计学习方法——李航 笔记
  16. go语言的魔幻旅行38-gin、Gorm整合实现restfui api
  17. Win10 安装VC++6.0
  18. word中输入 千分之一 万分之一 符号
  19. 无人零售的黑科技:RFID技术
  20. 金税四期来了?五种危险行为千万不要有

热门文章

  1. 关于CSS浮动(float,clear)的通俗讲解(经验分享)
  2. mysql —— 分表分区
  3. Magento教程 2:Magento 社群版安装教学!
  4. 【Google 行销课】 初学者投放AdWords容易出现的26个错误
  5. Linux下命令行压缩照片或图片的脚本 (ImageMagick使用心得,convert,import,display实例)...
  6. RBF的一维和二维逼近
  7. C++——C++11中的defalut和delete关键字
  8. LeetCode 326. Power of Three
  9. 【python】numpy array 找出符合条件的数并赋值
  10. 【numpy求和】numpy.sum()求和