因?yàn)楸娝苤脑蚣崾龋珼ocker在國內(nèi)的使用舉步維艱。于是惶傻,很多組織在國內(nèi)提供了mirror
或者叫加速器
。
甚至在1.13的release note中提到微軟提供了官方的中國鏡像涂佃,然后我并沒有找到怎么啟用蜈敢,找到了再寫。
使用這些鏡像或者加速器伯病,拉取各種官方鏡像是ok了否过,自有的鏡像也可以放在國內(nèi)的registry
。
但是官方鏡像只是滄海一粟苗桂,大量的組織或個(gè)人的鏡像都在docker hub
,這一部分并沒有被鏡像同步癌佩。
于是便锨,你還是需要一個(gè)代理。
本文假設(shè):
- 你已經(jīng)有一個(gè)http代理了
- Linux發(fā)行版的服務(wù)管理器使用的是systemd
- 本文寫于 Version 17.03.0-ce , 在 Docker 1.13 和 17.03 上是可以的姚建,不排除將來有所改變
順帶說一句卿叽,Windows版的在 Settings 的圖形界面上直接可以設(shè)置代理恳守。
關(guān)于systemd
很多人可能對systemd還不熟悉贩虾,但主流發(fā)行版已經(jīng)全都切換成systemd了,還是很有必要了解一下缎罢。
# 重啟docker
$ sudo systemctl restart docker
# 對應(yīng)的舊的命令,其實(shí)現(xiàn)在還是支持舰始,效果和上一句一樣咽袜。
$ sudo service docker restart
# 設(shè)置開機(jī)啟動(dòng)
$ sudo systemctl enable docker
systemd
是由文件夾/lib/systemd/system
中的docker.service
文件定義的。
我們隨便搜索一下systemd教程谜嫉,就知道怎么樣自己編寫一個(gè)service文件了凹联。
于是你可能躍躍欲試,把這個(gè)文件改一改蔽挠,代理加進(jìn)去就好了嘛。
等等澳淑,不要著急秃殉,如果你自己在做一個(gè)自己的服務(wù)秩仆,當(dāng)然是要自己直接寫這個(gè)文件了榜配。但是硝皂,我們的docker是從官方源安裝的盯另。
這意味著你現(xiàn)在改了這個(gè)文件雖然會(huì)生效兄一,但是docker一升級(jí)识腿,這個(gè)文件又被覆蓋了呢渡讼。針對這個(gè)問題耳璧,systemd當(dāng)然也有解決方案展箱。
你其實(shí)只需要?jiǎng)?chuàng)造一個(gè)叫 <something>.conf
的配置文件,名字隨便起混驰,放在
/etc/systemd/system/docker.service.d
目錄。你就覆蓋了默認(rèn)的啟動(dòng)配置昆汹,并且它會(huì)作為你的用戶配置一直存在婴栽。
HTTP proxy
好了,現(xiàn)在我們可以開始加代理配置了败潦。
-
默認(rèn)情況下這個(gè)配置文件夾并不存在准脂,我們要?jiǎng)?chuàng)建它。
$ mkdir -p /etc/systemd/system/docker.service.d
-
創(chuàng)建一個(gè)文件
/etc/systemd/system/docker.service.d/http-proxy.conf
包含HTTP_PROXY
環(huán)境變量:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/"
-
如果有局域網(wǎng)或者國內(nèi)的registry沟饥,我們還需要使用
NO_PROXY
變量聲明一下湾戳,比如你可以能國內(nèi)的daocloud.io放有鏡像:[Service] Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,daocloud.io"
-
刷新systemd配置:
$ sudo systemctl daemon-reload
-
用系統(tǒng)命令驗(yàn)證環(huán)境變量加上去沒:
$ systemctl show --property=Environment docker Environment=HTTP_PROXY=http://proxy.example.com:80/
-
萬事俱備,重啟docker幼驶,在外面的世界遨游吧:
$ sudo systemctl restart docker
ps. 本文只是對官方文檔的翻譯和簡化韧衣,希望大家還是學(xué)會(huì)活用google,檢索官方文檔畅铭,比看博客更有時(shí)效性。