保姆级教程Docker部署Zookeeper镜像

embedded/2025/2/11 20:54:11/

目录

一、安装Docker及可视化工具

二、创建Zookeeper网络

三、镜像选择

四、单节点部署

1、创建挂载目录

2、命令运行容器

3、Compose运行容器

4、查看运行状态

5、验证是否正常运行


一、安装Docker及可视化工具

Docker及可视化工具的安装可参考:Ubuntu上安装 Docker及可视化管理工具

二、创建Zookeeper网络

Docker Network 是 Docker 引擎提供的一项核心功能,专门用于管理 Docker 容器之间以及容器与外部网络之间的通信。通过 Docker Network,用户可以灵活地定义和配置容器的网络环境,确保容器能够高效地相互通信,同时也能与外部网络无缝连接。这种网络管理机制极大地简化了容器化应用的部署和运维,尤其是在需要多容器协作的复杂场景中。

为了实现与 Zookeeper 容器的稳定通信,这里创建了一个名为 zk-net 的 Docker 网络。该网络采用桥接模式(bridge),能够为容器提供独立的网络命名空间,同时保证网络性能的高效性。所有与 Zookeeper 相关的容器都会被加入到这个网络中,从而确保它们能够直接通信,避免了因网络配置不当导致的通信问题。创建网络的命令如下:

# 查看docker网络列表
sudo docker network ls# 创建zookeeper网络
sudo docker network create -d bridge zk-net

通过这种方式,Zookeeper 及其相关服务可以在一个隔离且稳定的网络环境中运行,既保证了安全性,又提升了通信效率。 

三、镜像选择

Apache Kafka 的原始创建者是 Jay Kreps、Neha Narkhede 和 Jun Rao,他们最初在 LinkedIn 开发了 Kafka,后来将其开源并捐赠给了 Apache 软件基金会。之后,他们创立了 Confluent 公司,专注于 Kafka 的商业化支持和扩展。作为 Kafka 生态系统的核心贡献者,Confluent 提供了许多增强工具和服务,其中包括 confluentinc/cp-zookeeper 镜像。

confluentinc/cp-zookeeper 是 Confluent Platform 的一部分,专为与 confluentinc/cp-kafka 镜像协同工作而设计。它提供了与 Kafka 集群的无缝集成,确保 Zookeeper 能够高效地管理 Kafka 的元数据、Broker 注册、Leader 选举和分区分配等关键任务。对于依赖 Zookeeper 的传统 Kafka 集群来说,confluentinc/cp-zookeeper 是一个可靠的选择。

截至 Confluent Platform 7.5,ZooKeeper 已不再用于新部署。Confluent 推荐在新部署中使用 KRaft 模式。因此这里选择了 confluentinc/cp-zookeeper:7.3.10 镜像。

四、单节点部署

1、创建挂载目录

# 创建宿主机Zookeeper挂载目录
sudo mkdir -p /data/docker/zookeeper

2、命令运行容器

# 拉取镜像
sudo docker pull confluentinc/cp-zookeeper:7.3.10# 运行容器
sudo docker run --privileged=true \
--restart=always --net=zk-net \
-d --name=zookeeper \
-p 2181:2181 \
-v /data/docker/zookeeper/data:/var/lib/zookeeper/data \
-v /data/docker/zookeeper/log:/var/lib/zookeeper/log \
-e TZ=Asia/Shanghai \
-e ZOOKEEPER_CLIENT_PORT=2181 \
-e ZOOKEEPER_TICK_TIME=2000 \
confluentinc/cp-zookeeper:7.3.10

参数解析如下:

参数参数说明
docker run运行 Docker 容器
-d容器将在后台运行,而不是占用当前的终端会话
--privileged=trueDocker会赋予容器几乎与宿主机相同的权限
--net=zk-net网络模式配置,使用创建的 zk-net 网络,方便容器间通讯
--name zookeeper容器命名为 zookeeper,以便于管理和引用该容器
--restart=always设置容器重启策略,如 always、on-failure等
-p 2181:2181映射ZooKeeper客户端连接的端口号
-e ZOOKEEPER_CLIENT_PORT=2181设置ZooKeeper客户端连接的端口号
-e ZOOKEEPER_TICK_TIME=2000设置ZooKeeper服务器与客户端之间的通信心跳时间

