liunx推送docker镜像仓库脚本(保存下边内容存储为sh文件)
保存脚本到sh文件,并添加执行权限
chmod +x liunx_push.sh
例如:
touch liunx_push.sh
vi liunx_push.sh
chmod +x liunx_push.sh
./liunx_puish.sh
用户名密码、镜像仓库地址和路径请自行修改
仓库名称和标签用空格分隔
执行流程
1、本地如果不存在镜像则会从官方仓库拉取(保证自己的网络可以正常访问)
2、自动打标签并推送
3、推送成功后删除tag镜像
#!/bin/bash
# 设置代码页为 UTF-8
export LANG=en_US.UTF-8
# 设置 Docker 仓库用户名和密码
DOCKER_USERNAME="admin"
DOCKER_PASSWORD="harbor123"
# 设置 Docker 仓库地址和路径
DOCKER_REPO="192.168.21.234:81"
TARGET_PATH="tools"
# 定义镜像名称和标签用空格分隔
IMAGES=("node:20.6.1" "node:16.17.1")
# 登录到 Docker 仓库
echo "正在登录到 Docker 仓库..."
echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin "$DOCKER_REPO"
# 验证登录
if ! docker info > /dev/null 2>&1; then
echo "Docker 登录失败,请检查用户名和密码。"
exit 1
fi
# 构建和推送每个镜像
for IMAGE in "${IMAGES[@]}"; do
# 提取镜像名称和标签
IMAGE_NAME=$(echo "$IMAGE" | cut -d':' -f1)
IMAGE_TAG=$(echo "$IMAGE" | cut -d':' -f2)
# 标记 Docker 镜像
TARGET_IMAGE="$DOCKER_REPO/$TARGET_PATH/$IMAGE_NAME:$IMAGE_TAG"
# 检查本地是否存在镜像,如果不存在则拉取镜像
if ! docker image inspect "$IMAGE" > /dev/null 2>&1; then
echo "本地不存在镜像 $IMAGE,正在拉取..."
docker pull "$IMAGE"
fi
docker tag "$IMAGE" "$TARGET_IMAGE"
echo "推送镜像:$TARGET_IMAGE"
docker push "$TARGET_IMAGE"
# 删除本地的标签
docker rmi "$TARGET_IMAGE"
done
echo "推送完成!"