背景

  etcd是CoreOS公司开发的分布式键值对存储库。在Kubernetes中,我们需要使用etcd作为所有REST API对象的持久化存储。

  不幸的是,在github的release中,CoreOS将etcd的二进制可执行文件都放在了亚马逊的S3存储上,在国内访问非常慢。因此,我们只能通过源码编译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需要在Golang1.7以上的环境才能编译,而我使用的是Ubuntu16.04,默认的Golang版本是1.6的,没有context包。因此,我们需要安装Golang1.7环境。

  4. 使用Docker容器编译。因为我的Golang环境还运行着其他的包,为了不影响其他包运行。我这里直接使用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参数中,/home/newbee/etcd是我在Docker host中(也就是我服务器的)的etcd目录,而/opt/etcd是我容器中的映射目录。注意:从Docker hub下载golang镜像需要一定的时间。下载完成后,就进入了容器中,然后cd到/opt/etcd目录,执行编译。

  待编译完成后,查看etcd的bin目录下,是否有可执行文件,如果有,就说明编译成功。然后退出容器,服务器的etcd目录中也有对应的可执行文件了。

总结

  etcd需要在Golang1.7以上的版本编译。

  Docker容器可以很轻松的提供Golang环境,而且不会影响原来的环境,是一种新的思路。

使用Docker容器来源码编译etcd的更多相关文章

  1. Docker容器搭建android编译环境

    Docker容器搭建android编译环境 目录 1 部署容器 1.1 手动部署 1.1.1 配置docker 1.1.2 启动容器 1.1.3 配置环境 1.2 Dockerfile 2 镜像管理 ...

  2. Apache Spark源码走读之9 -- Spark源码编译

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本来源码编译没有什么可说的,对于java项目来说,只要会点maven或ant的简单命令,依葫芦画瓢,一下子就ok了.但到了Spark上面,事情似乎不这么简单 ...

  3. Docker源码编译

    官方建议docker源码编译在docker容器内进行,因为官方提供的容器内已经继承了编译需要的环境,如果非要自己搭建编译环境也不是不可以,就是稍微有些繁琐.以下以1.8.2版本为例. 1.pull d ...

  4. 在docker容器中编译hadoop 3.1.0

    在docker容器中编译hadoop 3.1.0 优点:docker安装好之后可以一键部署编译环境,不用担心各种库不兼容等问题,编译失败率低. Hadoop 3.1.0 的源代码目录下有一个 `sta ...

  5. Docker容器编译安装Redis

    Docker容器编译安装Redis 1.创建容器 -i 交互模式 -d 后端运行 -h 容器的hostname --name 容器名 --network 网卡 --ip IP地址 -p 端口映射 -- ...

  6. docker 源码分析 五(基于1.8.2版本),Docker容器的创建

    前面讲到了docker容器得镜像,镜像其实是docker容器的静态部分,而docker容器则是docker镜像的动态部分,即启动了一个进程来运行,本篇最要来分析一下怎样创建并运行一个容器. 创建一个容 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  8. 基于spring-boot和docker-java实现对docker容器的动态管理和监控[附完整源码下载]

    ​ (我是个封面) docker简介 Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者喜爱.随着基于docker的开发者越来越多,doc ...

  9. Ubuntu编译安装HAprox+Keepalived+MySQL负载高可用架构(结合Docker容器配置)

    系统环境:Ubuntu16.04(Docker容器) 架构环境: Keepalived/HAproxy MASTER: 172.17.0.4 Keepalived/HAproxy BACKUP: 17 ...

随机推荐

  1. 分布式缓存技术memcached学习系列(四)—— 一致性hash算法原理

    分布式一致性hash算法简介 当你看到"分布式一致性hash算法"这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前, ...

  2. 转自scutan 常用的Linux编程库

    库                       头文件                       描述libGL.so                                        ...

  3. 冬天 苹果笔记 macbook pro 消除静电的方法

    冬天mac除静电的方法 1.mac虽然声称不需要关机,但和apple技术人员沟通后,还是需要1周进行一次关机操作 2.通过苹果黑科技重置面板上的静电,如下: apple官方的地址: https://s ...

  4. JavaScript null 和 undefined

    null null 表示一个变量被声明了,并被赋值为空 var lzh = null; console.log(lzh); // null console.log(typeof lzh); // ob ...

  5. bootstrap模态框总结

    <html lang="zh-cn"> <head> <meta charset="utf-8"> <title> ...

  6. SpringBoot实践 - SpringBoot+MySql+Redis

    大家都知道redis的强大之处,在目前应用上也是大显神威. 先说说他的优点: 1 读写性能优异 2 支持数据持久化,支持AOF日志和RDB快照两种持久化方式 3 支持主从复制,主机会自动将数据同步到从 ...

  7. oracle系列笔记(2)---多表查询

    多表查询     这篇文章主要讲四点: (1)oracle多表查询    (2)SQL99标准的连接查询   (3)子查询     (4)分级查询 oracle多表查询有两种方式,一种是oracle所 ...

  8. webstorm 编辑器破解 (麻麻再也不用担心过期了)

    先去官网下载webstorm2016.1.3版本(目前只知道2016.1这个版本可以永久破解,不会过期) 再下载webstorm2016.1的破解补丁 将下载好的破解补丁解压,会有一个Jetbrain ...

  9. Docker入门01——Image

    1.获取镜像 2.列出镜像 3.创建镜像 3.1 修改已有镜像 3.2 使用Dockerfile创建镜像 创建Dickerfile文件 使用build来创建镜像 使用新创建的镜像来启动容器 4.移除镜 ...

  10. linux-网络数据包抓取-tcpdump

    用法格式: tcpdump [-i 网卡]  [选项]  '表达式' 选项说明如下: -i:interface 监听的网卡. -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和 ...