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 条评论
登录 后参与评论

相关文章

来自专栏田飞雨的专栏

Docker 使用指南 (四)—— 数据卷的使用

有时候需要使用数据库,但是又希望它的数据能保存在本地,Docker中提供了数据卷可以供你方便的操作数据。数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 U...

4K00
来自专栏田飞雨的专栏

Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

Docker 部署 Django 应用可以通过两种方式来完成:迭代构建和容器互联。以下记录使用容器互联的方式搭建 Django 容器栈的过程。

5.7K20
来自专栏姚俊刚的专栏

在腾讯云服务器上体验 Docker

在腾讯云的 ubuntu 服务器上安装和运行 Docker,Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题。

7.9K20
来自专栏田飞雨的专栏

Docker 使用指南 (一)—— 基本操作

Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便...

9.9K30
来自专栏田飞雨的专栏

Docker 使用指南 (二):搭建本地仓库

去中央仓库下载镜像有时候非常的慢,所以 docker 本地仓库和 gitlab 类似,都是为了便于公司内部人员的使用。

5.7K00
来自专栏屈政斌的专栏

【腾讯云的1001种玩法】Docker 部署dotnetcore

大家一起来学习docker, dotnetcore。Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本...

94200
来自专栏田飞雨的专栏

Docker 使用指南 (三)—— 网络配置

本文详细介绍了Docker网络配置的四个模式,以及模式下的具体配置操作。希望对入门,Docker的童鞋有所帮助。

4.6K00
来自专栏云计算教程系列

5 种 Docker 日志最佳实践

微服务和容器很好地结合了,但是它们的结合让日志记录也变成了一个难题。作者在本文描述了一些因素,在设置监控的时候是需要考虑的。

98900
来自专栏QQ会员技术团队的专栏

大规模排行榜系统实践及挑战

在过去的一年中,排行榜系统从无到有,接入的业务从单一的QQ会员到企鹅电竞动漫等20几个各类业务,接入的排行榜数实现了从几个到数万的突破,单个排行榜用户数最大90...

3.8K10
来自专栏田飞雨的专栏

Docker 使用指南 (五)—— Dockerfile 详解

制作Docker image 有两种方式:一是使用 Docker container,直接构建容器,再导出成 image 使用;二是使用 Dockerfile,...

5.3K10

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励