diff --git a/.gitignore b/.gitignore index 0a353997..f720e50e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ code/build *.class *.war code/logs +code/code.iml # gradle code/.gradle diff --git a/code/docker/zookeeper/Dockerfile b/code/docker/zookeeper/Dockerfile new file mode 100644 index 00000000..8c153e9c --- /dev/null +++ b/code/docker/zookeeper/Dockerfile @@ -0,0 +1,56 @@ +FROM openjdk:8-jre-alpine + +# Install required packages +RUN apk add --no-cache \ + bash \ + 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=D0BC8D8A4E90A40AFDFC43B3E22A746A68E327C1 +ARG DISTRO_NAME=zookeeper-3.4.11 + +# Download Apache Zookeeper, verify its PGP signature, untar and clean up +RUN set -ex; \ + apk add --no-cache --virtual .build-deps \ + ca-certificates \ + gnupg \ + libressl; \ + wget -q "https://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz"; \ + wget -q "https://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 / +RUN chmod +x /docker-entrypoint.sh +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["zkServer.sh", "start-foreground"] \ No newline at end of file diff --git a/code/docker/zookeeper/docker-entrypoint.sh b/code/docker/zookeeper/docker-entrypoint.sh new file mode 100644 index 00000000..7426ef6b --- /dev/null +++ b/code/docker/zookeeper/docker-entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +# Allow the container to be started with `--user` +if [[ "$1" = 'zkServer.sh' && "$(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 "$@" \ No newline at end of file diff --git a/interview/note.md b/interview/note.md index e8a549d2..86f5d5b0 100644 --- a/interview/note.md +++ b/interview/note.md @@ -78,4 +78,12 @@ Kafka | 7.31 | 7.26 | 完成理论复习,代码实践未完成 - 7.26 1. 完成kafka的复习 -2. 完成数据库的复习,B树和B+的原理 \ No newline at end of file +2. 完成数据库的复习,B树和B+的原理 + +- 7.27 + +1. 百度深研提前批一轮面试 + +- 7.30 + +1. 完成剑指Offer的题目 \ No newline at end of file