连接docker私服
在docker配置文件中添加docker私服
linux(centos,ubuntu):
sudo vi /etc/docker/daemon.json
"insecure-registries":["xxx.xxx.xxx.xxx:5000"]
如果此前配置有其他内用,注意用逗号隔开(要符合json格式)。如果不添加或添加错误会出现https报错。
Mac OS
直接在Docker Desktop->Preference->Daemon中添加私服即可。
添加完成后,重启daemon以及docker使改动生效:
systemctl daemon-reload
systemctl restart docker
Mac OS直接在应用中点击 Apply & Restart 即可
登录
如要使用push和pull操作docker私服,需使用管理员账号登录:
docker login xxx.xxx.xxx.xxx:5000
#输入账号密码
镜像获取与上传
批量上传工具
由于多版本的镜像下载、改名、上传、删除费时费力,所以写了一个python工具处理这些问题:
import os
imageName = 'couchbase'
oldR = ""
newR = ""
tags = ['6.0.2', '5.5.1', '4.6.5']
register = 'xxx.xxx.xxx.xxx:5000'
images = []
for i in tags:
if oldR != "":
oldName = oldR + "/" + imageName + ":" + i
else:
oldName = imageName + ":" + i
if newR != "":
newName = register + '/' + newR + "/" + imageName + ":" + i
else:
newName = register + '/' + imageName + ":" + i
images.append([oldName, newName])
for i in images:
cmd = "docker pull " + i[0]
print("runing: " + cmd)
result = os.popen(cmd).readlines()
for r in result:
print(r)
for i in images:
cmd = "docker tag " + i[0] + " " + i[1]
print("runing: " + cmd)
result = os.popen(cmd).readlines()
for r in result:
print(r)
for i in images:
cmd = "docker push " + i[1]
print("runing: " + cmd)
result = os.popen(cmd).readlines()
for r in result:
print(r)
for i in images:
cmd = "docker rmi " + i[1]
print("runing: " + cmd)
result = os.popen(cmd).readlines()
for r in result:
print(r)
for i in images:
cmd = "docker rmi " + i[0]
print("runing: " + cmd)
result = os.popen(cmd).readlines()
for r in result:
print(r)
使用方法
- imageName:镜像名
- registry:docker私服地址和ip
- tags:需要下载的标签组成的list
- oldR:原有的私人仓库
- newR:新的仓库名
拉取没有仓库名的镜像时可以代码中编写的形式进行,当需要仓库名时需要按照以下格式:
imageName = 'db-mysql'
oldR = "yuanziqiang1995"
newR = "ziqiangy"
tags = ['1.0']
register = 'xxx.xxx.xxx.xxx:5000'
拉取的镜像为:yuanziqiang1995/db-mysql:1.0
上传的镜像为:xxx.xxx.xxx.xxx:5000/ziqiangy/db-mysql:1.0
存在的问题与注意事项
- 需要注意网络环境:有一些企业级镜像没有国内加速,如果网络环境不好可能导致下载过慢。
- 上述代码使用与python3环境,在python2环境下需要对代码进行修改。
- 代码使用全部下载,再全部上传的方式。由于不同版本的同一个镜像往往公用许多layers,这样有助于加快速度。但是当使用虚拟机等环境时,如要下载大量镜像请注意存储可用空间,以免下载失败。