在国内 docker build 的正确姿势
由于某些原因,在国内构建第三方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 代理。
关键字:docker
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!