docker离线包相关脚本编写示例:docker镜像load/push/save脚本
生活随笔
收集整理的這篇文章主要介紹了
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脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s安装工具:sealos设计原理及离
- 下一篇: 安装kube-prometheus项目: