配置或部署记录 - Docker容器迁移Shell脚本

上一篇博客写了下Docker容器迁移的记录,如果只迁移几个容器还好,但一旦要备份的容器多了就比较麻烦,所以写了两个简单的Shell脚本完成Docker容器的迁移。有问题请提出,感谢❤

在Windows上编辑Shell脚本后放到Linux上去运行的时候,如果出现“坏的解释器”这样的错误提示,可能是因为Windos和Linux的换行符不一样导致的。

解决办法:在Linux使用vi/vim编辑要运行的.sh文件
执行 :set ff=unix 命令修改文件的内容格式就可以了

1.完成容器备份成镜像和打包(原服务器上执行):

#! /bin/bash

#备份容器并打成tar包脚本

#备份镜像tar包的导出路径(根据实际修改)
backupDir="/root/docker_backup" 

#若导出文件夹路径不存在,则自动生成
[ ! -d backupDir ] && `mkdir -p $backupDir`


#将当前运行的所有容器id以及名称存放到containerInfoList
containerInfoList=`docker ps | awk '{print $1}'| sed '1d'`


for containerId in $containerInfoList
do
  #镜像名称
  imageName=`docker ps | grep $containerId | awk -F ' {2,}' '{print $7}'`
  #自定义镜像名称
  newImageName="$imageName"
  #执行commit命令(回显新镜像id) 2020.9.8更新:这里后来发现docker版本不同,docker commit回显的数据不同。我这里第二列就是镜像Id,有的版本第三列才是。可以自己先输出回显内容,再根据需要过滤。
  newImageId=`docker commit -p $containerId ""$newImageName":backup" | awk -F ':' '{print $2}'`
  #执行save命令
  `docker save -o ""${backupDir}"/"${newImageName}".tar" "${newImageName}:backup"`
done

2.完成备份镜像的加载(目标服务器上执行):

#! /bin/bash

#加载镜像脚本

#备份镜像所存放路径(根据实际修改)
backupDir="/root/docker_backup"

#获取备份镜像所在路径下所有镜像名称(名称中不可带冒号,若带冒号,删除docker tag 命令)
imageBackupList=`ls $backupDir`
#echo "imageBackupList:"$imageBackupList""

for imageName in $imageBackupList
do
    #load命令加载镜像
    imageId=`docker load -i ""${backupDir}"/"${imageName}"" | awk -F ':' '{print $2}'`
    #修改镜像名称与标签 根据自己需求改名称
    newImageName=$imageName
#    echo "newImageName:"$newImageName""
    docker tag ${imageId} ""$newImageName":backup"
done

这是第一次写ShellScript,不知道有什么适合的编辑器。然后因为Java写得多,用的IDE是IDEA,就在IDEA装了个ShellScript的智能提示插件后开写了,用IDEA的旁友可以玩玩。插件是这个:

在这里插入图片描述
还有一款轻量级的编辑软件:Sublime Text也挺不错的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值