【Docker】基于给定镜像快速制作docker镜像脚本并上传镜像仓库[Registry]

需求

因为测试需要,需要快速构建一系列 docker 镜像包,并上传到指定镜像仓库。

实现一

该实现利用镜像重新tag的思路制作简单的镜像。
创建文件

vim z-gen-img.sh 

编写程序

#!/bin/bash 

# 
# sudo ./z-gen-img.sh baseImg:tag newImgName [num] [repo-uri]
# baseImg:tag : 基础镜像名称及版本, alpine:latest 
# newImgName : 新镜像名称
# num : 默认 10
# repo-url : 默认 localhost:5000



# 使用示例:
#
# sudo ./z-gen-img.sh alpine:latest img 5 
# 表示:基于alpine:latest生成一个img镜像,生成5个版本,上传到默认仓库 localhost:5000
# sudo ./z-gen-img.sh mysql:8 img01 6 localhost:5001 
# 表示: 基于mysql:8 生成一个app01镜像,生成6个版本,上传到 http://localhost:5001 仓库

# 基础镜像
baseImg=$1
# 镜像名称
name=$2
# 程序版本个数
num=$3

# 仓库地址
uri=$4

echo " 基础镜像: $baseImg"
echo " 镜像名为: $name "
echo " 镜像版本数: $num "

# 程序名不能以数字开头
if [[ ! -n "$baseImg" ]];
then
  echo "基础镜像必填"
  exit 500
fi

# 程序名不能以数字开头
if [[ "$name" =~ ^[0-9].* ]];
then
  echo "名称不能以数字开头"
  exit 500
fi

# 数据校验,如果不输入,则默认是 10 
if [[ ! -n "$num" ]];
then 
  num = 10
fi

if [[ ! "$num" =~ [0-9]* ]]
then
  echo "版本数只能是数字 1 -- 20"
  exit 500
fi

if [[ "$num" -gt 20 || "$num" -lt 1 ]]

then
  echo "版本数范围 1 -- 20"
  exit 500
fi


# 仓库地址处理
if [[ ! -n "$uri" ]];
then 
  uri="localhost:5000"
fi


# 循环生成并推送到仓库


for ((i=1;i<=$num;i++));
do 
newImgName="$uri/$name:0.$i.0"

# 基于基础镜像大标签
docker tag $baseImg $newImgName

# 推送到指定仓库
docker push $newImgName

# 删除本地标签
docker rmi $newImgName

sleep 5

done


使用

语法:
./z-gen-img.sh baseImg:tag newImgName [num] [repo-uri]

  • baseImg:tag : 基础镜像名称及版本, alpine:latest
  • newImgName : 新镜像名称
  • num : 默认 10
  • repo-url : 默认 localhost:5000

使用示例:

  • sudo ./z-gen-img.sh alpine:latest img 5
    表示:基于alpine:latest生成一个img镜像,生成5个版本,上传到默认仓库 localhost:5000
  • sudo ./z-gen-img.sh mysql:8 img01 6 localhost:5001
    表示: 基于mysql:8 生成一个app01镜像,生成6个版本,上传到 http://localhost:5001 仓库

因为使用 docker 用户权限的身份命令,如使用 sudo 命令运行

实现二

高实现利用Dcokerfile 构建镜像原理,包含Dcokerfile和可执行文件z-gen-img.sh 两个文件。

Dockerfile 文件

FROM nginx

RUN echo "demo img"

z-gen-img.sh 文件

#!/bin/bash 

# 
# sudo ./z-gen-img.sh  newImgName [num] [repo-uri]
# newImgName : 新镜像名称
# num : 默认 10
# repo-url : 默认 localhost:5000



# 使用示例:
#
# sudo ./z-gen-img.sh img 5 
# 表示:基于 Dockerfile 生成 img 镜像,生成5个版本,上传到默认仓库 localhost:5000
# sudo ./z-gen-img.shimg01 6 localhost:5001 
# 表示: 基于 Dockerfile 生成一个app01镜像,生成6个版本,上传到 http://localhost:5001 仓库

# 镜像名称
name=$1
# 程序版本个数
num=$2

# 仓库地址
uri=$3

echo " 镜像名为: $name "
echo " 镜像版本数: $num "


# 程序名不能以数字开头
if [[ "$name" =~ ^[0-9].* ]];
then
  echo "名称不能以数字开头"
  exit 500
fi

# 数据校验,如果不输入,则默认是 10 
if [[ ! -n "$num" ]];
then 
  num = 10
fi

if [[ ! "$num" =~ [0-9]* ]]
then
  echo "版本数只能是数字 1 -- 20"
  exit 500
fi

if [[ "$num" -gt 20 || "$num" -lt 1 ]]

then
  echo "版本数范围 1 -- 20"
  exit 500
fi


# 仓库地址处理
if [[ ! -n "$url" ]];
then 
  uri="localhost:5000"
fi


# 循环生成并推送到仓库


for ((i=1;i<=$num;i++));
do 
newImgName="$uri/$name:0.$i.0"

# 基于基础镜像大标签
docker build -t $newImgName .

# 推送到指定仓库
docker push $newImgName

# 删除本地标签
docker rmi $newImgName

# 暂停5秒
sleep 5

done


使用

语法:
./z-gen-img.sh newImgName [num] [repo-uri]

  • newImgName : 新镜像名称
  • num : 默认 10
  • repo-url : 默认 localhost:5000

使用示例:

  • sudo ./z-gen-img.sh img 5
    表示:生成一个img镜像,生成5个版本,上传到默认仓库 localhost:5000
  • sudo ./z-gen-img.sh img01 6 localhost:5001
    表示: 生成一个app01镜像,生成6个版本,上传到 http://localhost:5001 仓库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值