使用Dockerfile构建自己的etcd镜像

本篇文章手把手教你如何使用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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

rac节点无法启动ORA-29702的问题及分析(70天)

今天在虚拟机上启动rac,发现有一个节点怎么都起不了。另外一个节点没问题。 SQL> startup nomount ORA-29702: error occ...

64060
来自专栏乐沙弥的世界

ORA-27090 故障一例

    最近的alert日志中碰到了ORA-27090的错误信息,其错误提示为Unable to reserve kernel resources for as...

8120
来自专栏听雨堂

网页链接打开程序

就像电驴那样: 网页链接地址是 : ed2k:// ¦file ¦Dracula.1992.CE.2AUDIO.DVDRip.DTS.X264.GUEVA...

221100
来自专栏三杯水

DNS主从服务器搭建

http://blog.51cto.com/yichenyang/1911098 http://blog.51cto.com/wubinary/1379595

21420
来自专栏Hongten

How to create a project with Oracle Policy Modeling

This blog is about how to create a project with Oracle Policy Modeling.

8220
来自专栏北京马哥教育

CentOS 7下安装Logstash ELK Stack 日志管理系统(上)

介绍 ? The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个...

38860
来自专栏耕耘实录

找回win7桌面IE图标我有绝招

现在很多同学都用了微软的新一代操作系统Windows7,都为Windows7的华丽界面及更人性化得操作所深深吸引,但是由于我们大多数同学都习惯了原来的Windo...

34050
来自专栏乐享123

How to Penetrate GFW With ShadowSocks Docker Container on Centos7

20340
来自专栏数据库新发现

Apache的一个错误:[error] an unknown filter was not added: PHP

在apache的日志里经常看到这个错误: [Fri Oct 08 14:49:18 2004] [error] an unknown filter was n...

17520
来自专栏后台及大数据开发

kubernetes集群搭建(6):kubernetes基本使用演示

流程: 用户访问client应用,client应用中调用server应用,由于部署了多节点,client在访问server时应该配置server 暴露的虚拟IP...

14220

扫码关注云+社区

领取腾讯云代金券