『十倍程序员』Docker部署kafka+zookeeper

2,835 阅读2分钟

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」。

点赞再看,养成习惯👏👏

前言

Hello 大家好,我是l拉不拉米,今天的『十倍程序员』系列给大家分享Docker部署kafka+zookeeper的实战。

环境准备

文章使用 Window 系统 + Docker Desktop 演示,假设您有一定的docker基础。

Docker Desktop

Docker Desktop为我们学习Docker提供了一套完整的一个桌面环境,可以为软件开发提供很多便利。

Docker Desktop包含了Docker Engine, Docker CLI client, Docker Compose, Docker Machine和Kitematic。

先去 Docker官网 下载 Docker Desktop 并安装。

docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

compose命令

命令解释
docker-compose up启动所有容器
docker-compose up -d后台启动并运行所有容器
docker-compose up --no-recreate -d不重新创建已经停止的容器
docker-compose up -d test2只启动test2这个容器
docker-compose stop停止容器
docker-compose start启动容器
docker-compose down停止并销毁容器

由于安装Docker Desktop时会默认安装 docker-compose,所以我们并不需要特意去安装compose。

编写docker-compose.yml

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    volumes:
      - ./data:/data
    ports:
      - "2181:2181"
       
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_MESSAGE_MAX_BYTES: 2000000
      KAFKA_CREATE_TOPICS: "Topic1:1:3,Topic2:1:1:compact"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - ./kafka-logs:/kafka
      - /var/run/docker.sock:/var/run/docker.sock
 
  kafka-manager:
    image: sheepkiller/kafka-manager
    ports:
      - 9020:9000
    environment:
      ZK_HOSTS: zookeeper:2181

将docker-compose.yml放到任意文件目录下。

window终端执行Docker Compose命令

启动window终端,进入到docker-compose.yml 所在的文件目录

服务打包

[root@rameo kafka] # docker-compose build
zookeeper uses an image, skipping
kafka uses an image, skipping

启动服务

[root@rameo kafka]# docker-compose up -d
Starting kafka_kafka_1     ... done
Starting kafka_zookeeper_1 ... done

此时已经启动成功,我们可以通过Docker Desktop桌面工具看拉取的镜像

image.png

和启动的容器

image.png

总结

通过这个例子,我们可以非常高效的实现kafka集群+zookeeper集群的搭建,主要得以与Docker Desktop工具集成了很多docker能力和docker-compose编排处理的能力,我们不需要每一个镜像拉取、运行、配置一次,而是全都由统一的docker-compose.yml集中管理,一次运行。