-v /data/docker/zookeeper/data:

/var/lib/zookeeper/data

将主机目录挂载到容器内,用于数据持久化

-v /data/docker/zookeeper/log:

/var/lib/zookeeper/log

将主机目录挂载到容器内,用于日志文件持久化

容器运行参数详解参考:Docker容器运行常用参数详解-CSDN博客 

3、Compose运行容器

创建docker-compose.yml文件

sudo touch /data/docker/zookeeper/docker-compose.yml

文件内容如下:

version: '3'networks:zk-net:external: true  # 标记这个网络是外部网络services:zookeeper:image: confluentinc/cp-zookeeper:7.3.10container_name: zookeeperrestart: alwaysports:- "2181:2181"environment:- TZ=Asia/Shanghai- ZOOKEEPER_CLIENT_PORT=2181- ZOOKEEPER_TICK_TIME=2000volumes:- /data/docker/zookeeper/data:/var/lib/zookeeper/data- /data/docker/zookeeper/log:/var/lib/zookeeper/logprivileged: truenetworks: - zk-net

运行容器

#-f:调用文件,-d:开启守护进程
sudo docker compose -f /data/docker/zookeeper/docker-compose.yml up -d

4、查看运行状态

5、验证是否正常运行

首先,进入 Zookeeper 容器的 shell

docker exec -it zookeeper /bin/bash

然后,使用 Zookeeper 的命令行工具连接到 Zookeeper 服务器

zkCli.sh -server localhost:2181


http://www.ppmy.cn/embedded/161419.html

相关文章

机器学习 - 理解偏差-方差分解

为了避免过拟合,我们经常会在模型的拟合能力和复杂度之间进行权衡。拟合能力强的模型一般复杂度会比较高,容易导致过拟合。相反,如果限制模型的复杂度,降低其拟合能力,又可能会导致欠拟合。因此,如何在模型…

在spring boot 项目中远程调用时,如果使用subList()方法报错原因分析

在spring boot 项目调式中,接口一直报错,后来才发现是因为在微服务中,远程调用接口时,如果方法中包含 ArrayList.subList()方法会导致异常。 在 Spring Boot 项目中,远程调用(如通过 REST API 或 RPC&…

手机向电脑传输文件方法有哪些?

手机和电脑已经成为我们日常生活和工作中不可或缺的工具,而它们之间的文件传输需求也日益增加。为了帮助大家更高效地完成这一任务,本文将介绍三种常用的手机向电脑传输文件方法,方便您根据不同场景选择合适的方式。 方法1.数据线 当您有数…

Auto-go 环境配置

go环境配置 1.下载 Go 安装包 从 Go 官方网站(https://golang.org/dl/)下载适合你操作系统的 Go 安装包。不过由于网络原因,可能访问官方网站不太方便可以用我这里的链接Go安装包下载地址点击自动下载 2.下载ide这里使用GoLand 官方网站 …

使用 mkcert 本地部署启动了 TLS/SSL 加密通讯的 MongoDB 副本集和分片集群

MongoDB 是支持客户端与 MongoDB 服务器之间启用 TLS/SSL 进行加密通讯的, 对于 MongoDB 副本集和分片集群内部的通讯, 也可以开启 TLS/SSL 认证. 本文会使用 mkcert 创建 TLS/SSL 证书, 基于创建的证书, 介绍 MongoDB 副本集、分片集群中启动 TLS/SSL 通讯的方法. 我们将会在…

通过 SQLAlchemy 实现多表映射

在使用 SQLAlchemy 进行多表映射时,我们可以使用 ORM(对象关系映射) 的方式将多个表与 Python 类进行映射。SQLAlchemy 提供了功能强大的机制,能够轻松地将数据库表和 Python 对象之间的关系建立起来。 1、问题背景 假设我们有一…

leetcode_47全排列II

1. 题意 给一个含有重复数字的数组&#xff0c;求不重复的排列。 2. 题解 将数组进行排序&#xff0c;当回溯发生的时候&#xff0c;找到下个不重复的元素即可。 class Solution { public:void genPerm(std::vector<std::vector<int>> &ans, std::vector&l…

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java&#xff0c;Scala&#xff0c;python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…