详解docker容器硬盘动态扩容

 更新时间:2017年04月17日 16:53:15   作者:东邪西毒  
本篇文章主要介绍了详解docker容器硬盘动态扩容,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

扩容容器

默认来说,如果你使用 Device Mapper 的存储插件,所有的镜像和容器是从一个初始 10G 的文件系统中创建的。让我们来看看如何从一个更大的文件系统中创建一个容器。

 首先,我们用 Ubuntu 的镜像来创建我们的容器。我们不需要在这个容器里运行任何东西,只需要这个文件(或者关联的文件系统)存在。为了演示,我们会在这个容器里运行 df ,来看一下根文件系统的大小。

 $ docker run -d ubuntu df -h /
4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

由于需要修改 Device Mapper 管理中的一些卷的信息,我们现在用 root 的身份来运行一些命令。所有以#开头的命令都必须以 root 身份来执行。只要能访问 Docker 的 Socket 服务,你也可以用普通用户的身份来执行其他的命令(以$开头)。

 让我们看一下 /dev/mapper ,那里应该有一个对应容器文件系统的符号链接,以 docker-X:Y-Z- 开头:

 # ls -l /dev/mapper/docker-*-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
lrwxrwxrwx 1 root root 7 Jan 31 21:04 /dev/mapper/docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603 -> ../dm-8

注意记住那个全名,我们未来会用到。

 开始扩容:

1、首先让我们来看一下当前卷的信息表:

# dmsetup table docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
0 20971520 thin 254:0 7

第二个数字是设备的大小,表示有多少个 512-bytes 的扇区. 这个值略高于 10GB 的大小。

2、我们来计算一下一个 42GB 的卷需要多少扇区,

  $ echo $((42*1024*1024*1024/512))
88080384

精简快照目标的一个神奇的特点是它不会限制卷的大小。当你创建它的时候,一个精简的卷使用0个块,当你开始往块里面写入的时候,它们会从共用的块池中进行分配。你可以写0个块,或者是10亿个块,这个和精简快照目标没关系。文件系统的大小只和 Device Mapper 表有关系。 

觉得困惑?不要担心。我们只是需要装载一个新的表,这个完全和之前的是一样的,但是有更多的扇区。仅此而已。

3、旧表是 0 20971520 thin 254:0 7 。我们会改变第二个数字,要非常小心保持其他的值不变。你的卷可能不是 7 ,所以要使用正确的值!

这样操作:

复制代码 代码如下:

# echo 0 88080384 thin 254:0 7 | dmsetup load docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

4、现在如果我们再次检查表的信息,步骤和前面一样。首先使用下面的命令激活新表:

复制代码 代码如下:

# dmsetup resume docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

执行完命令后,再次检查一下表的信息,发现它会使用新的扇区数量。

5、我们已经调整了块设备的大小,但是我们仍然需要调整文件系统的大小,我们使用 xfs_growfs 来操作:

(网上很多说到的resize2fs后来看到xfs方式的使用dumpe2fs,该命令在16.04下可能出现文件正在使用或者找不到超级块的错误,)

复制代码 代码如下:

# xfs_growfs docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

docker动态容器扩容成功。

 6、停止该容器后,无法重新启动

当容器扩容之后,由于dm认为设备块大小仍然为之前设置的初始大小,所以会发生无法起启动的情况,这时只要重新操作即可。

$ docker start test#必须要先启动一下,让其生成dm文件才能修改
#此时会报错,不要理会,执行以下操作即可
$ echo 0 41943040 thin 252:0 9 | dmsetup load docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69
$ dmsetup resume docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69

这是一bug

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • docker快速安装rabbitmq的方法步骤

    docker快速安装rabbitmq的方法步骤

    这篇文章主要介绍了docker快速安装rabbitmq的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 解决docker运行tomcat提示找不到文件的问题

    解决docker运行tomcat提示找不到文件的问题

    这篇文章主要介绍了docker运行tomcat提示找不到文件的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-03-03
  • Docker服务迁移的实现

    Docker服务迁移的实现

    本文详细介绍了如何备份和迁移Docker服务数据,包括停止Docker服务、备份Docker数据和DockerCompose文件,使用SCP或Rsync传输备份文件,以及在新服务器上恢复Docker数据和设置权限,文中提供了详细的命令和步骤,确保数据迁移过程顺利进行
    2024-10-10
  • docker限制容器内存的方法详解

    docker限制容器内存的方法详解

    在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪,本文将介绍使用 docker 进行容器内存限制的方法,感兴趣的朋友一起看看吧
    2023-11-11
  • 私有云存储Minio Docker镜像无法启动,提示:Adding local Minio host to 'mc' configuration

    私有云存储Minio Docker镜像无法启动,提示:Adding local Minio

    使用Minio在本地搭建私有云存储时出现无法启动,查看日志频繁输出“Adding local Minio host to 'mc' configuration...”,然后停止了,本文给大家分享私有云存储Minio Docker镜像无法启动,提示:Adding local Minio host to 'mc' configuration,感兴趣的朋友一起看看吧
    2023-11-11
  • Docker制作镜像的完整过程

    Docker制作镜像的完整过程

    本文主要介绍了Docker制作镜像的完整过程,以制作CentOS镜像为例,讲述对镜像自定义,打包以及推送的远程仓库的过程,感兴趣的可以了解一下
    2021-11-11
  • docker的安装及docker-compose详解

    docker的安装及docker-compose详解

    Docker是一种轻量级的容器技术,可以帮助开发者更加方便地打包、发布和管理应用程序,在Linux系统上安装Docker非常容易,这篇文章主要介绍了docker的安装及docker-compose,需要的朋友可以参考下
    2024-05-05
  • Docker Compose 容器编排的实现

    Docker Compose 容器编排的实现

    本文主要介绍了Docker Compose 容器编排的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • .netcore 使用surging框架发布到docker

    .netcore 使用surging框架发布到docker

    这篇文章主要介绍了netcore 使用surging框架发布到docker,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 详解使用阿里云镜像仓库构建国外Docker镜像

    详解使用阿里云镜像仓库构建国外Docker镜像

    这篇文章主要介绍了详解使用阿里云镜像仓库构建国外Docker镜像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论