在國內 docker build 的正確姿勢

MarTcy 8年前發布 | 33K 次閱讀 Docker

由于某些原因,在國內構建第三方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 代理。

 

來自:https://segmentfault.com/a/1190000006146697

 

 本文由用戶 MarTcy 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!