网站首页 > 教程文章 正文
由于国内部署一下docker镜像的时候被限制了,但有时候需要去下载一些镜像转回本地服务器或者自己的镜像仓库时候,一个个手工下载比较慢。
刚好在测试部署Meterphere镜像,虽然很多是镜像是反正是过来镜像地址。但是还是有些基础镜像还不是,所以还是需要手工去拉。所以写一个工具脚本去执行,减少一点人工的操作。现在这个脚本还是比较粗糙,还是需要一个一个node节点去执行这个工具脚本,把上传到自己镜像仓库的镜像拉取到node节点上,然后在重新tag为原来镜像名,而且deplyment配置镜像拉取的策略的时候也可能需要修改。
总体思路就是:
1.可以访问镜像的节点服务器,读取imagelist.txt文件,拉取镜像到本地服务器。
2.重新tag为自己镜像服务器地址,push到自己镜像服务器,保存到newimagelist.txt中,用于后续重命名。
3.在需要拉取的node节点上,读取newimagelist.txt,拉取镜像到本地,多个节点,执行多次。(没有写远程命令执行,可以后续在通过ansible,执行远程调用命令优化,不需要一个个node执行)
4.还原镜像tag为原来镜像名字
# !/usr/bin/env python
# -*-coding:utf-8 -*-
# File : dockerImageTools.py
# Time :2024/11/22 14:31
# Author :damon.guo
# version :python 3.6
# @Software : PyCharm
# Description:
import os
import sys
# 需要下载中转的镜像列表
imagesfile="./imagelist.txt" #自己新建一个人文件,镜像地址一行一个
# 需要重新tag原名称的列表
newimagesfile="./newimagelist.txt"
# 国内可以中转的镜像仓库/或者自己的仓库地址
dockerimageurl ="xx-registry.cn-hangzhou.aliyuncs.com/yek-dev/"
def getImageList(imagesfile):
if not os.path.exists(imagesfile):
print("image list file not exist")
exit(1)
imageList=[]
with open(imagesfile) as fd:
for i in fd.readlines():
print(i)
imageList.append(i.strip())
return imageList
def pullImages(imageList):
for i in imageList:
print("pulling image %s" % i)
os.system("docker pull %s" % i)
print("pull image finished")
def checkImages(imageList):
for i in imageList:
print("checking image %s" % i)
os.system("docker images | grep %s" % i)
print("check image finished")
def pushImages(imageList):
for i in imageList:
print("pushing image %s" % i)
os.system("docker push %s" % i)
print("push image finished")
def tagImages(imageList,dockerimageurl):
newImages = []
for i in imageList:
imagename = i.split("/")[-1]
newimagname = os.path.join(dockerimageurl, imagename)
print("tagging image %s to %s" % (i,newimagname))
newImages.append(newimagname)
os.system("docker tag %s %s " % (i, newimagname))
print("tag image finished")
return newImages
def dockerImageTools():
# 外网机器执行拉取镜像,push自己镜像仓库
imageList = getImageList(imagesfile)
pullImages(imageList)
checkImages(imageList)
newImages = tagImages(imageList,dockerimageurl)
with open(newimagesfile, "w")as fd:
for i in newImages:
fd.write(i+"\n")
pushImages(newImages)
def renamedockerImage():
# 国内服务器执行镜像,个人镜像仓库拉取镜像 还原镜像为国外镜像名字
imageList = getImageList(imagesfile) # 国外镜像地址文件""
newimageList = getImageList(newimagesfile) # 国内镜像地址文件""
pullImages(newimageList)
checkImages(newimageList)
for i in newimageList:
newimagename = i.split("/")[-1]
for j in range(len(imageList)):
imageurl = imageList[j]
imagename = imageurl.split("/")[-1]
if imagename == newimagename:
print("tagging image %s to %s" % (i, imageurl))
os.system("docker tag %s %s " % (i, imageurl))
if __name__ == "__main__":
par =sys.argv[1]
if par == "tochina":
# 中转服务器执行,拉取镜像并提交到自己仓库
dockerImageTools()
elif par == "help" or par == "-h":
print("请输入参数:tochina or help")
print("请输入参数:tochina 中转服务器执行,拉取镜像并提交到自己仓库 ")
print("请输入参数:rename # 国内服务器执行镜像,个人镜像仓库拉取镜像 还原镜像为国外镜像名字")
elif par == "rename":
renamedockerImage()
else:
# 国内服务器执行镜像,个人镜像仓库拉取镜像 还原镜像为国外镜像名字
renamedockerImage()
猜你喜欢
- 2024-12-10 群晖挂载阿里云盘实现双向同步
- 2024-12-10 Linux设置国内镜像源其实很简单,只要一行命令
- 2024-12-10 Docker Hub国内镜像地址及Docker和Containterd中如何配置国内镜像
- 2024-12-10 docker镜像地址更改,使其支持国内环境
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)