LOADING

加载过慢请开启缓存 浏览器默认开启

白嫖Gitlab实现下载docker镜像到阿里云仓库

前言

现在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