Docker下kafka学习,三部曲之二:本地环境搭建

在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写这些脚本,搭建本地kafka环境;

本次实践会制作docker镜像,所用的材料请在此获取:git@github.com:zq2599/docker_kafka.git

整个环境涉及到多个容器,我们先把它们全部列出来,再梳理一下之间的关系,如下图:

kafka sever提供消息服务; message producer的作用是产生执行主题的消息; message consumer的作用是订阅指定主题的消息并消费掉。

zookeeper

zookeeper使用单机版,没什么需要定制的,因此直接使用官方镜像即可,daocloud.io/library/zookeeper:3.3.6

kafka sever

去hub.docker.com上搜索kafka,没看到官方标志的镜像,还是自己做一个吧,写Dockerfile之前先准备两个材料:kafka安装包和启动kafka的shell脚本;

kafka安装包用的是2.9.2-0.8.1版本,在 git@github.com:zq2599/docker_kafka.git中,请clone获取;

启动kafka server的shell脚本内容如下,很简单,在kafka的bin目录下执行脚本启动server即可:

#!/bin/bash
$WORK_PATH/$KAFKA_PACKAGE_NAME/bin/kafka-server-start.sh $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties

接下来可以编写Dockerfile了,如下:

# Docker image of kafka
# VERSION 0.0.1
# Author: bolingcavalry

#基础镜像使用tomcat,这样可以免于设置java环境
FROM daocloud.io/library/tomcat:7.0.77-jre8

#作者
MAINTAINER BolingCavalry <zq2599@gmail.com>

#定义工作目录
ENV WORK_PATH /usr/local/work

#定义kafka文件夹名称
ENV KAFKA_PACKAGE_NAME kafka_2.9.2-0.8.1

#创建工作目录
RUN mkdir -p $WORK_PATH

#把启动server的shell复制到工作目录
COPY ./start_server.sh $WORK_PATH/

#把kafka压缩文件复制到工作目录
COPY ./$KAFKA_PACKAGE_NAME.tgz $WORK_PATH/

#解压缩
RUN tar -xvf $WORK_PATH/$KAFKA_PACKAGE_NAME.tgz -C $WORK_PATH/

#删除压缩文件
RUN rm $WORK_PATH/$KAFKA_PACKAGE_NAME.tgz

#执行sed命令修改文件,将连接zk的ip改为link参数对应的zookeeper容器的别名
RUN sed -i 's/zookeeper.connect=localhost:2181/zookeeper.connect=zkhost:2181/g' $WORK_PATH/$KAFKA_PACKAGE_NAME/config/server.properties

#给shell赋予执行权限
RUN chmod a+x $WORK_PATH/start_server.sh

如脚本所示,操作并不复杂,复制解压kafka安装包,启动shell脚本,再把配置文件中zookeeper的ip改成link时zookeeper的别名;

Dockerfile编写完成后,和kafka_2.9.2-0.8.1.tgz以及start_server.sh放在同一个目录下,用控制台在此目录下执行:

docker build -t bolingcavalry/kafka:0.0.1 .

镜像构建成功后,新建一个目录编写docker-compose.yml脚本,如下:

version: '2'
services:
  zk_server: 
    image: daocloud.io/library/zookeeper:3.3.6
    restart: always
  kafka_server: 
    image: bolingcavalry/kafka:0.0.1
    links: 
      - zk_server:zkhost
    command: /bin/sh -c '/usr/local/work/start_server.sh'
    restart: always
  message_producer: 
    image: bolingcavalry/kafka:0.0.1
    links: 
      - zk_server:zkhost
      - kafka_server:kafkahost
    restart: always
  message_consumer: 
    image: bolingcavalry/kafka:0.0.1
    links: 
      - zk_server:zkhost
    restart: always

docker-compose.yml中配置了四个容器: 1. zookeeper是官方的; 2. 其他三个都是用刚刚制作的bolingcavalry/kafka做镜像生成的; 3. kafka_server在启动时执行了start_server.sh脚本把服务启动起来了; 4. message_producer和message_consumer都仅仅是将kafka环境安装好了,以便于通过命令行发送或者订阅消息,但是这两个容器本身并未启动server; 5. kafka_server,message_producer,message_consumer都通过link参数连接到了zookeeper容器,并且message_producer还连接到了kafka server,因为发送消息的时候会用到kafka server的ip地址;

现在打开终端,在docker-compose.yml所在目录下执行docker-compose up -d,即可启动所有容器;

至此,本地环境搭建已经成功了,我们可以通过命令行体验kafka的消息发布订阅服务,具体的命令可以参考上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》

以上就是本地搭建kafka的全过程,下一章我们开发java应用来体验kafka的消息发布订阅服务。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

KVM部署篇

5274
来自专栏眯眯眼猫头鹰的小树杈

猫头鹰的深夜翻译:持久化容器存储

临时性存储是容器的一个很大的买点。“根据一个镜像启动容器,随意变更,然后停止变更重启一个容器。你看,一个全新的文件系统又诞生了。”

1295
来自专栏实战docker

Docker下的Kafka学习之一:制作集群用的镜像文件

尽管之前写过《Docker下kafka学习,三部曲》系列,但是单机版的入门练习并不满足实际工作的需要,从本章起,我们一起来研究和探索Kafka这个优秀的异步消息...

3249
来自专栏云计算教程系列

如何在CentOS 7上使用Docker安装Prometheus

Prometheus是一个开源监控系统和时间序列数据库。它涉及监控的许多方面,例如度量标准的生成和收集,在仪表板上绘制结果数据以及针对异常情况发出警报。为实现这...

4090
来自专栏A周立SpringCloud

Docker系列教程15-Docker容器网络

本文是篇翻译。原文:https://docs.docker.com/engine/userguide/networking/ 本节概述了Docker默认的网络行...

3847
来自专栏云原生架构实践

Docker Data Center系列(一)- 快速搭建云原生架构的实践环境

DDC是Docker Data Center的简称,是Docker公司推出的容器化数据中心管理平台。它的编排核心是swarm,包含2个主要组件UCP和DTR。

1476

使用Helm将应用程序部署到IBM Cloud上的Kubernetes

Helm是Kubernetes的包管理器。借助Helm,您可以非常方便地将应用程序,工具和数据库(如MongoDB,PostgreSQL,WordPress和A...

2529
来自专栏小狼的世界

谈一下Docker与Kubernetes集群的日志和日志管理

日志对于我们管理Kubernetes集群及其上的应用具有非常重要的作用,特别是在出现故障或者Bug的时候。如果你能回答下面几个问题,那么可以不用再看本文了,如果...

1611
来自专栏Kirito的技术分享

Docker Network—Bridge 模式

又开一个新坑,Docker 系列打算记录一下个人学习 Docker,使用 Docker 应用于项目实践中的一些感悟,可能不会像之前的文章成一个体系,一方面自己对...

3616
来自专栏云计算教程系列

如何为Ubuntu 16.04设置Ghost一键式应用程序

使用腾讯云的一键式Ghost应用程序,您可以预先安装带有Ghost的腾讯CVM。有一些命令行可以完成安装,然后您就可以使用一个简单而强大的安全博客工具,让您可以...

1385

扫码关注云+社区