詳解使用Docker容器來源碼編譯etcd
背景
etcd是CoreOS公司開發(fā)的分布式鍵值對存儲庫。在Kubernetes中,我們需要使用etcd作為所有REST API對象的持久化存儲。
不幸的是,在github的release中,CoreOS將etcd的二進制可執(zhí)行文件都放在了亞馬遜的S3存儲上,在國內(nèi)訪問非常慢。因此,我們只能通過源碼編譯etcd。
過程
1. 下載etcd源碼。
$ git clone https://github.com/coreos/etcd.git $ cd etcd
2. 根據(jù)實際情況,選擇合適的版本。如我這里使用的是2.2.1版本。
$ git checkout -b v2.2.1
3. 編譯源碼。運行該目錄的build可執(zhí)行文件。
$ ./build
但是,運行該命令出錯,提示找不到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)上搜索了一番,原來etcd需要在Golang1.7以上的環(huán)境才能編譯,而我使用的是Ubuntu16.04,默認的Golang版本是1.6的,沒有context包。因此,我們需要安裝Golang1.7環(huán)境。
4. 使用Docker容器編譯。因為我的Golang環(huán)境還運行著其他的包,為了不影響其他包運行。我這里直接使用Golang1.7的docker容器來編譯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鏡像需要一定的時間。下載完成后,就進入了容器中,然后cd到/opt/etcd目錄,執(zhí)行編譯。
待編譯完成后,查看etcd的bin目錄下,是否有可執(zhí)行文件,如果有,就說明編譯成功。然后退出容器,服務(wù)器的etcd目錄中也有對應(yīng)的可執(zhí)行文件了。
總結(jié)
etcd需要在Golang1.7以上的版本編譯。
Docker容器可以很輕松的提供Golang環(huán)境,而且不會影響原來的環(huán)境,是一種新的思路。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker安裝后導(dǎo)致的網(wǎng)絡(luò)問題及解決
這篇文章主要介紹了docker安裝后導(dǎo)致的網(wǎng)絡(luò)問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11基于Docker實現(xiàn)MySQL主從復(fù)制的詳細教程
這篇博客整理了如何在Docker環(huán)境下配置MySQL主從復(fù)制,通過創(chuàng)建和命名兩個MySQL容器,設(shè)置獨立IP,并詳細說明了在宿主機上持久化數(shù)據(jù)、開啟root遠程訪問及添加復(fù)制用戶的過程,需要的朋友可以參考下2024-10-10Docker深度清除鏡像緩存overlay2的實現(xiàn)
維清理鏡像是通過命令?docker?rm?i?刪除鏡像的,但是這條命令不會刪除docker?build命令產(chǎn)生的緩存文件,本文主要介紹了Docker深度清除鏡像緩存overlay2的實現(xiàn),感興趣的可以了解一下2023-12-12使用minikube安裝使用單機版K8S方式(docker)
本文介紹了如何在centos7上使用minikube快速搭建單機版k8s,主要步驟包括:下載kubectl和docker,創(chuàng)建新用戶,下載和安裝minikube,驗證安裝情況,最后,通過執(zhí)行minikube和minikubestop啟停K8s,或使用minikubedelete徹底刪除K8S的數(shù)據(jù)2024-10-10利用?trap?在?docker?容器優(yōu)雅關(guān)閉前執(zhí)行環(huán)境清理的方案
這篇文章主要介紹了利用?trap?在?docker?容器優(yōu)雅關(guān)閉前執(zhí)行環(huán)境清理的問題,需要在容器的啟動腳本中,加入 trap 指令,來完成容器在退出前需要做的所有事情,本文通過腳本示例給大家介紹的非常詳細,需要的朋友參考下吧2021-12-12docker?build?-t?和?docker?build?-f?區(qū)別解析
docker build 是用于構(gòu)建Docker鏡像的命令,它允許你基于一個Dockerfile來創(chuàng)建一個鏡像,在 docker build 命令中,有兩個常用的選項 -t 和 -f,它們有不同的作用,這篇文章主要介紹了docker?build?-t?和?docker?build?-f?區(qū)別,需要的朋友可以參考下2023-08-08