Docker 停机扩容
备份所有容器
docker ps
-a|grep
-v "NAMES"|awk
'{print $NF}'|xargs
-I {} sudo sh
-c "docker export {} >/tmp/docker_backup/containers/docker_{}.tar"
grep -v “NAMES” 去除含有NAMES的行 awk ‘print $NF’ 将数据分割并取最后一列数据xargs -I {} 将前面所有的标准输出结果作为参数传递给后面的命令(sh)
docker export {} > 路径/文件名 : docker 备份容器命令 ,{}为前面xargs传入参数,实际为容器名或容器ID
管道(管道符 | ) :实现“将前面的标准输出作为后面的标准输入”
xargs是实现“将标准输入作为命令的参数”
awk : 一个强大的文本分析工具。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
~$:echo
"abc<def>ghi" | awk 'BEGIN{
FS=
"[<|>]"
}
{print $
1 "..." $
2 "..." $
3}'
~$: abc...def...ghi
备份镜像
备份所有镜像
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
cat docker_images.txt 输出文件内容 cut -d/ -f2 以“/”为分隔符分割每行字符串,并取其中第2列数据
备份容器对应的镜像
docker ps
-a | grep
-v "NAMES" | awk
'{print $NF}' | xargs
-I {} sudo sh
-c "docker images | grep {}" | awk
'{print $1":"$2}' | xargs
-I @@ sudo sh
-c "docker save -o /docker_bak/image_@@.tar @@"
可以使用 docker rm
(dockerps−q−a)一次性删除所有的容器,dockerrmi
(docker images -q) 一次性删除所有的镜像。