DOCKERコンテナを使用してETCDをソースコードでコンパイル

1660 ワード

背景
etcdはCoreOS社が開発した分散キー値対リポジトリである.Kubernetesでは、etcdをすべてのREST APIオブジェクトの永続化ストレージとして使用する必要があります.残念なことにgithubのreleaseでは、CoreOSはetcdのバイナリ実行可能ファイルをアマゾンのS 3ストレージに格納し、国内でのアクセスが非常に遅い.したがって、ソースコードでetcdをコンパイルするしかありません.
プロセス
1.etcdソースをダウンロードします.
$ git clone https://github.com/coreos/etcd.git
$ cd etcd
2.実際の状況に応じて、適切なバージョンを選択します.ここで使用しているバージョンは2.2.1です.
$ git checkout -b v2.2.1
3.ソースコードをコンパイルします.ディレクトリのbuild実行ファイルを実行します.
$ ./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
ネット上で検索すると、etcdはGolang 1.7以上の環境でコンパイルする必要がありましたが、私が使っているのはUbuntu 16.04で、デフォルトのGolangバージョンは1.6で、contextパッケージはありません.そのため、Golang 1.7環境をインストールする必要があります.4.Dockerコンテナを使用してコンパイルします.私のGolang環境では他のパッケージも実行しているので、他のパッケージの実行に影響を与えないようにしています.Golang 1.7のdockerコンテナを直接使用してetcdをコンパイルします.
$ sudo docker run -v /home/newbee/etcd/:/opt/etcd -it --rm golang:1.7.5 bash# cd /opt/etcd# ./build
-vパラメータでは、/home/newbee/etcdはDocker host(つまり私のサーバ)のetcdディレクトリであり、/opt/etcdは私のコンテナのマッピングディレクトリです.注意:Docker hubからgolangミラーをダウンロードするには一定の時間がかかります.ダウンロードが完了すると、コンテナに入り、cdを/opt/etcdディレクトリに移動してコンパイルを実行します.コンパイルが完了したら、etcdのbinディレクトリの下に実行可能なファイルがあるかどうかを確認し、ある場合はコンパイルに成功したことを示します.その後コンテナを終了し、サーバのetcdディレクトリにも対応する実行可能ファイルがあります.