docker 镜像备份和恢复,以gitlab为例

1,690 阅读1分钟

在自己电脑实验完成,希望将整个环境在开发环境还原,而且是内网环境,所以需要将搭建gitlab过程中的所有的镜像都打包。在内网还原

目前使用gitlab+gitlab-runner,其中container registry 使用gitlab自带的,所以不使用harbor,节省空间。

镜像本地备份

#!/bin/bash
IMAGES_LIST=($(docker  images   | sed  '1d' | awk  '{print $1}'))
IMAGES_NM_LIST=($(docker  images   | sed  '1d' | awk  '{print $1"-"$2}'| awk -F/ '{print $NF}'))
IMAGES_NUM=${#IMAGES_LIST[*]}
for((i=0;i<$IMAGES_NUM;i++))
do
  docker save "${IMAGES_LIST[$i]}"  -o "${IMAGES_NM_LIST[$i]}".tar.gz 
done

主要是通过 sed 和 awk 工具,for 循环 使用 docker save 将image 保存到tar中

还原到本地

cd $DIR/images_file
for image_name in $(ls ./)
do
  docker load < ${image_name}
done

在整个压缩包images_file 中 循环使用 docker load 还原到本地

批量上传 自由 container registry


#!/bin/bash

readonly new_repo=192.168.247.191:5005/test

for image in $(docker images --format '{{.Repository}}:{{.Tag}}'); do
	name=${image##*/}
	new_img=${new_repo}/${name}
	echo "Processing ${image} -> ${new_img}"
	docker tag ${image} ${new_img}
	docker push ${new_img}
done

注意格式化输出 docker images --format '{{.Repository}}:{{.Tag}}'

参考