docker制作zookeeper镜像

本文详细介绍了如何使用Dockerfile构建一个包含ApacheZookeeper的镜像,包括Dockerfile中的环境配置、docker-entrypoint.sh脚本用于生成配置文件和处理用户权限,以及docker-compose.yaml文件用于单机部署Zookeeper容器。
摘要由CSDN通过智能技术生成

1、dockerfile文件

[root@localhost ~]# cat dockerfile
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=AF3D175EC05DB249738D01AC8D8C3C3ED0B02E66
ARG DISTRO_NAME=zookeeper-3.9.2
 
# 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/apache-$DISTRO_NAME-bin.tar.gz"; \
    wget -q "https://www.apache.org/dist/zookeeper/$DISTRO_NAME/apache-$DISTRO_NAME-bin.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 "apache-$DISTRO_NAME-bin.tar.gz.asc" "apache-$DISTRO_NAME-bin.tar.gz"; \
    tar -xzf "apache-$DISTRO_NAME-bin.tar.gz"; \
    mv "apache-$DISTRO_NAME-bin" "$DISTRO_NAME"; \
    mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR"; \
    chown -R "$ZOO_USER:$ZOO_USER" "$DISTRO_NAME"; \
    rm -rf "$GNUPGHOME" "apache-$DISTRO_NAME-bin.tar.gz" "apache-$DISTRO_NAME-bin.tar.gz.asc"; \
    apk del .build-deps
 
WORKDIR $DISTRO_NAME
VOLUME ["$ZOO_DATA_DIR", "$ZOO_DATA_LOG_DIR"]
 
EXPOSE $ZOO_PORT 2181 2888 3888
 
ENV PATH=$PATH:/$DISTRO_NAME/bin \
    ZOOCFGDIR=$ZOO_CONF_DIR
 
COPY docker-entrypoint.sh /
RUN chmod 777 /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["zkServer.sh", "start-foreground"]

2、docker-entrypoint.sh文件

[root@localhost ~]# cat docker-entrypoint.sh 
#!/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 "$@"

3、构建命令

docker build -t weq/zookeeper:latest -f  dockerfile .

4、docker-compose文件-单机部署

[root@localhost ~]# cat docker-compose.yaml 
version: '3.1'
services:
  zookeeper:
    image: weq/zookeeper:latest 
    container_name: zookeeper
    ports:
      - 2181:2181
    volumes:
      - /data/zookeeperDate:/data
    restart: always

5、启动命令

 docker-compose -f docker-compose.yaml up -d zookeeper

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值