六安网站定制,说一说网站建设的含义,企业产品展示型网站案例,seo研究中心学员案例前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。
前面已介绍了docker很多知识点的操作记录#xff0c;今天这里梳理下docker容器空间扩展的操作。默认情况下#xff0c;docker容器的空…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。
前面已介绍了docker很多知识点的操作记录今天这里梳理下docker容器空间扩展的操作。默认情况下docker容器的空间是10G。在实际生产环境下对docker容器进行热扩容(动态扩容)是非常重要的一个需求。
Docker容器动态扩展的优点
1不需要修改docker配置不需要重启docker服务
2可以直接对运行中的容器进行动态扩展只能增无法缩Docker容器动态扩展的条件
1docker所在宿主机分区的格式必须是ext2、ext3、ext4
2docker存储引擎必须是devicemapper
---------------------------------------------------------------------------------------------------------------------------
这里需要说明一下我在实际操作中遇到的问题
以下Docker容器动态扩容的操作步骤我在centos7上操作是不可行的
xfs是CentOS7的默认文件系统类型可以在centos7系统安装时手动指定所在分区为ext4格式。但即使这样创建容器后发现容器的/分区仍然是xfs格式
就是说centos7下宿主机分区已改为ext4但容器还是xfs。这就导致后面的容器扩展失败使用resize2fs或xfs_growfs都不行
具体原因不明下面的操作均是在centos6下操作的 宿主机分区的格式是ext4
[rootlocalhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 193G 103G 80G 57% /
tmpfs tmpfs 32G 0 32G 0% /dev/shm
/dev/sda1 ext4 194M 79M 106M 43% /boot
/dev/sda2 ext4 721G 136G 549G 20% /home1下载私有仓库里的镜像centos6和centos7下的docker命令和配置还是有所不同的
[rootlocalhost ~]# vim /etc/sysconfig/docker
......
other_args--insecure-registry192.168.1.23:5000
.....[rootlocalhost ~]# service docker restart
Stopping docker: [ OK ]
Starting docker: [ OK ][rootlocalhost ~]# docker pull 192.168.1.23:5000/tomcat7
latest: Pulling from 192.168.1.23:5000/tomcat7
3690474eb5b4: Pull complete
0a444b299d5a: Pull complete
a04895de1996: Pull complete
08e1d80f2b80: Pull complete
fa7cc393f68b: Pull complete
Digest: sha256:b28f263bb8d5de3c93d64e85a5e9ee5cd6a1042f45ecbb951888d897d99e14e2
Status: Downloaded newer image for 192.168.1.23:5000/tomcat7:latest[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
192.168.1.23:5000/tomcat7 latest fa7cc393f68b 2 weeks ago 562.3 MB2创建容器
[rootlocalhost ~]# docker run -ti -d --name my-test -p 8998:8080 192.168.1.23:5000/tomcat7 /bin/bash
813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3[rootlocalhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
813389572d7f 192.168.1.23:5000/tomcat7 /bin/bash 29 seconds ago Up 28 seconds 0.0.0.0:8998-8080/tcp my-test[rootlocalhost ~]# docker exec -ti my-test /bin/bash
[root813389572d7f /]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4 9.9G 703M 8.7G 8% /
tmpfs tmpfs 34G 0 34G 0% /dev
shm tmpfs 68M 0 68M 0% /dev/shm
/dev/sda3 ext4 207G 111G 86G 57% /etc/hosts注意
容器my-test的大小为默认的10G。
上面命令结果中的/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3文件就是my-test容器存储的文件名。3--------------下面开始进行容器空间的动态扩容------------------使用dmsetup查看该文件扇区信息.下面命令结果中的第二个数字即20971520是设备的大小表示有多少个 512bytes 的扇区. 这个值略高于 10GB 的大小。
[rootlocalhost ~]# dmsetup table /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
0 20971520 thin 253:0 13计算20G所需扇区数目
[rootlocalhost ~]# echo $((20*1024*1024*1024/512))
41943040精简快照目标的一个神奇的特点是它不会限制卷的大小。当创建它的时候一个精简的卷使用0个块当开始往块里面写入的时候它们会从共用的块池中进行分配。
可以写0个块或者是10亿个块这个和精简快照目标没关系。文件系统的大小只和Device Mapper表有关系。
只需要装载一个新的表这个完全和之前的是一样的但是有更多的扇区。仅此而已。将新的扇区大小写入注意只是改变旧表中的第二个数字20971520的数字其他数字不变
[rootlocalhost ~]# echo 0 41943040 thin 253:0 13 | dmsetup load /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3将修改后的容器存储文件激活
[rootlocalhost ~]# dmsetup resume /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3重新查看文件信息
[rootlocalhost ~]# dmsetup table /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
0 41943040 thin 253:0 13更改文件系统大小使变更生。
[rootlocalhost ~]# resize2fs /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is mounted on /var/lib/docker/devicemapper/mnt/813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3; on-line resizing required
old desc_blocks 1, new_desc_blocks 2
Performing an on-line resize of /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 to 5242880 (4k) blocks.
The filesystem on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is now 5242880 blocks long.------------------------------------------------------------------------------------------------------------------
如果这一步出现下面报错
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: 设备或资源忙 当尝试打开 /dev/mapper/docker-253:0-268868570-2163383f446357876b301fb3942b706436b5eea111c06a3acba0006ec5272372 时找不到有效的文件系统超级块.原因是resize2fs仅能支持ext2、ext3、ext4不支持xfs。将docker服务器的文件系统格式调整为ext4即可。
本文操作机是centos6系统分区都是ext4格式故不会出现这个报错
------------------------------------------------------------------------------------------------------------再次登录my-test容器发现容器大小已经更新为20G
[rootlocalhost ~]# docker exec -ti my-test /bin/bash
[root813389572d7f /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4 20G 708M 18G 4% /
tmpfs tmpfs 32G 0 32G 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3 ext4 193G 103G 80G 57% /etc/hosts------------------------------------------------------------
扩容后可能出现的问题停止该容器后无法重新启动-
当容器扩容之后由于dm认为设备块大小仍然为之前设置的初始大小所以会发生无法起启动的情况这时只要重新操作即可。
1)必须要先启动一下让其生成dm文件才能修改
[rootlocalhost ~]# docker start my-test
#此时会报错不要理会执行以下操作即可
[rootlocalhost ~]# echo 0 41943040 thin 253:3 725 | dmsetup load /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
[rootlocalhost ~]# dmsetup resume /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3
--------------- 为了方便后续容器动态扩容可以采用下面的Dynamic_Modify_Docker_Disk.sh脚本经测试可以使用 #!/bin/bash
#This script is dynamic modify docker container disk
#Author Deng Lei
if [ -z $1 ] || [ -z $2 ]; thenecho Usage: container_name increase_capacityecho Example: I want increase 11G to testecho The command is: sh basename $0 test 11exit 1fi
if [ docker inspect $1 /dev/null echo 0 || echo 1 -eq 1 ];thenecho The container $1 is no exist!exit 1
fi
container_iddocker inspect -f {{ .Id }} $1
now_diskdmsetup table /dev/mapper/docker-*-$container_id|awk {print $2}
disk$(($2*1024*1024*1024/512))
if [ $disk -lt $now_disk ];thenecho I cant shink container $1 from $(($now_disk*512/1024/1024/1024))G to ${2}G!I only modify contanier increase disk!exit 1
fi
dmsetup table /dev/mapper/docker-*-$container_id|sed s/0 [0-9]* thin/0 $disk thin/|dmsetup load /dev/mapper/docker-*-$container_id
dmsetup resume /dev/mapper/docker-*-$container_id
resize2fs /dev/mapper/docker-*-$container_id
if [ $? -eq 0 ];thenecho dynamic container $1 disk to ${2}G is success!
elseecho dynamic container $1 disk to ${2}G is fail!
fi
比如给my-test容器动态扩容到30G[rootlocalhost ~]# chmod 755 Dynamic_Modify_Docker_Disk.sh
[rootlocalhost ~]# sh Dynamic_Modify_Docker_Disk.sh my-test 30
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is mounted on /var/lib/docker/devicemapper/mnt/813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3; on-line resizing required
old desc_blocks 2, new_desc_blocks 2
Performing an on-line resize of /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 to 7864320 (4k) blocks.
The filesystem on /dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 is now 7864320 blocks long.dynamic container my-test disk to 30G is success!登陆容器查看已扩容至30G
[rootlocalhost ~]# docker exec -ti my-test /bin/bash
[root813389572d7f /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/docker-8:3-4850707-813389572d7f569e7b3705070033b43cf9e42ed9d304e03662c92533838ddec3 ext4 30G 708M 28G 3% /
tmpfs tmpfs 32G 0 32G 0% /dev
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/sda3
动态扩容后对容器进行重启会发生报错此时再运行一次该脚本进行重新扩容空间大小要等于或大于之前的设置出现报错不用管再启动容器即可注意docker容器目前是无法进行动态缩减的仅能进行增加操作。 --------------------------------------- 下面说下Docker镜像和容器存放目录修改方法------------------------------------------这里为了测试效果将xfs格式的home分区盘卸载格式化为ext4后重新挂载(当然也可以再用之前的xfs格式)。然后将Docker的镜像、容器存放目录由之前默认的/var/lib/docker修改为home分区下的路径。
当然也可以另外新建一个分区,格式化,然后直接挂载到var/lib/docker目录下
[rootlocalhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 150G 5.7G 145G 4% /
devtmpfs devtmpfs 32G 0 32G 0% /dev
tmpfs tmpfs 32G 0 32G 0% /dev/shm
tmpfs tmpfs 32G 474M 31G 2% /run
tmpfs tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/mapper/centos-home xfs 774G 33M 774G 1% /home
/dev/sda2 xfs 397M 120M 278M 31% /boot
tmpfs tmpfs 6.3G 0 6.3G 0% /run/user/0[rootlocalhost ~]# umount /home/ //卸载home分区盘
[rootlocalhost ~]# mkfs.ext4 /dev/mapper/centos-home //格式化home盘为ext4文件格式
[rootlocalhost ~]# mount /dev/mapper/centos-home /home //重新挂载
[rootlocalhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 150G 5.7G 145G 4% /
devtmpfs devtmpfs 32G 0 32G 0% /dev
tmpfs tmpfs 32G 0 32G 0% /dev/shm
tmpfs tmpfs 32G 474M 31G 2% /run
tmpfs tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/sda2 xfs 397M 120M 278M 31% /boot
tmpfs tmpfs 6.3G 0 6.3G 0% /run/user/0
/dev/mapper/centos-home ext4 762G 73M 723G 1% /home接着就可以移动Docker的数据到ext4格式的home磁盘上了
先停止docker服务保证移动的时候数据完整
[rootlocalhost ~]# service docker stop移动Docker的目录到一个备份的目录可以mv改目录名docker重启后会自动生成这个目录也可以将目录下内容全部拷贝到别处届时要想恢复docker数据只需要将备份内容拷贝回来然后重启docker服务即可
[rootlocalhost ~]# mv /var/lib/docker /var/lib/docker_bak //这样再次启动docker服务后镜像及容器数据都不在了。只有将拷贝内容移回来数据才会恢复。修改开启自挂载配置将home分区由之前的xfs改为ext4.
[rootlocalhost ~]# cat /etc/fstab#
# /etc/fstab
# Created by anaconda on Wed Oct 19 15:16:20 2016
#
# Accessible filesystems, by reference, are maintained under /dev/disk
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID349c9816-43e9-4c46-991a-e34e2370ab3f /boot xfs defaults 0 0
/dev/mapper/centos-home /home ext4 defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0[rootlocalhost ~]# mount -a //这条命令是重新加载/etc/fstab文件没有文件里定义的分区挂载没有挂这条命令就会自动挂载上。
[rootlocalhost ~]# mount |grep home
/dev/mapper/centos-home on /home type ext4 (rw,relatime,seclabel,dataordered)最后修改docker的镜像和容器存放路径比如修改为/home/var/docker。
[rootlocalhost ~]# mkdir -p /home/var/docker
[rootlocalhost ~]# vim /etc/sysconfig/docker
......
OPTIONS--selinux-enabled --log-driverjournald --graph/home/var/docker //添加--graph/home/var/docker参数然后启动docker服务发现在新指定的目录/home/var/docker下产生了新数据
[rootlocalhost ~]# service docker start
[rootlocalhost ~]# ls /home/var/docker/
containers devicemapper image network tmp trust volumes接着恢复之前的镜像数据
[rootlocalhost ~]# service docker stop
[rootlocalhost ~]# rm -rf /home/var/docker/*
[rootlocalhost ~]# mv /var/lib/docker_bak/* /home/var/docker/
[rootlocalhost ~]# service docker start
[rootlocalhost ~]# docker images //发现镜像数据已恢复到新目录/home/var/docker下了
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.23:5000/tomcat7 latest 47c5123914a1 8 days ago 562.3 MB
docker.io/redis latest 83d6014ac5c8 13 days ago 183.6 MB
docker.io/ubuntu latest 0ef2e08ed3fa 5 weeks ago 130 MB
docker.io/centos latest 67591570dd29 3 months ago 191.8 MB
docker.io/tomcat latest ebb17717bed4 5 months ago 355.4 MB ----------------------------------------------------温馨提示------------------------------------------------ 1无法卸载分区
[rootlocalhost ~]# umount /home/
umount: /home: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))如上卸载分区时提示无法卸载则是有进程占用/home。
可以使用下面命令来终止占用进程
[rootlocalhost ~]# fuser -m -k /home
/home: 1409 1519ce 1531e 1532e 1533e 1534e 1535e 1536e 1537e 1538e 1539e 1541e 1543e 1544e 1545e 1546e 1547e 1548e 1549e 1550e 1601m再次卸载home分区就成功了。
[rootlocalhost ~]# umount /home/-k 表示自动把霸占home分区的进程kill掉
如果你不是很明确是否要杀死所有霸占设备的程序还可以加一个-i 参数这样每杀死一个程序前都会询问即fuser m -v -i -k /home2如按照上面步骤将docker的存放目录更换到/home/var/docker下。
如果后续再对home分区进行强制卸载然后再重新挂载或格式化的时候会发现有报错
[rootlocalhost ~]# fuser -m -k /home
[rootlocalhost ~]# mkfs.xfs -f /dev/mapper/centos-home
mkfs.xfs: /dev/mapper/centos-home contains a mounted filesystem
[rootlocalhost ~]# mount/dev/mapper/centos-home
mount: /dev/mapper/centos-home is already mounted or /home busy这是因为docker数据还占用着home分区需要将docker服务停了才可以。 转自https://www.cnblogs.com/kevingrace/p/6667063.html