前言
现在docker镜像已经全部无法pull了,市面上有很多解决方式,但都比较麻烦且不方便。最好的方式还是自己搭建一个docker镜像仓库来使用,这里直接白嫖阿里云的docker镜像仓库。然后我们再白嫖gitlab里海外的runner来实现把dockerhub的镜像传到我们的仓库里。
注:阿里云免费版镜像仓库有仓库限制但无标签限制,因此我们这里将公开的镜像全部传到一个仓库里,利用标签区分,虽然有点不方便,但只占用一个数量限制,并不影响其他使用。
申请阿里云免费容器镜像服务
注册个阿里云账号申请即可。
配置仓库,后续全部上传到这里
这里我们申请一个仓库,假设地址为docker-mirror/public
创建gitlab项目
创建gitlab项目,在CI/CD里的runner开启共享runner,接下来我们就要利用这些共享runner先pull镜像,再push到我们阿里云仓库上
配置CI环境变量
配置CI环境变量里我们需要上传仓库的地址和账号密码等信息
配置.gitlab-ci.yml
image: busybox
stages:
- sync
deploy:
image: docker:latest
stage: sync
tags:
- gitlab-org-docker
services:
- docker:dind
script:
- docker pull ${ORIGIN_TAG}
- docker tag ${ORIGIN_TAG} ${CI_REGISTRY}/${CI_REGISTRY_REPOSITORY}/public:${TARGET_TAG}
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker push ${CI_REGISTRY}/${CI_REGISTRY_REPOSITORY}/public:${TARGET_TAG}
- echo "${CI_REGISTRY}/${CI_REGISTRY_REPOSITORY}/public:${TARGET_TAG}"
这样我们需要拉取什么镜像只需要每次执行一下流水线,传入{ORIGIN_TAG}和{TARGET_TAG}变量即可
ORIGIN_TAG: java:8
TARGET_TAG: java-8
java:8 -> xxx/docker-mirror/public:java-8
还可以直接利用阿里云镜像仓库关联git仓库的自动打包来实现同样的功能,选海外执行机器,只不过这种方式必须直接改原代码分支来实现不同的tag