使用Mirror加速Docker

Docker成功的原因之一就是其利用分层镜像技术构建了一个活跃的生态系统:Docker Hub。

但是Docker Hub并没有在国内部署服务器或者使用国内的CDN服务,因此在国内特殊的网络环境下,镜像下载速度非常慢。

本文介绍了使用Mirror来加速镜像下载的方法。


原理

Docker本身提供了对Mirror的支持,在docker daemon启动时,使用--registry-mirror参数可以设置使用的mirror,官方也提供的Mirror的搭建方法。

公共Mirror

国内有不少公司提供了公共的Docker Mirror,比如阿里云DaoCloud.io,但它们的做法都是要注册一个账户并分配一个私有的地址,略显繁琐。

这里推广一下母校Linux社团LUG提供的Mirror,地址为:

https://docker.mirrors.ustc.edu.cn

设置方法

最直接的方法就是启动Docker deamon时带上以下参数:

--registry-mirror=https://docker.mirrors.ustc.edu.cn

但通常并没有使用直接使用命令,而是使用了一些服务管理工具(比如systemd),或者是在Mac/Win上的Docker Machine/Boot2Docker。

Mac/Win

Mac/Win的Docker deamon是安装在虚拟机上的,你可以新开一台使用mirror的虚拟机,也可以配置现有的虚拟机,这里假设你使用了Docker Machine。

新开虚拟机:

# 创建一台安装有Docker环境的Linux虚拟机,指定机器名称为mirror,同时配置Docker加速器地址。
docker-machine create --engine-registry-mirror=https://docker.mirrors.ustc.edu.cn -d virtualbox default  
# 查看机器的环境配置,并配置到本地。然后通过Docker客户端访问Docker服务。
docker-machine env mirror  

使用原有虚拟机(假设名字为default):

# 连接VM
docker-machine ssh default  
# 添加配置参数
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://docker.mirrors.ustc.edu.cn |g" /var/lib/boot2docker/profile  
# 退出VM
exit  
# 重启VM
docker-machine restart default  

Ubuntu

echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=https://docker.mirrors.ustc.edu.cn\"" | sudo tee -a /etc/default/docker  
sudo service docker restart  

CentOS

CentOS 7

sudo sed -i 's|other_args="|other_args="--registry-mirror=https://docker.mirrors.ustc.edu.cn |g' /etc/sysconfig/docker  
sudo sed -i "s|OPTIONS='|OPTIONS='--registry-mirror=https://docker.mirrors.ustc.edu.cn |g" /etc/sysconfig/docker  
sudo sed -i 'N;s|\[Service\]\n|\[Service\]\nEnvironmentFile=-/etc/sysconfig/docker\n|g' /usr/lib/systemd/system/docker.service  
sudo sed -i 's|fd://|fd:// $other_args |g' /usr/lib/systemd/system/docker.service

sudo systemctl daemon-reload  
sudo service docker restart  

CentOS 6

sudo sed -i "s|other_args=\"|other_args=\"--registry-mirror=https://docker.mirrors.ustc.edu.cn |g" /etc/sysconfig/docker  
sudo sed -i "s|OPTIONS='|OPTIONS='--registry-mirror=https://docker.mirrors.ustc.edu.cn |g" /etc/sysconfig/docker  
sudo service docker restart  

好了,愉快的docker pull吧!

---全文完---