docker安装 搭建私库 删除私库镜像 打印私库镜像 的shell脚本

本文介绍如何使用Shell脚本进行Docker私有仓库的安装、搭建、镜像管理和查询,包括自定义配置、镜像删除及列表打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装docker shell脚本

#!/bin/bash

hub_docker="hub.dy.com"

yum install -y epel-release docker

sed -i "s#--selinux-enabled --log-driver=journald#--selinux-enabled=false --insecure-registry $hub_docker:5000 --log-driver=json-file --storage-driver=overlay2#g"  /etc/sysconfig/docker

# 开机自启
/usr/bin/systemctl daemon-reload
/usr/bin/systemctl enable docker
/usr/bin/systemctl start docker

2.私服的搭建 shell脚本

#!/bin/bash

docker pull registry

[ -d /home/registry ] || mkdir -p /home/registry
cat <<EOF >/home/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
EOF

docker run -itd -v /home/registry/:/var/lib/registry/ -v /home/registry/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --restart=always --privileged=true --name registry registry

3.删除私库里面的镜像 shell脚本

#!/bin/bash

docker_name="$1"
docker_tag="$2"
docker_hub_url="hub.dy.com:5000"
docker_registry_container_id=`docker ps |grep registry |awk '{print $1}'`

if [ "$docker_tag" = "" ]; then
	docker_tag="latest"
fi

#获取image的sha256
function get_docker_sha256(){
	docker pull $docker_hub_url/$docker_name:$docker_tag > /dev/null 2>&1    #先下载下来 获取sha256
	sha256=`docker inspect $docker_hub_url/$docker_name:$docker_tag | grep RepoDigests -A 5 | grep $docker_hub_url| grep sha256|awk -F '@' '{print $2}'|awk -F'"' '{print $1}'`
	#docker rmi  $docker_hub_url/$docker_name:$docker_tag		#然后删除本地镜像  是否删除
	echo $sha256
}

#删除镜像索引
function delete_images_index(){
    sha256=`get_docker_sha256`
	echo $sha256
	curl -I -X DELETE http://$docker_hub_url/v2/$docker_name/manifests/$sha256
}

#删除镜像数据
function delete_images_data(){
	docker exec -it $docker_registry_container_id registry garbage-collect /etc/docker/registry/config.yml 
}

function main()
{
	delete_images_index
	delete_images_data
	systemctl restart docker	#重启docker  否则再次push 已经删除的镜像会出错
}

main

4.打印私库里面的所有镜像 shell脚本

#!/bin/bash

#本脚本可以打印私有镜像库中所有的镜像
#私有镜像库地址
HUB_URL=hub.dy.com:5000
#取得所有私有镜像库的所有镜像
IMAGESLIST=$(curl -s http://${HUB_URL}/v2/_catalog)
#echo ${IMAGESLIST}
#删除后2个字符
IMAGESLIST=${IMAGESLIST::-2}
#删除前面17个字符
IMAGESLIST=${IMAGESLIST:17}
#echo ${IMAGESLIST}
#要将$a分割开,先存储旧的分隔符
OLD_IFS="$IFS"
#设置分隔符
IFS="," 
#如下会自动分隔
arr=($IMAGESLIST)

#遍历数组
for IMAGENAME in ${arr[@]}
do
	#去掉引号
	IMAGENAME=${IMAGENAME:1}
	IMAGENAME=${IMAGENAME::-1}
	#echo $IMAGENAME
	S1=$(curl -s http://${HUB_URL}/v2/${IMAGENAME}/tags/list)
	
	#取得[]中间的版本列表
	S1=${S1#*[}
	S1=${S1%]*} 
	#echo $S1
	
	arr1=($S1)
	#遍历数组
	for VAR in ${arr1[@]}
	do
		#去掉引号
		VAR=${VAR:1}
		VAR=${VAR::-1}
		echo $HUB_URL/$IMAGENAME:$VAR
	done
done

#恢复原来的分隔符
IFS="$OLD_IFS"
### 如何批量删除私有 Docker Registry 中的镜像 为了批量删除私有 Docker Registry 中的镜像,可以采用脚本化的方式来进行操作。由于 Docker Registry API 提供了管理镜像的功能,因此可以通过调用这些API来实现自动化处理。 #### 使用 `curl` 和 Shell 脚本来批量删除镜像 首先,获取要删除镜像列表。这通常涉及到查询仓库中的所有标签(tag),并决定哪些需要被移除: ```bash #!/bin/bash REGISTRY="registry.example.com" REPO="myrepo" # 获取所有的tags TAGS=$(curl -s https://${REGISTRY}/v2/${REPO}/tags/list | jq -r '.tags[]') for tag in ${TAGS}; do echo "Deleting image: ${tag}" # 删除指定tag的manifest curl -X DELETE \ -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ "https://${REGISTRY}/v2/${REPO}/manifests/${tag}" done ``` 上述脚本通过遍历给定仓库下的所有标签,并逐一发送 HTTP DELETE 请求到相应的 manifest URL 来完成删除动作[^1]。 需要注意的是,在执行此命令之前应当确认目标Registry支持 v2 版本的API接口,并且客户端已经正确配置了认证信息以便能够访问受保护的资源。 另外,如果希望更精细地控制哪些镜像应该被保留或删除,则可以在循环体内加入额外逻辑判断条件,比如基于时间戳或者其他元数据属性筛选特定范围内的版本进行清理工作。 对于某些特殊场景下可能还需要考虑如何安全有效地备份重要数据以及防止误删等问题;建议先在一个测试环境中验证整个流程后再应用于生产环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun_xuegang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值