From a02f8253ab361dceb49cc2aed66accc6845700ba Mon Sep 17 00:00:00 2001 From: kev Date: Wed, 13 Sep 2017 17:31:46 +0800 Subject: [PATCH] add zookeeper --- README.md | 1 + zookeeper/README.md | 40 ++++++++++++++++ zookeeper/arm/Dockerfile | 59 ++++++++++++++++++++++++ zookeeper/arm/docker-compose-cluster.yml | 12 +++++ zookeeper/arm/docker-compose.yml | 8 ++++ zookeeper/arm/docker-entrypoint.sh | 35 ++++++++++++++ zookeeper/docker-compose.yml | 8 ++++ 7 files changed, 163 insertions(+) create mode 100644 zookeeper/README.md create mode 100644 zookeeper/arm/Dockerfile create mode 100644 zookeeper/arm/docker-compose-cluster.yml create mode 100644 zookeeper/arm/docker-compose.yml create mode 100755 zookeeper/arm/docker-entrypoint.sh create mode 100644 zookeeper/docker-compose.yml diff --git a/README.md b/README.md index 35f7acd..02503f9 100644 --- a/README.md +++ b/README.md @@ -263,6 +263,7 @@ A collection of delicious docker recipes. - [x] standalone-firefox - [x] tutum/builder - [x] wekanteam/wekan +- [x] zookeeper ## auto-completion diff --git a/zookeeper/README.md b/zookeeper/README.md new file mode 100644 index 0000000..0cb3530 --- /dev/null +++ b/zookeeper/README.md @@ -0,0 +1,40 @@ +zookeeper +========= + +![](http://zookeeper.apache.org/images/zookeeper_small.gif) + +Apache [ZooKeeper][1] is an effort to develop and maintain an open-source server +which enables highly reliable distributed coordination. + + +## docker-compose.yml + +```yaml +zookeeper: + image: zookeeper + ports: + - "2181:2181" + volumes: + - ./data:/data + - ./datalog:/datalog + restart: always +``` + +## Standalone Mode + +```bash +$ docker-compose up -d +$ docker-compose exec zookeeper zkCli.sh +>>> help +>>> create /hello world +>>> get /hello +>>> delete /hello +>>> quit +``` + +Click [this][2] to learn more. + +## Cluster Mode [TODO] + +[1]: http://zookeeper.apache.org/ +[2]: https://zookeeper.apache.org/doc/trunk/zookeeperStarted.html diff --git a/zookeeper/arm/Dockerfile b/zookeeper/arm/Dockerfile new file mode 100644 index 0000000..d2cf24f --- /dev/null +++ b/zookeeper/arm/Dockerfile @@ -0,0 +1,59 @@ +# +# Dockerfile for zookeeper-arm +# + +FROM easypi/alpine-arm +MAINTAINER EasyPi Software Foundation + +# Install required packages +RUN apk add --no-cache \ + bash \ + openjdk8-jre \ + su-exec + +ENV ZOO_USER=zookeeper \ + ZOO_CONF_DIR=/conf \ + ZOO_DATA_DIR=/data \ + ZOO_DATA_LOG_DIR=/datalog \ + ZOO_PORT=2181 \ + ZOO_TICK_TIME=2000 \ + ZOO_INIT_LIMIT=5 \ + ZOO_SYNC_LIMIT=2 \ + ZOO_MAX_CLIENT_CNXNS=60 + +# Add a user and make dirs +RUN set -ex; \ + adduser -D "$ZOO_USER"; \ + mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR"; \ + chown "$ZOO_USER:$ZOO_USER" "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" + +ARG GPG_KEY=C823E3E5B12AF29C67F81976F5CECB3CB5E9BD2D +ARG DISTRO_NAME=zookeeper-3.4.10 + +# Download Apache Zookeeper, verify its PGP signature, untar and clean up +RUN set -ex; \ + apk add --no-cache --virtual .build-deps \ + gnupg wget; \ + wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz"; \ + wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz.asc"; \ + export GNUPGHOME="$(mktemp -d)"; \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-key "$GPG_KEY" || \ + gpg --keyserver pgp.mit.edu --recv-keys "$GPG_KEY" || \ + gpg --keyserver keyserver.pgp.com --recv-keys "$GPG_KEY"; \ + gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz"; \ + tar -xzf "$DISTRO_NAME.tar.gz"; \ + mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR"; \ + rm -rf "$GNUPGHOME" "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc"; \ + apk del .build-deps + +WORKDIR $DISTRO_NAME +VOLUME ["$ZOO_DATA_DIR", "$ZOO_DATA_LOG_DIR"] + +EXPOSE $ZOO_PORT 2888 3888 + +ENV PATH=$PATH:/$DISTRO_NAME/bin \ + ZOOCFGDIR=$ZOO_CONF_DIR + +COPY docker-entrypoint.sh / +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["zkServer.sh", "start-foreground"] diff --git a/zookeeper/arm/docker-compose-cluster.yml b/zookeeper/arm/docker-compose-cluster.yml new file mode 100644 index 0000000..58d3c46 --- /dev/null +++ b/zookeeper/arm/docker-compose-cluster.yml @@ -0,0 +1,12 @@ +zookeeper: + image: easypi/zookeeper-arm + volumes: + - ./data:/data + - ./datalog:/datalog + environment: + - ZOO_MY_ID=1 + - ZOO_SERVERS=server.1=192.168.1.106:2888:3888 + server.2=192.168.1.107:2888:3888 + server.3=192.168.1.108:2888:3888 + net: host + restart: always diff --git a/zookeeper/arm/docker-compose.yml b/zookeeper/arm/docker-compose.yml new file mode 100644 index 0000000..1df5df7 --- /dev/null +++ b/zookeeper/arm/docker-compose.yml @@ -0,0 +1,8 @@ +zookeeper: + image: easypi/zookeeper-arm + ports: + - "2181:2181" + volumes: + - ./data:/data + - ./datalog:/datalog + restart: always diff --git a/zookeeper/arm/docker-entrypoint.sh b/zookeeper/arm/docker-entrypoint.sh new file mode 100755 index 0000000..4d9a856 --- /dev/null +++ b/zookeeper/arm/docker-entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +# Allow the container to be started with `--user` +if [ "$1" = 'zkServer.sh' -a "$(id -u)" = '0' ]; then + chown -R "$ZOO_USER" "$ZOO_DATA_DIR" "$ZOO_DATA_LOG_DIR" + exec su-exec "$ZOO_USER" "$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=$ZOO_PORT" >> "$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 "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 "$@" diff --git a/zookeeper/docker-compose.yml b/zookeeper/docker-compose.yml new file mode 100644 index 0000000..da741d3 --- /dev/null +++ b/zookeeper/docker-compose.yml @@ -0,0 +1,8 @@ +zookeeper: + image: zookeeper + ports: + - "2181:2181" + volumes: + - ./data:/data + - ./datalog:/datalog + restart: always