docker停机扩容pool空间

简介:

我这里使用docker的容器做测试机给开发使用,使用都没问题,但随着项目增加,有的项目需要更大的硬盘,我通过(http://dl528888.blog.51cto.com/2382721/1606170)来动态扩展容器的空间,满足使用需求,但我当前设置的docker pool却不足了(默认pool是100g,每个容器给予10g空间),如果pool满了就无法新创建容器,并且无法删除数据来清理(我使用dd来测试),所以为了解决此问题,我准备:

1、备份当前容器与images;

2、停止docker服务;

3、扩展pool的大小(从100g扩大到自定义大小);

4、启动docker并恢复容器与images。

下面是备份前docker的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
09:54:52  # docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.2
Git commit (client): d84a070 /1 .1.2
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.2
Git commit (server): d84a070 /1 .1.2
root@ip-10-10-29-224:~
09:54:56  # docker info
Containers: 15
Images: 10
Storage Driver: devicemapper
  Pool Name: docker-8:3-22676231-pool
  Data  file /var/lib/docker/devicemapper/devicemapper/data
  Metadata  file /var/lib/docker/devicemapper/devicemapper/metadata
  Data Space Used: 95999.2 Mb
  Data Space Total: 102400.0 Mb
  Metadata Space Used: 51.4 Mb
  Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.29.2.el6.x86_64

可以看到docker是1.1.2版本,pool是100g,目前使用了95G

下面是我具体的备份操作步骤

1、记录所有容器对应的ip及防火墙策略

我当前docker主机使用默认docker0做桥接,容器重启后ip会变更,为了方便修改防火墙策略,所以我记录所有docker主机的ip及防火墙策略

记录docker主机ip可以参考使用命令

1
docker  ps  -a| grep  - v  "NAMES" | awk  '{print $NF}' | xargs    -I {} sh -c  "docker inspect {}|grep -i add"

备份防火墙策略

1
cp  /etc/sysconfig/iptables  /tmp/iptables_backup

2、备份所有docker的container

如果扩展pool的话,默认的images与容器都会被清除,所以得备份

1
docker  ps  -a| grep  - v  "NAMES" | awk  '{print $NF}' | xargs    -I {} sh -c  "docker export {} >/tmp/docker_backup/containers/docker_{}.tar"

3、打包备份所有的images

1
docker images| grep  - v  "REPOSITORY" | awk  '{print $1":"$2}'  >docker_images.txt && docker save -o  /tmp/docker_backup/images/ ` cat  docker_images.txt| cut  -d/ -f2`. tar  ` cat  docker_images.txt` &&  rm  -rf docker_images.txt

4、停止当前docker所有container

1
docker stop `docker  ps  -a -q`

5、停止docker服务

1
/etc/init .d /docker  stop

6、备份旧的docker数据

1
<br>
1
cp  -a  /var/lib/docker  /tmp/docker_backup/data_backup

备份数据是为了进行失败回滚

7、删除旧的docker数据库

1
rm  -rf  /var/lib/docker

8、增大pool容量

2个方法,一个是使用dd,一个是使用docker daemon命令

使用dd的,把pool增大到600G

1
dd  if = /dev/zero  of= /var/lib/docker/devicemapper/devicemapper/data  bs=1G count=0 seek=600

seek后面是大小

使用docker daemon的

1
--storage-opt dm.loopdatasize=600G --storage-opt dm.loopmetadatasize=8G

9、启动docker

1
/etc/init .d /docker  start

10、恢复images

1
2
cd  /tmp/docker_backup/images/
docker load test1:new<test1. tar

使用docker load一个一个的恢复吧

11、恢复容器

1
2
cd  /tmp/docker_backup/containers/
cat  test1. tar  |docker  import  - test1:new

12、启动容器并记录ip

上一步恢复的话,是把备份的容器做成了images,如果想启动就进行docker run,比如我有个images是test1:new

1
  docker run --privileged -d   --name= "test1"    test1:new  /usr/sbin/sshd  -D

13、调整防火墙

记住新的容器ip,并根据第一步备份的防火墙策略,进行修改

心得:

如果容器都使用默认的10g空间,迁移没有出现问题,但如果容器进行了动态扩展,比如默认10g空间,你扩展到了30g或者更高,那么备份恢复容器的时候,会出现下面报错

1
2
[c3c929fe] +job  import (-, cocos-play, )
write  /var/lib/docker/devicemapper/mnt/19b84c235a7ed914871c0f10b5b17af9fc89955b077ad85afe0ec6e4b253c92b/rootfs/home/www/cocosplay/uploads/neatgame/ah2ssp/r_scene_20 .cpk: no space left on device

这个错误在google里查看有2个方法解决,但我测试了,都未解决

第一个方法是说物理内存不足,第二个方法是说使用docker临时目录

具体issue参考https://github.com/coreos/coreos-vagrant/issues/49

所以建议大家进行别动态扩展容器磁盘空间,尽量使用volume来挂载。

另外1.3及以上我测试是无法对容器进行动态扩展空间,给官方提出issue也没人回答,地址是https://github.com/docker/docker/issues/11153




 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1618893,如需转载请自行联系原作者


相关文章
|
存储 Shell 网络安全
|
10月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2530 10
|
Kubernetes 关系型数据库 文件存储
手把手教你完成极空间 NAS Docker 镜像加速配置
本教程详细介绍了如何在极空间NAS上配置轩辕镜像加速器,以提升Docker镜像的下载速度与稳定性。内容涵盖账号注册、网络确认、加速器设置及验证方法,并提供常见问题解决方案,帮助用户高效完成容器化应用部署。
4638 1
|
9月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
933 6
|
Linux Docker 容器
在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
1515 0
|
存储 开发者 Docker
|
存储 JSON 安全
Docker 的 overlay2 扩容教程
Docker 的 overlay2 扩容教程
1427 4
|
存储 NoSQL 算法
接近3w详解Docker搭建Redis集群(主从容错、主从扩容、主从缩容)
接近3w详解Docker搭建Redis集群(主从容错、主从扩容、主从缩容)
504 0
|
存储 监控 NoSQL
如何使用Docker容器工具实现Redis分布式存储、容错切换、扩容缩容?
如何使用Docker容器工具实现Redis分布式存储、容错切换、扩容缩容?
428 2
|
应用服务中间件 Linux nginx
Docker | 使用dockerfile生成镜像,以及清理docker空间
Docker | 使用dockerfile生成镜像,以及清理docker空间
559 0
Docker | 使用dockerfile生成镜像,以及清理docker空间

热门文章

最新文章