由于某些原因,在国内构建第三方docker镜像是一件考验耐心的事情。在神奇的国度生活,自然也要用神奇的生活方式。跟解决其他同类问题一样,解决这个问题常用两种方法,一曰换源,二曰代理。
换源
我们使用 docker 的时候,其实是启动一个 docker client 来跟后台运行的 docker daemon
通讯。docker daemon --help
显示,可以通过 --registry-mirror=
指定 docker 的镜像源。国内有不少 docker 的镜像源,比如中科大LUG、阿里云、DaoCloud。以中科大的镜像源为例,可以这样指定镜像源:
--registry-mirror=https://docker.mirrors.ustc.edu.cn
docker daemon
通常作为一个服务由系统在开机时启动,所以我们需要把上面的指令加到服务的配置中。
如果你的Linux发行版(较旧)使用 SysVinit 来启动,你需要打开 /etc/default/docker
这个文件,修改下面内容:
# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="" # 把镜像的选项加在这里
如果你的Linux发行版较新,应该是使用 Systemd 来启动,需要使用 sudo systemctl edit docker.service
打开配置文件。如果你的 Systemd 版本不够高,不支持edit
命令,就需要手动打开 /lib/systemd/system/docker.service
或其他 docker.service
所在的位置。然后在 ExecStart=/usr/bin/docker daemon -H fd://
这一行后面加上镜像的选项。
如果你使用的是 OS X,docker Beta 提供了图形化界面来修改镜像源:
先选择 preferences...
菜单,
然后在 Advanced
一栏下应该能看到:
Windows 上的 docker Beta 估计也提供了相似的图形化修改界面。
值得注意的是,由于 docker daemon 默认用 HTTPS 通讯,如果你选用的源不支持 HTTPS,需要同时在 --insecure-registry=
选项中指定镜像源的域名,以作豁免。
现在 docker pull
的时候,就会去拉国内的镜像,速度改善了不少呢。
代理
尽管现在 docker pull
的速度上去了,docker build
的速度依然挺慢的。毕竟比起花在第一个 FROM
指令的时间,后面一层层构建才是耗时的大头。由于第三方 Dockerfile 通常不会设定成用国内的源,更新软件包的速度一直是龟速,而且还经常出错。看来光换源还是不够的,还要挂个代理。
幸运的是,docker 提供了对 HTTP 代理的支持。你所需的,不过是在启动 docker daemon
的时候设置下 HTTP_PROXY
环境变量,比如 HTTP_PROXY=xxx.com:xxxx docker daemon
。修改的方式请参考上面的“换源”一节。(注:设置 http_proxy
也是可以的, docker 会先查找 HTTP_PROXY
环境变量,如果找不到再继续查找全小写的版本)
一般大一点的公司会提供可以跟国际互联网互联的 HTTP 代理。如果贵司不提供,抑或你是在家里使用 docker,可以用 cow 做转发,用 ss 作为二级代理来实现 HTTP 代理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。