提升Docker镜像拉取速度

最近经常有朋友问我,用Docker部署服务的时候拉取镜像速度非常慢怎么能够提速。我总结了2招我用到的提速方法,希望对大家有所帮助。

Docker镜像加速

docker 镜像加速已经比较成熟,很多服务商都提供了自己的加速服务,可以直接在linux 上修改 /etc/docker/daemon.json 文件

vim /etc/docker/daemon.json

添加以下配置文件并重启你的 docker

{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}

命令行执行docker info,如果从结果中看到了上面配置的地址,说明配置成功。

大家也可以执行下面的一键脚本进行操作。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

使用重新打 tag 的方式,拉取镜像

以上操作后可以加快你摘取 docker.io 镜像的速度,对于非docker.io镜像是无效的,比如微软的mr.microsoft.com 这种 镜像并起不到加速的效果,所以你可以先把国外的镜像同步到 docker.io。

有一台国外的服务器 ,在你的服务器中拉取国外的镜像,之后 push 到 docker.io 利用 github.com 的 travis : 你可以建一个仓库,在里面添加 .travis.yml 之后把操作命令写在里面 travis-ci 官方文档[1]

这里我用的是我本地的电脑,以Asp.Net Core 3.1作为示例,先拉取相关镜像

docker pull mcr.microsoft.com/dotnet/core/sdk:3.1-buster 
docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim

执行成功之后,用docker login 登录腾讯云(因为我的服务部署在腾讯云上,用腾讯云更快)

 #登录registry的用户名是您的腾讯云的账号ID,密码是您开通镜像仓库服务时设置的密码
  sudo docker login --username=[ID] --password=[密码] ccr.ccs.tencentyun.com

现在将拉下来的镜像重新打上 tag 便于上传到自己名下的 腾讯云

sudo docker tag mcr.microsoft.com/dotnet/core/sdk:3.1-buster ccr.ccs.tencentyun.com/dotnetplus/sdk:3.1
sudo docker tag mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim ccr.ccs.tencentyun.com/dotnetplus/aspnet:3.1

现在就可以把镜像push上去了

sudo docker push ccr.ccs.tencentyun.com/dotnetplus/sdk:3.1
sudo docker push ccr.ccs.tencentyun.com/dotnetplus/aspnet:3.1

在你需要使用的时候,只要用docker pull拉下来即可

sudo docker pull ccr.ccs.tencentyun.com/dotnetplus/sdk:3.1
sudo docker pull ccr.ccs.tencentyun.com/dotnetplus/aspnet:3.1

有洁癖的同学还可以用docker rmi命令清除没用的镜像。

Comment