docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v $PWD/data:/data --name zookeeper --restart always zookeeper
  • 命令详细说明:
  • -e TZ="Asia/Shanghai" # 指定上海时区 
    -d # 表示在一直在后台运行容器
    -p 2181:2181 # 对端口进行映射,将本地2181端口映射到容器内部的2181端口
    --name # 设置创建的容器名称
    -v # 将本地目录(文件)挂载到容器指定目录;
    --restart always #始终重新启动zookeeper
  • 查看容器启动情况:
  • docker ps -a

    注:状态(STATUS)为Up,说明容器已经启动成功。

    五、 测试

    使用zk命令行客户端连接zk

    docker run -it --rm --link zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper

    说明: -server zookeeper 是启动 zkCli.sh 的参数

    一、安装docker-compose

    curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    二、配置docker-compose

    编写配置文件,并将其命名为: docker-compose.yml docker-compose 默认配置文件名)
    配置文件内容:

    version: '2'
    services:
        zoo1:
            image: zookeeper
            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
            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
            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

    此配置文件表示,Docker需要启动三个zookeeper实例,并将2181,2182,2183三个端口号映射到容器内的2181这个端口上。
    ZOO_MY_ID :表示zk服务的ID, 取值为1-255之间的整数,且必须唯一
    ZOO_SERVERS :表示zk集群的主机列表

    三、启动zookeeper集群

    docker-compose up -d

    该命令执行需要在 docker-compose 配置文件的目录下执行,结果如下:

    [root@izbp13xko46hud9vfr5s94z conf]# docker-compose up -d 
    Starting zoo1 ... done
    Starting zoo2 ... done
    Starting zoo3 ... done
    [root@izbp13xko46hud9vfr5s94z conf]# 

    四、查看zookeeper集群实例

  • 通过 docker ps 查看
  • [root@izbp13xko46hud9vfr5s94z ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e53b4c838001 zookeeper "/docker-entrypoint.…" 4 minutes ago Up 44 seconds 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp zoo1
    19282fb6f9b4 zookeeper "/docker-entrypoint.…" 4 minutes ago Up 44 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2182->2181/tcp zoo2
    099b926fa2d3 zookeeper "/docker-entrypoint.…" 4 minutes ago Up 44 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2183->2181/tcp zoo3

  • 通过 docker-compose ps 查看
  • [root@izbp13xko46hud9vfr5s94z conf]# docker-compose ps 
    Name              Command               State                     Ports                   
    ------------------------------------------------------------------------------------------
    zoo1   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp
    zoo2   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcp, 2888/tcp, 3888/tcp
    zoo3   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2183->2181/tcp, 2888/tcp, 3888/tcp
    [root@izbp13xko46hud9vfr5s94z conf]# 

    注:这个命令需要在 docker-compose 配置文件下执行。

    五、管理docker-compose服务

    # 停止docker-compose服务
    docker-compose stop

    # 启动docker-compose服务
    docker-compose start
    # 重启docker-compose服务
    docker-compose restart

    六、查看zookeeper集群节点主从关系

    使用 docker exec -it zoo1 /bin/bash 这个命令进入 zoo1 节点中,之后输入 ./bin/zkServer.sh statu 来查看节点主从关系

    [root@izbp13xko46hud9vfr5s94z conf]# docker exec -it zoo1 /bin/bash 
    bash-4.4# ./bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Mode: follower
    bash-4.4#