1. 程式人生 > 其它 >使用Dockerfile構建自己的etcd映象

使用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 [email protected]
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:[email protected],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 OUTPUTn"
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