使用Dockerfile构建自己的etcd镜像
时间:2022-04-28
本文章向大家介绍使用Dockerfile构建自己的etcd镜像,主要内容包括一、etcd镜像的Dockerfile文件结构、二、构建并使用image、2.使用默认参数创建etcd单实例、3.使用自定义的参数进行创建etcd单实例、4.如何使用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 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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis性能指标监控!你知几何?
- Rust FFI 编程 - Bindgen 工具介绍
- synchronized的实现原理——锁膨胀过程
- 大点干!早点散----------rsync+inotify实现远程实时同步
- 听说MongoDB你很豪横?-------------MongoDB数据库基础详解
- 听说MongoDB你很豪横?-------------MongoDB 部署分片群集以及管理分片
- SAP Spartacus和product相关的标准normalizer
- 【Rust 日报】2020-09-09 引入“auditable”
- 听说MongoDB你很豪横?-------------MongoDB复制集以及管理优化
- 听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作
- 听说Memcache你很豪横?-------------深入剖析Memcache+keepalive高可用群集
- 排障集锦:九九八十一难之第十四难!------------- 安装magent时make编译报错
- 【Rust日报】2020-09-06 Evil_DLL 用来测试注入方法的DLL
- 【Rust日报】2020-09-05 微软在c++静态分析工具实现了一些rust的安全规则
- 一起来玩玩WebGL