将docker里的所有正在运行的docker容器commit成images镜像并推送至harbor仓库里

发布时间 2023-10-13 10:01:38作者: 宝英姐姐

脚本一

需求:将本地服务器上正在运行的所有容器打包成镜像并上传至Harbor仓库下的指定项目里 

 

#!/bin/bash

# 设置Harbor仓库的地址和凭据
HARBOR_URL="192.168.1.55:88"
HARBOR_USERNAME="admin"
HARBOR_PASSWORD="Harbor12345"
HARBOR_PROJECT="m55all-images"

# 登录到Harbor仓库
docker login $HARBOR_URL -u $HARBOR_USERNAME -p $HARBOR_PASSWORD

# 获取服务器上正在运行的容器列表
containers=$(docker ps --format "{{.Names}}")

# 遍历每个容器并将其提交为镜像并上传到Harbor
for container in $containers; do
# 获取容器ID
container_id=$(docker ps -qf "name=$container")

# 提取容器名称,将大写字母转换为小写
container_name=$(echo "$container" | tr 'A-Z' 'a-z')

# 生成一个时间戳作为日期,例如 "20231013"
timestamp=$(date '+%Y%m%d')

# 构建镜像名称,格式为 m55all-images/容器使用的镜像_日期
image_name="$HARBOR_URL/$HARBOR_PROJECT/$container_name"_"$timestamp"

# 提交容器为镜像
docker commit $container_id "$image_name"

# 上传镜像到Harbor
docker push "$image_name"

echo "容器 $container 已提交为镜像并上传至Harbor $HARBOR_PROJECT 仓库成功!"
done

echo "所有正在运行的容器已提交为镜像并上传至Harbor $HARBOR_PROJECT 仓库完成。"

 

 

脚本二

需求:将本地服务器上正在运行的所有容器(如果镜像名称以 "jet-ana" 或 "jet-compute" 开头,则跳过)打包成镜像并上传至Harbor仓库下的指定项目里 

 

#!/bin/bash

# 设置Harbor仓库的地址和凭据
HARBOR_URL="192.168.1.55:88"
HARBOR_USERNAME="admin"
HARBOR_PASSWORD="Harbor12345"
HARBOR_PROJECT="m62all-images"

# 登录到Harbor仓库
docker login $HARBOR_URL -u $HARBOR_USERNAME -p $HARBOR_PASSWORD

# 获取服务器上的所有Docker镜像列表
images=$(docker images --format "{{.Repository}}:{{.Tag}}")

# 遍历每个镜像并上传到Harbor的m55all-images仓库
for image in $images; do
# 提取镜像的仓库名称和标签
repo=$(echo $image | cut -d':' -f1)
tag=$(echo $image | cut -d':' -f2)

# 如果镜像名称以 "jet-ana" 或 "jet-compute" 开头,则跳过
if [[ "$repo" == "jet-ana"* || "$repo" == "jet-compute"* ]]; then
echo "跳过镜像 $image"
continue
fi

# 构建Harbor仓库中的镜像引用
harbor_image="$HARBOR_URL/$HARBOR_PROJECT/$repo:$tag"

# 重新标记镜像,将其命名为Harbor仓库的地址
docker tag $image $harbor_image

# 上传镜像到Harbor
docker push $harbor_image

echo "镜像 $image 上传至Harbor $HARBOR_PROJECT 仓库成功!"
done

echo "所有Docker镜像上传至Harbor $HARBOR_PROJECT 仓库完成。"