对程序员来说,阻碍幸福感最大的因素应该是那个伟大的墙了。
本文对 docker 系统配置过程中,国内使用的一些加速的办法做一些记录和总结,希望能给有需要的人带来微小的帮助。
Docker for mac
下载 Docker for mac
安装包,需要焚香沐浴,三拜九叩,等待网速最快的时候,点击下载链接,如果再配上一个好点的梯子,可能运气好的话,能顺利下载到。
当然我一般会选择去找土豪同事用他的超级梯子下载好 U盘拷过来。
Docker Docs
使用 Docker 最佳教程应该是 Docker 官方文档 了,但是没梯子的状态下访问速度基本上很慢,还好这份文档是开源的 docker-docs ,可以自己 clone 下来,然后执行 docker-compose up
便可以在localhost:4000
离线浏览了。
docker pull
如果你想使用 docker hub 官方镜像,很明显直接是使用不了的。所幸国内有 Daocloud
或者阿里云这样的云服务商提供镜像加速服务,可直接 Google 搜索“daocloud 镜像加速”,添加这些服务商提供的 registry-mirror
地址即可。
docker build
如果是直接依赖基础的操作系统镜像来构建,例如 Ubuntu,一般默认的软件源都是会受到干扰的,所以可以在 Dockerfile
中加入:
COPY sources.list /etc/apt/sources.list
然后把阿里云或者中科大的源地址写入 sources.list 中,放置在 Dockerfile 同一目录下即可。
国内的源虽然加速,但是有时候不稳定,所以 build 的时候如果发现是源的问题,可以切换成另外的多次尝试。
注:不同的操作系统可能sources.list的路径不尽相同
Rails 环境配置
如果是直接以来基础的操作系统镜像构建 Rails 环境,可能会在多处遇到速度被干扰的问题。
1. 安装 rbenv
安装 rbenv,由于 github 速度不稳定,可能会导致出错,解决办法就是先将 git://github.com/sstephenson/rbenv.git
仓库clone 到本地,然后在 Dockerfile 中加入:
COPY rbenv /root/.rbenv
2. 使用 rbenv
rbenv 的源也基本上是没法使用的,可以使用 Rubychina
的加速镜像:
RUN git clone https://github.com/andorchen/rbenv-china-mirror.git /root/.rbenv/plugins/rbenv-china-mirror
当然如果发现 github clone 不了也可以先 clone 到本地再 COPY 的办法。
3. gem 源
gem 的源国内也是没法用的,可以使用淘宝的源,在执行 gem install 之前加上这句
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
PHP 环境配置
一般 php 环境还是需要安装一些扩展的,但是过程还是很曲折的。
1. memcached 扩展
目前 pecl 站还没有适配 php7 的 memcached 的安装包,所以只能自己手动从 github 上 clone 编译了,当然 memcached 扩展这么大的体量,想直接在 build 过程中从 github 上 clone 几乎是不可能的,解决办法还是 clone 到本地,然后 COPY 进去,或者如果有自己的 gitlab 仓库的话,可以在 gitlab 中创建一个项目,然后 import form github,这样以后就可以直接从自己的仓库中 clone, 相当于做了一个镜像。
2. pecl
像 redis,mongodb,imagick 这种扩展,是可以用 pecl 安装的,但是,还是不稳定,时不时的就报错某个扩展找不到,具体原因大家都清楚,应该是网络请求超时了。
解决办法就是把这些扩展的源代码下载到本地,COPY 到容器中,然后用 pear 安装。
# 注意这里的 path 指的是容器里面的 path
pear install /path/to/ext.tgz
注:pear 是 PHP 扩展的离线安装工具
3. composer 加速
在执行 composer update 的前面加上这句:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
以上所有问题的根源都来源于一个大家都知道的原因,总之解决办法就是:
找国内镜像
用梯子下载到本地,想办法离线安装
希望本文能为你的 Docker 之路提升幸福感。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。