├── .gitignore ├── README.md └── docker_wrapper.py /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker_wrapper 2 | An wrapper of docker for pulling image from gcr.io/k8s.gcr.io/quay.io 3 | 4 | # install 5 | 6 | ```bash 7 | git clone https://github.com/silenceshell/docker_wrapper.git 8 | sudo cp docker_wrapper/docker_wrapper.py /usr/local/bin/docker_wrapper 9 | ``` 10 | 11 | # usage 12 | 13 | You can use docker_wrapper to pull images from `gcr.io/k8s.gcr.io/quay.io` and also from `hub.docker.com`. In the later condition, It will directly pull from `hub.docker.com`. 14 | 15 | ```bash 16 | docker_wrapper pull k8s.gcr.io/kube-apiserver:v1.14.1 17 | docker_wrapper pull gcr.io/google_containers/kube-apiserver:v1.14.1 18 | docker_wrapper pull quay.io/coreos/flannel:v0.10.0-amd64 19 | docker_wrapper pull nginx 20 | docker_wrapper pull silenceshell/godaddy:0.0.2 21 | ``` 22 | -------------------------------------------------------------------------------- /docker_wrapper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding=utf8 3 | # utf8 without BOM 4 | 5 | import os 6 | import sys 7 | 8 | # gcr.io/xxx/yyy:zzz -> gcr.azk8s.cn/xxx/yyy:zzz, 9 | # for example registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1 10 | # k8s.gcr.io/xxx:yyy -> registry.cn-hangzhou.aliyuncs.com/google-containers/xxx:yyy, 11 | # for example k8s.gcr.io/kube-apiserver:v1.14.1 12 | # quay.io/xxx/yyy:zzz -> quay.azk8s.cn/xxx/yyy:zzz, 13 | # for example quay.io/coreos/flannel:v0.10.0-amd64 -- not support for now. 14 | 15 | converts = [ 16 | { 17 | 'prefix': 'gcr.io', 18 | 'replace': lambda x: x.replace('gcr.io', 'registry.cn-hangzhou.aliyuncs.com'), 19 | }, 20 | { 21 | 'prefix': 'k8s.gcr.io', 22 | 'replace': lambda x: x.replace('k8s.gcr.io', 'registry.cn-hangzhou.aliyuncs.com/google_containers'), 23 | }, 24 | { 25 | 'prefix': 'quay.io', 26 | 'replace': lambda x: x.replace('quay.io', 'quay.azk8s.cn'), 27 | } 28 | ] 29 | 30 | 31 | def execute_sys_cmd(cmd): 32 | result = os.system(cmd) 33 | if result != 0: 34 | print(cmd + " failed.") 35 | sys.exit(-1) 36 | 37 | 38 | def usage(): 39 | print("Usage: " + sys.argv[0] + " pull ${image}") 40 | 41 | 42 | if __name__ == "__main__": 43 | if len(sys.argv) != 3: 44 | usage() 45 | sys.exit(-1) 46 | 47 | image = sys.argv[2] 48 | imageArray = image.split("/") 49 | 50 | newImage = '' 51 | for cvt in converts: 52 | if imageArray[0] == cvt['prefix']: 53 | newImage = cvt['replace'](image) 54 | # this is a special case: the tag of coredns image on aliyun repo has no "v" prefix. 55 | if imageArray[1] == "coredns": 56 | newImage = newImage.replace("/coredns:v", ":") 57 | break 58 | if newImage: 59 | print("-- pull {image} from {newimage} instead --".format(image=image, newimage=newImage)) 60 | cmd = "docker pull {image}".format(image=newImage) 61 | execute_sys_cmd(cmd) 62 | 63 | cmd = "docker tag {newImage} {image}".format(newImage=newImage, image=image) 64 | execute_sys_cmd(cmd) 65 | 66 | cmd = "docker rmi {newImage}".format(newImage=newImage) 67 | execute_sys_cmd(cmd) 68 | 69 | print("-- pull {image} done --".format(image=image)) 70 | sys.exit(0) 71 | else: 72 | cmd = "docker pull {image}".format(image=image) 73 | execute_sys_cmd(cmd) 74 | sys.exit(0) 75 | --------------------------------------------------------------------------------