基于阿里云的Docker镜像加速器

前言

本文旨在通过免费获取阿里云容器加速地址来提高Docker镜像的下载速度,由此减少相关服务的部署时间。

快速了解Docker

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhoneapp),更重要的是容器性能开销极低。
如图1,展示了Docker虚拟机的对比。
图1.Docker与虚拟机的对比

快速了解Docker镜像

Docker镜像,可以理解为一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。

使用阿里云服务加速

获取阿里云加速器地址

登陆阿里云网站,选择「容器镜像服务」下的「镜像加速器」。阿里云每个账户配置了不同的「加速器地址」。
图2.阿里云操作界面

写入文件

按照图2第四步的「操作文档」,选择相应的系统进行配置即可。
我这边是Centos的服务器,执行以下4步命令即可。

1
2
3
4
sudo mkdir -p /etc/docker
echo '{ "registry-mirrors": ["https://yourID.mirror.aliyuncs.com"]} ' | tee /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker

如果输入命令出现问题,在/etc/docker/目录下创建daemon.json文件,然后追加「加速器地址」。
{ "registry-mirrors": ["https://yourID.mirror.aliyuncs.com"] }

1
2
3
4
sudo mkdir -p /etc/docker
echo '{ "registry-mirrors": ["https://segd1s4m.mirror.aliyuncs.com”]}' | tee /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker

命令讲解

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
例如:

1
ping baidu.com | tee ping-baidu.log

该命令输出到控制台的同时,还将内容保存到ping-baidu.log文件当中。
systemctl是守护进程Systemd的主命令,用于管理系统。
关于Systemd的详细介绍,可以查看「参考资料」的第三篇文章。
sudo systemctl daemon-reload表示重载所有修改过的配置文件。

部署多个源

除了阿里云,还有其他源,如下:
中国区官方镜像:https://registry.docker-cn.com
网易:https://hub-mirror.c.163.com/
七牛云加速器:https://reg-mirror.qiniu.com
同上步骤一样,在/etc/docker/daemon.json文件加入如下内容。

1
2
3
4
{ "registry-mirrors": [
"https://hub-mirror.c.163.com/",
"https://registry.docker-cn.com"
] }

检查加速器是否生效

配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效。
在命令行执行docker info,如果从结果中看到了如下内容,说明配置成功。

1
2
Registry Mirrors:
https://<yourID>.aliyuncs.com

尝试下载mysql的官方镜像。

1
docker pull mysql:latest

约10s就完成了。

可能存在的问题

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了Docker镜像加速服务,建议根据运行Docker的云平台选择对应的镜像加速服务。

参考资料

[1] Docker 镜像加速

[2] 如何通俗解释Docker是什么?

[3] Systemd 入门教程:命令篇