加速Hyperledger Fabric的docker鏡像構建過程


Hyperledger Fabric 從v2.0開始,全面將docker基礎鏡像替換成了體積更小、潛在安全風險更少、更加輕量的Alpine Linux,從而使得make docker出來的各種鏡像的體積幾乎都縮小為原來的一半,確實能夠節省更多的硬盤空間。但是,由於眾所周知的原因,對於生在紅旗下,長在新中國的程序員們,第一次在Fabric項目下構建docker鏡像時,依然是奇慢無比,屢次超時。

那么這個問題怎么解決呢?

分析速度的瓶頸

首先通過分析速度慢的原因,找出可以優化的點。通過分析make docker命令,大概過程是這樣的:首先是docker會從docker registry pull Alpine作為基礎鏡像,然后使用apk add --no-cache xxx安裝一些軟件,最后通過make命令build出Peer、Order以及其他的tools的二進制包。到這里相信國內的各種奇人義士已經磨刀霍霍,迫不及待的開始替換各種國內的mirror了。

下面的各種資源都來源於網上各位好心人的分享。

加速docker pull過程

首先從網上搜索國內的docker registry源,然后修改docker的配置並重啟docker。在這里我比較推薦使用自己專有的免費的阿里雲鏡像加速器,目前使用一直比較平穩。

  • 獲取鏡像加速url

注冊一個阿里雲賬號並登錄,在產品與服務中搜索容器鏡像服務,跟隨引導完成必要的一些步驟,然后來到這個頁面:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,就可以看到自己專有的加速器地址了。

  • 給docker客戶端配置鏡像加速器

如果沒有/etc/docker/daemon.json文件,則可以直接通過下面的命令完成配置;如果該文件已經存在了,則選擇自己熟悉的文本編輯器編輯該文件,添加加速器地址的配置。如果你使用的帶界面的客戶端,也可以在Preferences... -> Docker Engine顯示的編輯器中添加相應的配置。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

注意:將https://xxx.mirror.aliyuncs.com替換成你自己的鏡像加速器地址。再次提醒,配置完成后,重啟docker之后才會生效。

至此我們完成了docker pull鏡像階段的加速,接下來我們加速在Alpine中安裝軟件的過程。

加速Alpine安裝軟件的過程

在docker pull下來的Alpine鏡像中,使用apk安裝軟件時默認使用的是國外的源,速度比較慢。這里我們把源替換為國內的源,可以大大節省時間。下面以Hyperledger fabric peer的Dockerfile為例,替換為阿里的源:

...

FROM alpine:${ALPINE_VER} as peer-base
# 使用下面這行命令完成源的替換
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache tzdata

FROM golang:${GO_VER}-alpine${ALPINE_VER} as golang
# 使用下面這行命令完成源的替換
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache \
	bash \
	gcc \
	git \
	make \
	musl-dev
ADD . $GOPATH/src/github.com/hyperledger/fabric

...

另外也可以替換為中科大的源:dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn,或者清華的源:dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn,或者其他的源。

注意:這里對於使用multi-stage的Dockerfile,如果不同的stage使用的是不同的基礎鏡像,則都需要替換源。

到這里,當docker使用Alpine作為基礎鏡像時,安裝依賴軟件的過程就會快很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM