建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

ROC

发帖: 3粉丝: 0

发消息 + 关注

发表于2019年07月23日 14:16:21 3616 2
直达本楼层的链接
楼主
显示全部楼层
[优秀实践] Zookeeper3.4.9通过Dockerfile生成容器镜像及使用配置指导

1 Zookeeper简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。本次介绍Zookeeper3.4.9重新封装docker镜像后拉起服务。

2 环境说明

2.1 验证环境信息说明

华为云,ARM云主机,操作系统版本:CentOS 7.5;内核:Linux ecs-arm-004 4.14.0-49.el7a.aarch64,Docker CE 18.09.6。

3 编译环境准备

3.1 安装Docker容器引擎

通过yum安装Docker容器引擎及Docker compose(为Zookeeper集群化部署做准备)。

yum-config-manager   --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum   install docker-ce

systemctl   start docker

systemctl   enable docker

yum   install -y docker-compose

3.2 安装Ant打包工具

通过yum安装Ant:

yum   install -y ant

3.3 安装automakecppunit工具

yum   install -y autoconf automake libtool

yum   install -y cppunit

 

4 依赖库编译

5 Zookeeper编译

从官网上下载zookeeper-release-3.4.9源码到根目录下,并解压:

wget https://github.com/apache/zookeeper/archive/release-3.4.9.tar.gz

tar   -zxf zookeeper-release-3.4.9.tar.gz

如果官网下载有问题,可以通过网站(https://github.com/apache/zookeeper/releases/tag/release-3.4.9)下载源码包,通过FTP工具上传到云主机之后再执行解压。

进入到解压后的zookeeper目录执行编译:

cd zookeeper-release-3.4.9

ant package   tar

    如果出现打包失败,可继续运行一次打包明命令。打包成功后将在源码目录zookeeper-release-3.4.9/build下找到 zookeeper-3.4.9.tar.gz包。

6 Docker容器镜像制作

 Step1:将第五步生成好的zookeeper-3.4.9.tar.gz拷贝到opt目录下。

cp   /zookeeper-release-3.4.9/build/zookeeper-3.4.9.tar.gz /opt

Step2:生成docker-entrypoint.sh文件,为生成Dockerfile准备

cd   /opt

vim   docker-entrypoint.sh

#将如下内容拷贝到docker-entrypoint.sh之后运行:wq保存

#!/bin/bash

set -e

#   Allow the container to be started with `--user`

if [[   "$1" = 'zkServer.sh' && "$(id -u)" = '0' ]]; then

    chown -R zookeeper   "$ZOO_DATA_DIR" "$ZOO_DATA_LOG_DIR"   "$ZOO_LOG_DIR" "$ZOO_CONF_DIR"

    exec gosu zookeeper "$0"   "$@"

fi

 

#   Generate the config only if it doesn't exist

if [[   ! -f "$ZOO_CONF_DIR/zoo.cfg" ]]; then

    CONFIG="$ZOO_CONF_DIR/zoo.cfg"

 

    echo "clientPort=2181" >>   "$CONFIG"

    echo "dataDir=$ZOO_DATA_DIR"   >> "$CONFIG"

    echo   "dataLogDir=$ZOO_DATA_LOG_DIR" >> "$CONFIG"

 

    echo "tickTime=$ZOO_TICK_TIME"   >> "$CONFIG"

    echo   "initLimit=$ZOO_INIT_LIMIT" >> "$CONFIG"

    echo   "syncLimit=$ZOO_SYNC_LIMIT" >> "$CONFIG"

 

    echo   "autopurge.snapRetainCount=$ZOO_AUTOPURGE_SNAPRETAINCOUNT" >>   "$CONFIG"

    echo   "autopurge.purgeInterval=$ZOO_AUTOPURGE_PURGEINTERVAL" >>   "$CONFIG"

    echo   "maxClientCnxns=$ZOO_MAX_CLIENT_CNXNS" >> "$CONFIG"

 

    for server in $ZOO_SERVERS; do

        echo "$server" >>   "$CONFIG"

    done

fi

 

#   Write myid only if it doesn't exist

if [[   ! -f "$ZOO_DATA_DIR/myid" ]]; then

    echo "${ZOO_MY_ID:-1}" >   "$ZOO_DATA_DIR/myid"

fi

 

exec   "$@"

Step2:生成Dockerfile

vim   Dockerfile

#将如下内容拷贝到Dockerfile之后运行:wq保存

FROM   arm64v8/openjdk:8-jre-slim

 

ENV   ZOO_CONF_DIR=/conf \

    ZOO_DATA_DIR=/data \

    ZOO_DATA_LOG_DIR=/datalog \

    ZOO_LOG_DIR=/logs \

    ZOO_TICK_TIME=2000 \

    ZOO_INIT_LIMIT=5 \

    ZOO_SYNC_LIMIT=2 \

    ZOO_AUTOPURGE_PURGEINTERVAL=0 \

    ZOO_AUTOPURGE_SNAPRETAINCOUNT=3 \

    ZOO_MAX_CLIENT_CNXNS=60

 

RUN   set -eux; \

    groupadd -r zookeeper --gid=1000; \

    useradd -r -g zookeeper --uid=1000   zookeeper; \

    mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR"   "$ZOO_CONF_DIR" "$ZOO_LOG_DIR"; \

    chown zookeeper:zookeeper   "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR"   "$ZOO_CONF_DIR" "$ZOO_LOG_DIR"

 

#   Install required packges

RUN   set -eux; \

    apt-get update; \

    DEBIAN_FRONTEND=noninteractive \

    apt-get install -y   --no-install-recommends \

        ca-certificates \

        dirmngr \

        gosu \

        gnupg \

        netcat \

        wget; \

    rm -rf /var/lib/apt/lists/*; \

#   Verify that gosu binary works

    gosu nobody true

 

ARG   DISTRO_NAME=zookeeper-3.4.9

 

COPY   ./zookeeper-3.4.9.tar.gz /

 

RUN   set -eux; \

    tar -xzf "$DISTRO_NAME.tar.gz"   ; \

    mv "$DISTRO_NAME/conf/"*   "$ZOO_CONF_DIR"; \

        rm -rf   "$DISTRO_NAME.tar.gz"; \

    chown -R zookeeper:zookeeper   "/$DISTRO_NAME"

 

WORKDIR   $DISTRO_NAME

VOLUME   ["$ZOO_DATA_DIR", "$ZOO_DATA_LOG_DIR",   "$ZOO_LOG_DIR"]

 

EXPOSE   2181 2888 3888

 

ENV   PATH=$PATH:/$DISTRO_NAME/bin \

    ZOOCFGDIR=$ZOO_CONF_DIR

 

COPY   docker-entrypoint.sh /

RUN   chmod +x /docker-entrypoint.sh

ENTRYPOINT   ["/docker-entrypoint.sh"]

CMD   ["zkServer.sh", "start-foreground"]

 Step6:基于Dockerfile生成Docker镜像(记得输入“.”)

docker   build -t zookeeper_private:3.4.9 .

 

7 配置zookeeper容器

  1. 启动zookeeper单机容器运行和验证

docker   run --name my_zookeeper -d 2190:2181 zookeeper_private:3.4.9

#进入zkCli.sh所在的目录,运行如下命令

./zkCli.sh   -server localhost:2190

#连接成功之后可运行如下命令进行使用验证

ls /

create   /zk “hello”

quit

  1. 启动zookeeper容器集群运行和验证

    Step 1:在opt目录下创建docker-compose.yml文件

vim docker-compose.yml

#将如下文件拷贝到docker-compose.yml

version:   '2'

services:

    zoo1:

        image: zookeeper_private:3.4.9

        restart: always

        container_name: zoo1

        ports:

            - "2181:2181"

        environment:

            ZOO_MY_ID: 1

            ZOO_SERVERS:   server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

 

    zoo2:

        image: zookeeper_private:3.4.9

        restart: always

        container_name: zoo2

        ports:

            - "2182:2181"

        environment:

            ZOO_MY_ID: 2

            ZOO_SERVERS:   server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

 

    zoo3:

        image: zookeeper_private:3.4.9

        restart: always

        container_name: zoo3

        ports:

            - "2183:2181"

        environment:

            ZOO_MY_ID: 3

            ZOO_SERVERS: server.1=zoo1:2888:3888   server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

Step2:docker-compose所在目录启动和验证

COMPOSE_PROJECT_NAME=zk_test   docker-compose up

#另启一个窗口验证是否启动

cd   /opt

COMPOSE_PROJECT_NAME=zk_test   docker-compose ps

#如果进程显示up,则表示启动成功

 

8 参考信息

官方链接:https://zookeeper.apache.org/

其他连接:https://www.cnblogs.com/kingkoo/p/8732448.html

 

9 FAQ

zookeeper 3.4.9通过Dockerfile生成Docker镜像及使用配置指导.pdf 377.22 KB,下载次数:4 预览

举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

五湖四海@银河护卫队

发帖: 168粉丝: 71

级别 : 版主,版块专家

发消息 + 关注

发表于2020年04月01日 19:22:32
直达本楼层的链接
沙发
显示全部楼层

点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复
发表于2020年09月22日 12:58:22
直达本楼层的链接
板凳
显示全部楼层

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200