文档章节

使用Dockerfile构建自己的etcd镜像

Andy-xu
 Andy-xu
发布于 2017/08/30 22:26
字数 820
阅读 72
收藏 1
点赞 1
评论 0

本篇文章手把手教你如何使用Dockerfile构建自己etcd镜像,并且已经提供基于etcd3.0.10 的image供读者使用,用户可以快速使用docker image构建自己的etcd集群环境

一、etcd镜像的Dockerfile文件结构

注意:优秀的docker镜像源文件都是会尝试去除所有依赖的,也即是该文件无论被谁拿走使用,都可以快速构建属于自己的image

etcd镜像的Dockerfile项目文件结构:

$ tree .
.
├──Dockerfile
├──docker-entrypoint.sh


# Dockerfile 文件
$ cat Dockerfile
FROM centos-biaoge
MAINTAINER 371990778@qq.com
ENV LANG=zh_CN.UTF-8;\
    LC_ALL=zh_CN.UTF-8;\
    TZ="Asia/Shanghai";\
    TERM=xterm;\
    DOWNLOAD=https://github.com/coreos/etcd/releases/download/v3.0.10/ \
    ETCDVERSION=etcd-v3.0.10-linux-amd64 \
    USER=admin 
RUN yum install mkdir curl wget tar chown unzip -y;\
    useradd ${USER} ;\
    mkdir -p /export/{servers,Logs,packages,Apps,Shell};\
    wget ${DOWNLOAD}${ETCDVERSION}.tar.gz && tar -zxf ${ETCDVERSION}.tar.gz -C /export/servers/ && \
    /bin/rm -rf ${ETCDVERSION}.tar.gz;\
    chown -R ${USER}.${USER} /export ;\
    ln -s /export/servers/${ETCDVERSION}/etcd* /usr/bin/;
EXPOSE 2379 2380
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

# 镜像启动脚本
$ cat docker-entrypoint.sh
#!/bin/bash
#Filename:docker-entrypoint.sh
#Author_by:Andy_xu 
#Contact:[mail:371990778@qq.com,QQ:371990778]
#Date:2017-07-25 16:42
#Description:
if [ -z $NAME ];then
	NAME=my-etcd-1
fi
if [ -z $DATADIR ];then
	DATADIR=/export/etcd_data
fi
if [ -z $MYHOST ];then
	MYHOST=http://localhost
fi
if [ -z $PORT ];then
        PORT=2379
fi
if [ -z $CLUSTER_PORT ];then
        CLUSTER_PORT=2380
fi
if [ -z $CLUSTER ];then 
	CLUSTER=my-etcd-1=http://localhost:2380
fi
if [ -z $CLUSTER_TOKEN ];then 
	CLUSTER_TOKEN=my-etcd-token
fi
if [ -z $CLUSTER_STATE ];then
	CLUSTER_STATE=new
fi
	
ETCD_CMD="etcd --name ${NAME} --data-dir ${DATADIR}  \
	--listen-client-urls http://0.0.0.0:${PORT}  \
	--advertise-client-urls ${MYHOST}:${PORT} \
  	--listen-peer-urls ${MYHOST}:${CLUSTER_PORT} \
	--initial-advertise-peer-urls ${MYHOST}:${CLUSTER_PORT} \
	--initial-cluster $CLUSTER  \
	 --initial-cluster-token $CLUSTER_TOKEN \
	--initial-cluster-state ${CLUSTER_STATE} \
	$*"
echo -e "Running '$ETCD_CMD'\nBEGIN ETCD OUTPUT\n"
exec $ETCD_CMD

二、构建并使用image

1.构建etcd的image

进入项目路径下,执行以下命令:

$ docker build -t xxbandy123/etcd:3.0.10

2.使用默认参数创建etcd单实例

$ docker run -itd --name etcd-1 xxbandy123/etcd:3.0.10  --auto-compaction-retention 1

注意:后面的 --auto-compaction-retention 1 为额外增加的参数表示1小时自动压缩保留 默认的容器启动后面都可以增加额外的参数

3.使用自定义的参数进行创建etcd单实例

image内部定义的默认参数如下:

NAME=my-etcd-1
DATADIR=/export/etcd_data
MYHOST=http://localhost
PORT=2379
CLUSTER_PORT=2380
CLUSTER=my-etcd-1=http://localhost:2380
CLUSTER_TOKEN=my-etcd-token
CLUSTER_STATE=new


etcd --name ${NAME} --data-dir ${DATADIR}  \
    --listen-client-urls http://0.0.0.0:${PORT}  \
    --advertise-client-urls ${MYHOST}:${PORT} \
    --listen-peer-urls ${MYHOST}:${CLUSTER_PORT} \
    --initial-advertise-peer-urls ${MYHOST}:${CLUSTER_PORT} \
    --initial-cluster $CLUSTER  \
     --initial-cluster-token $CLUSTER_TOKEN \
    --initial-cluster-state ${CLUSTER_STATE} 

可以通过环境变量的方式启动单实例的etcd,也可以将该image传入不通变量去构造集群

$ docker run -itd -e DATADIR=/root/etcd_data -e CLUSTER_TOKEN=biaoge xxbandy123/etcd:3.0.10 --auto-compaction-retention 1

4.如何使用etcd

docker pull xxbandy123/etcd:3.0.10

