對程式設計師來說,阻礙幸福感最大的因素應該是那個偉大的牆了。
本文對 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 之路提升幸福感。