Docker 使用國內加速器

Docker在國內的窘境

Docker革命性的提高了開發運維效率,真正實現了DevOps的概念,將環境變得標準化,在很大程度上改變了運維的發展。

然而,在國內使用Docker源,速度會非常慢,而且很多時候乾脆連不上服務器:

Pulling repository docker.io/library/lavadiablodocker-xwiki
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/lavadiablodocker-xwiki/images. You may want to check your internet connection or if you are behind a proxy 

像yum,apt-get,anaconda,pip,npm,這些包管理工具都有很好的國內源替代產品,基本能夠完全將全量數據同步到國內,然而dockerhub上的全量數據,在國內始終沒有找到好的替代產品。

國內相關的幾款產品,能夠在很大程度上改變這一情況,但是僅僅是緩解,而不是解決。

  1. Daocloud 這是一款很棒的互聯網產品,最近融資情況也很順利。其提供了一個國內的鏡像市場,以及docker本身的安裝源。對於獲取image速度的問題,Daocloud還提供了一個加速器,速度還不錯。但是美中不足,一是並沒有全量同步dockerhub上的數據,很多docker官方的鏡像都找不到,dockerhub上很多第三方提供的內容更是沒有同步,二是無法利用第三方的Docker文件直接在服務器端構建鏡像。
  2. 阿里雲開發者 相比之下,功能做的更加紮實。但不足同樣在於,沒有全量同步dockerhub上的鏡像。估計是此項目在阿里內部沒有受到足夠的重視,資源分配不足造成。阿里雲提供私有加速器地址,這些加速器能夠加速docker官方的鏡像拉取,另外還提供海外機器構建服務,構建之後可以在國內從阿里雲中拉取。

使用加速器

使用加速器的方法爲,在docker服務啓動時,加入參數 –registry-mirror=XXX。在加速器頁面中,能看到這兩個網站都準備了一鍵修改腳本,自動替換。

然而,對於有些版本的 服務器,這些腳本會失效。

例如,筆者使用CentOS7,從docker-engine包中安裝。這時啓動docker服務的命令爲 dockerd,而不是docker -d,與腳本中的不同。針對這一問題,筆者採取手動修改docker啓動腳本的方式來增加參數即可。

筆者是將/etc/systemd/system/docker.service 文件做如下修改
(如果找不到這個文件,也可以在以下位置找到:/lib/systemd/system/docker.service)

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --registry-mirror=https://u1qbyfsc.mirror.aliyuncs.com
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

[Install]
WantedBy=multi-user.target

其中ExecStart=/usr/bin/dockerd 替換成了 ExecStart=/usr/bin/dockerd --registry-mirror=https://u1qbyfsc.mirror.aliyuncs.com

這樣,拉取docker官方源時,即可使用非常明顯的加速。

另外,阿里雲還提供雲端構建功能。在dockerhub上看到的第三方image,經常作者會提供構建文件。找到這些文件,放到github等代碼託管平臺上,在阿里雲的鏡像倉庫中新建一個鏡像,導入構建文件,再在阿里雲控制檯上操作,即可使用阿里雲海外主機進行構建,之後供自己拉取到國內的主機上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章