关于docker:DockerHub镜像代理

背景

公司的服务器从 DockerHub 拉取镜像有时会遇到拉取慢和拜访限度,虽说 Docker 官网和国内很多云服务商都提供了国内加速器服务,然而从外网反复拉取速度没法保障。机器的存储空间无限,简直每天都要清理镜像缓存。

解决办法就是用自家公有的镜像仓库来存储这些罕用镜像,比方nginx、golang、python等等。手动把这些镜像push到公有镜像仓库太累,本文应用的正是 Harbor 提供的镜像代理性能。

Harbor镜像代理

harbor的部署就跳过了,间接到操作界面

通过下面的步骤后dockerhub我的项目就是用来代理到DockerHub官网的,第一次会去DockerHub官网拉取,而后在habor存储一份,下次就不必拜访DockerHub了。

假如这里的harbor镜像仓库的地址是 my-harbor.com,应用例子(强烈建议应用具体tag):

nginx:1.22 -> my-harbor.com/dockerhub/library/nginx:1.22

golang:1.18.4 -> my-harbor.com/dockerhub/library/golang:1.18.4

bitnami/prometheus:2.38.0 -> my-harbor.com/dockerhub/bitnami/prometheus:2.38.0

Dockerfile主动替换

公司外部都有本人的ci/cd零碎,此处提供一个思路,在构建镜像这一步做主动替换,最好提供一个开关,让用户抉择是否代理DockerHub镜像。

#!/bin/bash
dockerfilePath=./Dockerfile
i=0
# 去掉空行
grep -v "^$" $dockerfilePath > /tmp/tmp_dockerfile
cat /dev/null > $dockerfilePath
cat /tmp/tmp_dockerfile |while read line
do
  echo $line >> $dockerfilePath
done
cat $dockerfilePath |while read line
do
    i=`expr $i + 1`;
    # 排除正文和scratch镜像
    s=$(echo $line |grep 'FROM'| egrep -v '#|\$|scratch' |awk '{print $2}'|awk -F: '{print $1}' |grep -v '\.') || true
    if [[ -n "$s" ]];then
      new="my-harbor.com/dockerhub/library/$s"
      echo $s | grep '/' > /dev/null && new="my-harbor.com/dockerhub/$s" || true
      sed -i "${i}s|$s|$new|" $dockerfilePath ||true
    fi
done

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理