Docker學習筆記-Zookeeper集羣搭建

Linux版本:Ubuntu 16.04.2 LTS

Docker版本:Docker version 17.09.0-ce, build afdb6d4

Docker Compose版本:docker-compose version 1.22.0, build f46880fe

JDK版本:java version "1.8.0_102"

Zookeeper版本:zookeeper-3.4.14

相關構建配置文件如下:

JDK Dockerfile

From ubuntu:16.04.4
MAINTAINER xxxxx

ADD jdk-8u102-linux-x64.tar.gz /usr/local/

ENV JAVA_HOME=/usr/local/jdk1.8.0_102
ENV PATH=${JAVA_HOME}/bin:$PATH
ENV CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar

RUN echo "export JAVA_HOME=/usr/local/jdk1.8.0_102" >> /etc/profile
RUN echo "export PATH=${JAVA_HOME}/bin:$PATH" >> /etc/profile
RUN echo "export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar" >> /etc/profile

RUN ["/bin/bash","-c","source /etc/profile"]

RUN apt-get update && apt-get install -y net-tools iputils-ping vim iptables

docker build --no-cache -t jdk:1.8.0.102 images/jdk

Zookeeper Dockerfile

From jdk:1.8.0.102
MAINTAINER xxxxx

ADD zookeeper-3.4.14.tar.gz /usr/local/
RUN mv /usr/local/zookeeper-3.4.14 /usr/local/zookeeper

ENV ZOOKEEPER_HOME=/usr/local/zookeeper \
    ZOOKEEPER_CONF_DIR=/usr/local/zookeeper/conf \
    ZOOKEEPER_DATA_DIR=/usr/local/zookeeper/data \
    ZOOKEEPER_DATA_LOG_DIR=/usr/local/zookeeper/datalog \
    ZOOKEEPER_LOG_DIR=/usr/local/zookeeper/logs \
    ZOOKEEPER_TICK_TIME=2000 \
    ZOOKEEPER_INIT_LIMIT=5 \
    ZOOKEEPER_SYNC_LIMIT=2 \
    ZOOKEEPER_AUTOPURGE_PURGEINTERVAL=0 \
    ZOOKEEPER_AUTOPURGE_SNAPRETAINCOUNT=3 \
    ZOOKEEPER_MAX_CLIENT_CNXNS=60

RUN mkdir -p "$ZOOKEEPER_DATA_DIR" "$ZOOKEEPER_DATA_LOG_DIR" "$ZOOKEEPER_LOG_DIR"

RUN sed -i 's/zookeeper.log.dir=./zookeeper.log.dir=\/usr\/local\/zookeeper\/logs/g' $ZOOKEEPER_HOME/conf/log4j.properties
RUN sed -i 's/zookeeper.tracelog.dir=./zookeeper.tracelog.dir=\/usr\/local\/zookeeper\/logs/g' $ZOOKEEPER_HOME/conf/log4j.properties

WORKDIR $ZOOKEEPER_HOME
VOLUME ["$ZOOKEEPER_DATA_DIR", "$ZOOKEEPER_DATA_LOG_DIR", "$ZOOKEEPER_LOG_DIR"]

EXPOSE 2181 2888 3888

ENV PATH=$PATH:$ZOOKEEPER_HOME/bin \
    ZOOCFGDIR=$ZOOKEEPER_CONF_DIR \
    ZOO_DATADIR=$ZOOKEEPER_DATA_DIR

COPY zookeeper-entrypoint.sh /
RUN chmod +x /zookeeper-entrypoint.sh
ENTRYPOINT ["/zookeeper-entrypoint.sh"]

zookeeper-entrypoint.sh

#!/bin/bash

set -e

if [[ ! -f "$ZOOKEEPER_CONF_DIR/zoo.cfg" ]]; then
    CONFIG="$ZOOKEEPER_CONF_DIR/zoo.cfg"

    echo "clientPort=2181" >> "$CONFIG"
    echo "dataDir=$ZOOKEEPER_DATA_DIR" >> "$CONFIG"
    echo "dataLogDir=$ZOOKEEPER_DATA_LOG_DIR" >> "$CONFIG"

    echo "tickTime=$ZOOKEEPER_TICK_TIME" >> "$CONFIG"
    echo "initLimit=$ZOOKEEPER_INIT_LIMIT" >> "$CONFIG"
    echo "syncLimit=$ZOOKEEPER_SYNC_LIMIT" >> "$CONFIG"

    echo "autopurge.snapRetainCount=$ZOOKEEPER_AUTOPURGE_SNAPRETAINCOUNT" >> "$CONFIG"
    echo "autopurge.purgeInterval=$ZOOKEEPER_AUTOPURGE_PURGEINTERVAL" >> "$CONFIG"
    echo "maxClientCnxns=$ZOOKEEPER_MAX_CLIENT_CNXNS" >> "$CONFIG"

    for server in $ZOOKEEPER_SERVERS; do
        echo "$server" >> "$CONFIG"
    done
fi

if [[ ! -f "$ZOOKEEPER_DATA_DIR/myid" ]]; then
    echo "${ZOOKEEPER_MY_ID:-1}" > "$ZOOKEEPER_DATA_DIR/myid"
fi

$ZOOKEEPER_HOME/bin/zkServer.sh start-foreground

exec "$@"

docker build --no-cache -t zookeeper:3.4.14 images/zookeeper

docker-compose.yml

version: '3.4'

services:
  zookeeper1:
    image: zookeeper:3.4.14
    restart: always
    hostname: zookeeper1
    container_name: zookeeper1
    ports:
    - 12181:2181
    volumes:
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper1/data:/usr/local/zookeeper/data"
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper1/datalog:/usr/local/zookeeper/datalog"
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper1/logs:/usr/local/zookeeper/logs"
    environment:
      ZOOKEEPER_MY_ID: 1
      ZOOKEEPER_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888

  zookeeper2:
    image: zookeeper:3.4.14
    restart: always
    hostname: zookeeper2
    container_name: zookeeper2
    ports:
    - 22181:2181
    volumes:
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper2/data:/usr/local/zookeeper/data"
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper2/datalog:/usr/local/zookeeper/datalog"
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper2/logs:/usr/local/zookeeper/logs"
    environment:
      ZOOKEEPER_MY_ID: 2
      ZOOKEEPER_SERVERS: server.1=zookeeper1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zookeeper3:2888:3888

  zookeeper3:
    image: zookeeper:3.4.14
    restart: always
    hostname: zookeeper3
    container_name: zookeeper3
    ports:
    - 32181:2181
    volumes:
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper3/data:/usr/local/zookeeper/data"
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper3/datalog:/usr/local/zookeeper/datalog"
    - "/home/docker/zookeeper-3.4.14/cluster/zookeeper3/logs:/usr/local/zookeeper/logs"
    environment:
      ZOOKEEPER_MY_ID: 3
      ZOOKEEPER_SERVERS: server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=0.0.0.0:2888:3888

networks:
  bridge:
    external:
      name: bridge

docker-compose up

宿主主機測試驗證Zookeeper集羣

bin/zkCli.sh -server 192.168.0.1:12181,192.168.0.1:22181,192.168.0.1:32181

[zk: 192.168.0.1:12181,192.168.0.1:22181,192.168.0.1:32181(CONNECTED) 0] ls /
[zookeeper]

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章