日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker离线包相关脚本编写示例:docker镜像load/push/save脚本

發布時間:2025/1/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker离线包相关脚本编写示例:docker镜像load/push/save脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概覽

資源地址:

https://github.com/chinaboy007/kube-prometheus/tree/master/manifests/add/images

鏡像清單文件:images.txt

grafana/grafana:6.6.0 quay.io/coreos/k8s-prometheus-adapter-amd64:v0.5.0 quay.io/coreos/kube-rbac-proxy:v0.4.1 quay.io/coreos/kube-state-metrics:v1.9.5 quay.io/coreos/prometheus-operator:v0.37.0 quay.io/coreos/prometheus-config-reloader:v0.37.0 quay.io/prometheus/alertmanager:v0.20.0 quay.io/prometheus/node-exporter:v0.18.1 quay.io/prometheus/prometheus:v2.15.2 quay.io/prometheus/prometheus:v2.17.2 quay.io/external_storage/nfs-client-provisioner:latest jimmidyson/configmap-reload:v0.3.0

導出鏡像:image-save.sh

#!/bin/bash # 定義日志 workdir=`pwd` log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").loglogger() {log=$1cur_time='['$(date +"%Y-%m-%d %H:%M:%S")']'echo ${cur_time} ${log} | tee -a ${log_file} }list="images.txt" #images="images.tar.gz"POSITIONAL=() while [[ $# -gt 0 ]]; dokey="$1"case $key in-i|--images)images="$2"shift # past argumentshift # past value;;-l|--image-list)list="$2"shift # past argumentshift # past value;;-h|--help)help="true"shift;;esac doneusage () {echo "USAGE: $0 [--image-list images.txt] [--images images.tar.gz]"echo " [-l|--images-list path] text file with list of images. 1 per line."echo " [-l|--images path] tar.gz generated by docker save."echo " [-h|--help] Usage message" }if [[ $help ]]; thenusageexit 0 fi#set -e -x#mkdir -p images-$(date +"%Y-%m-%d") #cd images-$(date +"%Y-%m-%d")for i in $(cat ${list}); dodocker pull ${i}if [ $? -ne 0 ]; thenlogger "${i} pull failed."elselogger "${i} pull successfully."fi#docker save ${i} | gzip >images-$(date +"%Y-%m-%d")/$(echo $i |sed "s#/#-#g; s#:#-#g").tgzdocker save ${i} | gzip >images-prometheus-optrator/$(echo $i |sed "s#/#-#g; s#:#-#g").tgzif [ $? -ne 0 ]; thenlogger "${i} save failed."elselogger "${i} save successfully."fi done

導入鏡像:image-load.sh

#!/bin/bash ##用法: #image-load.sh --images-path images-2020-03-19# 定義日志 workdir=`pwd` log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").loglogger() {log=$1cur_time='['$(date +"%Y-%m-%d %H:%M:%S")']'echo ${cur_time} ${log} | tee -a ${log_file} }POSITIONAL=() while [[ $# -gt 0 ]]; dokey="$1"case $key in-i|--images-path)images_path="$2"shift # past argumentshift # past value;;-l|--image-list)list="$2"shift # past argumentshift # past value;;-h|--help)help="true"shift;;esac doneusage () {echo "USAGE: $0 [--image-list images.txt] [--images images.tar.gz]"echo " [-l|--images-list path] text file with list of images. 1 per line."echo " [-l|--images path] tar.gz generated by docker save."echo " [-h|--help] Usage message" }if [[ $help ]]; thenusageexit 0 fi#set -e -x# 鏡像壓縮文件列表 images=$(cat images.txt |sed "s#/#-#g; s#:#-#g") #images_path=images-$(date +"%Y-%m-%d") images_path=images-prometheus-optrator cd $images_path# 導入鏡像 docker_load () {for imgs in $(echo ${images});dogunzip -c ${imgs}.tgz | docker load >/dev/null 2>&1if [ $? -ne 0 ]; thenlogger "${imgs} load failed."elselogger "${imgs} load successfully."fidone } docker_load cd ..

推送鏡像:image-push.sh

#!/bin/bash## 鏡像上傳說明 # 需要先在鏡像倉庫中創建 xxx 項目 # 根據實際情況更改以下私有倉庫地址##用法: #images-push.sh --images-path /opt/xxx/deploy/xxxx-images-$(date +"%Y-%m-%d")# 定義日志 workdir=`pwd` log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").loglogger() {log=$1cur_time='['$(date +"%Y-%m-%d %H:%M:%S")']'echo ${cur_time} ${log} | tee -a ${log_file} }images_hub() {while true; doread -p "輸入鏡像倉庫地址(不加http/https): " registryread -p "輸入鏡像倉庫用戶名: " registry_userread -p "輸入鏡像倉庫用戶密碼: " registry_passwordecho "您設置的倉庫地址為: ${registry},用戶名: ${registry_user},密碼: xxx"read -p "是否確認(Y/N): " confirmif [ $confirm != Y ] && [ $confirm != y ] && [ $confirm == '' ]; thenecho "輸入不能為空,重新輸入"elsebreakfidone }images_hubecho "鏡像倉庫 $(docker login -u ${registry_user} -p ${registry_password} ${registry})"#images=$(docker images -a | grep -v TAG | awk '{print $1 ":" $2}') images=`cat images.txt` namespace=librarydocker_push() {for imgs in $(echo ${images}); don=$(echo ${imgs} | awk -F"/" '{print NF-1}')#如果鏡像名中沒有/,那么此鏡像一定是library倉庫的鏡像;if [ ${n} -eq 0 ]; thenimg_tag=${imgs}#namespace=rancher#重命名鏡像docker tag ${imgs} ${registry}/${namespace}/${img_tag}#刪除原始鏡像#docker rmi ${imgs}#上傳鏡像docker push ${registry}/${namespace}/${img_tag}#如果鏡像名中有一個/,那么/左側為項目名,右側為鏡像名和tagelif [ ${n} -eq 1 ]; thenimg_tag=$(echo ${imgs} | awk -F"/" '{print $2}')#namespace=$(echo ${imgs} | awk -F"/" '{print $1}')#重命名鏡像docker tag ${imgs} ${registry}/${namespace}/${img_tag}#刪除舊鏡像#docker rmi ${imgs}#上傳鏡像docker push ${registry}/${namespace}/${img_tag}#如果鏡像名中有兩個/,elif [ ${n} -eq 2 ]; thenimg_tag=$(echo ${imgs} | awk -F"/" '{print $3}')#namespace=$(echo ${imgs} | awk -F"/" '{print $2}')#重命名鏡像docker tag ${imgs} ${registry}/${namespace}/${img_tag}#刪除舊鏡像#docker rmi ${imgs}#上傳鏡像docker push ${registry}/${namespace}/${img_tag}else#標準鏡像為四層結構,即:倉庫地址/項目名/鏡像名:tag,如不符合此標準,即為非有效鏡像。echo "No available images"fidone }docker_push

總結

以上是生活随笔為你收集整理的docker离线包相关脚本编写示例:docker镜像load/push/save脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。