用docker
的都知道镜像加速,通过配置阿里云、腾讯云的镜像源确实可以大幅提升docker pull
的效果,但对于某些不常用或新版的镜像却收效甚微。
比如最近想要部署私有ExceptionLess服务,它的dockerfile使用了mcr.microsoft.com/dotnet/core/sdk:2.2.401
和mcr.microsoft.com/dotnet/core/aspnet:2.2
,这两个镜像拉取非常慢,只能使用手动tag
的方式来解决。
本人在腾讯云中创建了dotnet-core
命名空间,源自mcr.microsoft.com
可直接使用ccr.ccs.tencentyun.com/dotnet-core/runtime
2020-04-15更新
原标题为:使用travis-ci的Trigger build功能一键转存
但是本人多次实测,travis-ci
的Build
带宽限制严重,如果你要Retag Runtime
还好,设置travis_wait 30
基本也能用;但是如果是SDK,基本都会超时
Still running (50 of 300): sudo docker push ccr.ccs.tencentyun.com/dotnet-core/sdk:5.0
The job exceeded the maximum time limit for jobs, and has been terminated.
因此改用Azure Devops
2020-3-9更新:
使用Azure官方镜像mirror
根据此issue:dockerhub.azk8s.cn how to get the multiple path image,可使用mcr.azk8s.cn
仓库替换mcr.microsoft.com
,即,将mcr.microsoft.com/dotnet/core/aspnet:2.2
替换为mcr.azk8s.cn/dotnet/core/aspnet:2.2
如果你有一台国外的VPS,那很简单;只需执行docker pull
、docker login
、docker tag
、docker push
就OK了。无奈我的VPS到期了,只能另寻它法,google之后从这篇文章找到灵感:使用重新打 tag 的方式,拉取 k8s.gcr.io 的镜像。
使用Azure Devops
- 首先,去腾讯云中创建保存
image
的仓库 - 参考create-a-service-connection,在project→project settings →Service connections →New ervice connection中新建一个名为
tencentyun
的Docker Registry
,其中Docker Registry
地址为:https://ccr.ccs.tencentyun.com/v2/,用户名和密码请查看腾讯云的镜像使用指引
- 在你项目里面的
Piplines
中新建一个连接到Github仓库的yml,创建模板随便选
- 最后把Review中的yml文件替换成如下:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
tag: 'aspnet:5.0'
steps:
- task: Docker@2
inputs:
containerRegistry: 'tencentyun'
command: 'login'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$env:version="$(tag)"
docker pull mcr.microsoft.com/dotnet/core/$env:version
docker tag mcr.microsoft.com/dotnet/core/$env:version ccr.ccs.tencentyun.com/dotnet-core/$env:version
docker push ccr.ccs.tencentyun.com/dotnet-core/$env:version
- 然后点击
Save and run
(或者也可以在自己的仓库中创建一个上述的azure-pipelines.yml
文件,在Azure Devops中连接好后提交)就可以了
使用travis-ci自动Tag
travis-ci
的Build
带宽限制严重,已改用Azure Devops,以下步骤仅作参考
使用第三方的CI、CD服务push
镜像到国内私有仓库中解决docker pull
过慢的问题,本例的CI-CD使用的是travis-ci,由于自己使用了腾讯云的容器服务,因此私有库使用了腾讯云提供的免费镜像仓库。
- 首先,去腾讯云中创建保存
image
的仓库
- 其次,访问travis-ci,并授权其对自己git库的访问权限(随便什么仓库都行,因为我们并不需要使用里面的代码)
- 参照腾讯云提供的镜像使用指引,编写
.travis.yml
脚本文件
我的脚本文件如下
language: bash
services:
- docker
sudo: required
branches:
only:
- master
script:
- docker pull mcr.microsoft.com/dotnet/core/sdk:2.2.401
- docker pull mcr.microsoft.com/dotnet/core/aspnet:2.2
after_success:
#登录registry的用户名是您的腾讯云的账号ID,密码是您开通镜像仓库服务时设置的密码
- sudo docker login --username=[ID] --password=[密码] ccr.ccs.tencentyun.com
- sudo docker tag mcr.microsoft.com/dotnet/core/sdk:2.2.401 ccr.ccs.tencentyun.com/dotnet-core/sdk:2.2.401
- sudo docker tag mcr.microsoft.com/dotnet/core/aspnet:2.2 ccr.ccs.tencentyun.com/dotnet-core/aspnet:2.2
- sudo docker push ccr.ccs.tencentyun.com/dotnet-core/sdk:2.2.401
- sudo docker push ccr.ccs.tencentyun.com/dotnet-core/aspnet:2.2
- 在travis-ci的首页上,任意选择一个仓库,然后在
More Options
→Trigger build
的CUSTOM CONFIG
中粘贴写好的.travis.yml
脚本并点击Trigger custom build
- 稍等几分钟即可在
job log
中看到脚本的执行结果
这里并不会立即出结果,图示是因为images已经存在于ccr.ccs.tencentyun.com
中了,所以给人以速度很快的假象
本文会经常更新,请阅读原文:https://blog.wangshuai.app,以避免陈旧错误知识的误导,同时有更好的阅读体验。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。