詳解使用Docker容器來(lái)源碼編譯etcd
背景
etcd是CoreOS公司開(kāi)發(fā)的分布式鍵值對(duì)存儲(chǔ)庫(kù)。在Kubernetes中,我們需要使用etcd作為所有REST API對(duì)象的持久化存儲(chǔ)。
不幸的是,在github的release中,CoreOS將etcd的二進(jìn)制可執(zhí)行文件都放在了亞馬遜的S3存儲(chǔ)上,在國(guó)內(nèi)訪問(wèn)非常慢。因此,我們只能通過(guò)源碼編譯etcd。
過(guò)程
1. 下載etcd源碼。
$ git clone https://github.com/coreos/etcd.git $ cd etcd
2. 根據(jù)實(shí)際情況,選擇合適的版本。如我這里使用的是2.2.1版本。
$ git checkout -b v2.2.1
3. 編譯源碼。運(yùn)行該目錄的build可執(zhí)行文件。
$ ./build
但是,運(yùn)行該命令出錯(cuò),提示找不到context。
$ ./build gopath/src/github.com/coreos/etcd/cmd/vendor/github.com/coreos/etcd/lease/leasehttp/http.go:19:2: cannot find package "context" in any of: /root/etcd/gopath/src/github.com/coreos/etcd/cmd/vendor/context (vendor tree) /usr/local/go/src/context (from $GOROOT) /root/etcd/gopath/src/context (from $GOPATH) /go/src/context /go/src/app/_gopath/src/context
網(wǎng)上搜索了一番,原來(lái)etcd需要在Golang1.7以上的環(huán)境才能編譯,而我使用的是Ubuntu16.04,默認(rèn)的Golang版本是1.6的,沒(méi)有context包。因此,我們需要安裝Golang1.7環(huán)境。
4. 使用Docker容器編譯。因?yàn)槲业腉olang環(huán)境還運(yùn)行著其他的包,為了不影響其他包運(yùn)行。我這里直接使用Golang1.7的docker容器來(lái)編譯etcd。
$ sudo docker run -v /home/newbee/etcd/:/opt/etcd -it --rm golang:1.7.5 bash # cd /opt/etcd # ./build
在-v參數(shù)中,/home/newbee/etcd是我在Docker host中(也就是我服務(wù)器的)的etcd目錄,而/opt/etcd是我容器中的映射目錄。
注意:從Docker hub下載golang鏡像需要一定的時(shí)間。下載完成后,就進(jìn)入了容器中,然后cd到/opt/etcd目錄,執(zhí)行編譯。
待編譯完成后,查看etcd的bin目錄下,是否有可執(zhí)行文件,如果有,就說(shuō)明編譯成功。然后退出容器,服務(wù)器的etcd目錄中也有對(duì)應(yīng)的可執(zhí)行文件了。
總結(jié)
etcd需要在Golang1.7以上的版本編譯。
Docker容器可以很輕松的提供Golang環(huán)境,而且不會(huì)影響原來(lái)的環(huán)境,是一種新的思路。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker安裝java環(huán)境的實(shí)現(xiàn)步驟
這篇文章主要介紹了docker安裝java環(huán)境的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
詳解CentOS 7 : Docker私有倉(cāng)庫(kù)搭建和使用
本篇文章主要介紹了詳解CentOS 7 : Docker私有倉(cāng)庫(kù)搭建和使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Docker 使用nsenter工具進(jìn)入容器的操作
這篇文章主要介紹了Docker 使用nsenter工具進(jìn)入容器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
docker 動(dòng)態(tài)映射運(yùn)行的container端口實(shí)例詳解
這篇文章主要介紹了 docker 動(dòng)態(tài)映射運(yùn)行的container端口實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10
docker啟動(dòng)mysql并映射數(shù)據(jù)目錄(含備份腳本)
本文主要介紹了docker啟動(dòng)mysql并映射數(shù)據(jù)目錄(含備份腳本),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
prometheus監(jiān)控節(jié)點(diǎn)程序的安裝及卸載命令
這篇文章主要為大家介紹了prometheus監(jiān)控節(jié)點(diǎn)程序的安裝及卸載命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Docker教程之dockerfile構(gòu)建centos鏡像
這篇文章主要介紹了Docker教程之dockerfile構(gòu)建centos鏡像的相關(guān)資料,需要的朋友可以參考下2022-11-11