# docker  ps -l
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                            NAMES
e17c9479b424        xxbandy123/etcd:3.0.10   "/docker-entrypoint.s"   19 seconds ago      Up 17 seconds       0.0.0.0:1025->2379/tcp, 0.0.0.0:1024->2380/tcp   sharp_keller

# docker  exec -it sharp_keller etcdctl set test biaoge
biaoge

# curl -s localhost:1025/v2/keys/test | jq .
{
  "node": {
    "createdIndex": 4,
    "modifiedIndex": 4,
    "value": "biaoge",
    "key": "/test"
  },
  "action": "get"
}

在任何一个客户端去访问:
# curl -s 10.241.131.109:1025/v2/keys/test | jq .
{
  "node": {
    "createdIndex": 4,
    "modifiedIndex": 4,
    "value": "biaoge",
    "key": "/test"
  },
  "action": "get"
}

三、自由发挥时间

由于该etcd实例可以通过环境变量传入参数,因此虽然是一个image,但是却非常灵活,用户可以在很快的时间内创建出来一个etcd集群。So,学会如何构建一个etcd镜像后,可以尝试下使用该image来快速构建一个etcd集群。

为方便大家的使用,该image已经上传到docker hub中,读者可以直接在本地pull后进行使用:

docker pull xxbandy123/etcd:3.0.10

原文地址

© 著作权归作者所有

共有 人打赏支持
Andy-xu
粉丝 109
博文 93
码字总数 179246
作品 0
大兴
运维
使用 Dockerfile 定制镜像教程

使用 Dockerfile 定制镜像 从刚才的docker commit的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一...

王冠hurt的博客 ⋅ 2017/12/20 ⋅ 0

利用Swarmkit构建Windows/Linux混合Docker集群

在很多公司都同时存在Windows+Linux两种操作系统,在Linux上跑Docker很方便各种资料文档齐全,但是在Windows上跑Docker相对比较少,同时也受到一些限制,如Windows上docker网络问题。下面就介...

rong341233 ⋅ 2017/08/02 ⋅ 0

Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx

摘要: 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 ,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!无...

souyunku ⋅ 01/04 ⋅ 0

构建自己的Tomcat镜像

在很多情况下,我们会不满足于官方提供的Tomcat镜像。比如官方镜像的时区为UTC时间,并不是北京时间;再比如在特定硬件环境下,jdk的随机数生成器初始化过慢问题。此时,我们就会考虑构建自己...

yrgw ⋅ 2017/07/11 ⋅ 0

应用管理平台--云帮

云帮(ACP) 基于容器技术,以应用为中心的PaaS平台 ACP —— Application-centric platform as a service 云帮 是好雨科技研发的一款基于容器技术的应用管理平台。社区版针对个人、企业完全...

好雨云帮 ⋅ 2016/10/26 ⋅ 2

构建你自己的镜像

目录 开始使用Docker 在OS X安装Docker 理解镜像(images)和容器(containers) 搜索&运行whalesay镜像 构建你自己的镜像 创建Docker Hub账号(account)&库(repository) 标记(Tag),推送(Push),拉...

暗之幻影 ⋅ 2016/12/10 ⋅ 0

Docker自发现注册服务基础(一) -- etcd

前言 [技术源于艺术, 艺术源于生活] 1) 这是我第一次发布程序相关的技术文章, 10年前发表过很多关于3dsmax和maya的技术文章 2) 有人无端转载我的文章, 所以这里留一个我的联系方式, 欢迎讨论...

funwun ⋅ 2016/06/12 ⋅ 11

Dockerfile 的详解

Dockerfile 的详解 使用Docker技术构建自己的镜像是最常见的应用场景,目前为止Docker官方也提供两种构建镜像的方法。一种是使用 指令将当前的容器状态保存为一个镜像,另外一种则是编写Doc...

Allocator ⋅ 2017/04/06 ⋅ 0

Docker学习记录(2)——JAVA应用容器化(JAVA博客应用Solo)

以GitHub上一个开源JAVA博客应用为例,地址为:https://github.com/b3log/solo。它的项目结构是基于Maven的要求布置的,通过Maven可以编译和构建WAR包。 执行容器化的环境为CentOS7.2。 安装...

huqigang ⋅ 2017/09/12 ⋅ 0

Docker学习笔记四 镜像

4.1 Docker镜像介绍 Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统(bootfs),Docker用户几乎不会和引导文件系统有交互,当容器启动后它会被卸载而移动到内存中。 第二层是roo...

一万 ⋅ 2016/07/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 29分钟前 ⋅ 0

Confluence 6 从生产环境中恢复一个测试实例

请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明。 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 Confluence 服务器,同时还会设置一个...

honeymose ⋅ 34分钟前 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 45分钟前 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 50分钟前 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 53分钟前 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 58分钟前 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 今天 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 今天 ⋅ 0

only_full_group_by

我的mysql是在CentOS7.1下面的5.7.17 在 /etc/my.cnf 文件里加上如下: sql_mode='NO_ENGINE_SUBSTITUTION' 然后,重启Mysql服务 systemctl restart mysqld...

SunHacker ⋅ 今天 ⋅ 0

实际项目(SpringBoot项目)中集成Druid

参考网页 https://blog.csdn.net/liuchuanhong1/article/details/55050131 https://blog.csdn.net/CoffeeAndIce/article/details/78707819 https://www.pocketdigi.com/20170530/1577.html 为......

karma123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部