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

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

从镜像制作开始

本章我们一起把kafka集群用到的镜像文件做出来,后续的实践都用这个镜像来进行;

功能梳理

这个镜像能提供哪些功能呢? 1. 可以ssh登录,这是为了后续操作方便; 2. jdk 1.8.0_144版本,因为zookeeper需要运行在jvm; 3. zookeeper-3.4.6; 4. kafka_2.9.2-0.8.1; 5. 把kafka_2.9.2-0.8.1/bin 加入到PATH中,这是为了后续执行kafka-topics.sh、kafka-console-producer.sh等命令时方便;

构造Dockerfile前准备的材料

本次构造Dockerfile所需的所有材料我已经上传到github上了,地址是:git@github.com:zq2599/kafka_2.9.2-0.8.1-zookeeper-3.4.6.git,如下图:

这里简单介绍一下这些材料: 1. jdk安装文件:linux版的jdk1.8文件超过了一百兆,超过了github单个文件50兆的限制,所以在linux或者mac上执行split -b 50m jdk-8u144-linux-x64.rpm jdkrpm-命令可以将此文件分割成小文件,如下图:

如果您手里只有windows,可以在docker上启动一个linux容器,启动的时候用-v创建文件映射,这样就能在这个linux容器里面分割并同步到windows上了; 2. zookeeper-3.4.6,为了用了起来方便,我将压缩包解压开了,并且在conf目录下创建了zoo.cfg文件,里面的内容和zoo_sample.cfg内容一样,然后改了dataDir的配置,如下图红框所示:

3. kafka_2.9.2-0.8.1.tgz,官方下载的;

Dockerfile文件内容

Dockerfile的内容如下所示,执行的是设置环境变量、安装jdk、复制zookeeper,复制解压kafka等,详细说明请看每个命令的注释部分:

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

#基础镜像使用kinogmt/centos-ssh:6.7,这里面已经装好了ssh,密码是password
FROM kinogmt/centos-ssh:6.7

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

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

#定义日志目录
ENV LOG_PATH /usr/local/work/log

#定义zookeeper的Data目录
ENV ZK_DATA_PATH $WORK_PATH/zkdata

#定义zookeeper文件夹名称
ENV ZK_PACKAGE_NAME zookeeper-3.4.6

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

#将kafka的bin目录加入PATH
ENV PATH $WORK_PATH/$KAFKA_PACKAGE_NAME/bin:$PATH

#定义jdk1.8的文件夹
ENV JDK_PACKAGE_FILE jdk1.8.0_144

#定义jdk1.8的文件名
ENV JDK_RPM_FILE jdk-8u144-linux-x64.rpm

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

#创建日志目录
RUN mkdir -p $LOG_PATH

#创建zookeeper的Data目录
RUN mkdir -p $ZK_DATA_PATH

#把分割过的jdk1.8安装文件复制到工作目录
COPY ./jdkrpm-* $WORK_PATH/

#用本地分割过的文件恢复原有的jdk1.8的安装文件
RUN cat $WORK_PATH/jdkrpm-* > $WORK_PATH/$JDK_RPM_FILE

#本地安装jdk1.8,如果不加后面的yum clean all,就会报错:Rpmdb checksum is invalid
RUN yum -y localinstall $WORK_PATH/$JDK_RPM_FILE; yum clean all

#删除jdk分割文件
RUN rm $WORK_PATH/jdkrpm-*

#删除jdk安装包文件
RUN rm $WORK_PATH/$JDK_RPM_FILE

#把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

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

构建镜像

将之前准备好的材料和Dockerfile文件放在同一个目录下,如下图:

打开命令行,进入Dockerfile所在目录,执行如下命令:

docker build -t bolingcavalry/ssh-kafka292081-zk346:0.0.1 .

ssh-kafka292081-zk346是我给这个镜像起的名字,您可以按照自己想要修改,稍后执行完毕,输入docker images命令就能看见最新构建的镜像文件了,如下图:

在hub.docker.com上注册过的读者还可以执行以下命令将镜像push到hub.docker.com上去,这样其他用户也可以用到您制作的镜像了:

docker push bolingcavalry/ssh-kafka292081-zk346:0.0.1

注意,如果要push到hub.docker.com上去,镜像的名称必须是您的账号开头加”/”,例如这里的”bolingcavalry/ssh-kafka292081-zk346”,其中bolingcavalry就是我在hub.docker.com上的账号;

至此,kafka集群所需的镜像文件已经制作完毕,接下来的章节,我们会实践在Docker下搭建kafka集群环境;

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算

如何使用Docker部署微服务

微服务是用于构建大规模应用程序的越来越流行的体系结构。应用程序不是使用单一的单一代码库,而是分解为一组称为微服务的较小组件。这种方法提供了多种好处,包括扩展单个...

932
来自专栏Keegan小钢

App项目实战之路(五):服务端篇

近一个月因为忙于其他事情,一直没能抽出时间来更新项目进度。现在,只能趁着国庆期间,赶紧抽空更新下进度。这次,我想简单谈谈服务端的一些东西。

1066
来自专栏沃趣科技

ASM 翻译系列第三十一弹:了解ASM文件的空间分配

原作者:Bane Radulovic 译者: 邱大龙 审核: 魏兴华 DBGeeK社区联合出品 How many allocation units ...

3297

了解微服务,第6部分:健康检查

随着我们的微服务和它们运营的环境变得越来越复杂,让我们的服务为Docker Swarm提供一种安全检查机制也变得日益重要。因此,我们将在博客系列的第六部分中介绍...

3623
来自专栏沃趣科技

ASM 翻译系列第三十八弹:ASM数据清理

原作者:Bane Radulovic 译者: 魏兴华 审核: 魏兴华 DBGeeK社区联合出品 原文链接:http://asmsupportguy....

26610
来自专栏Spark学习技巧

SparkStreaming如何解决小文件问题

4062
来自专栏雨过天晴

原 荐 MAC 读写NTFS硬盘

1393
来自专栏向治洪

android打包方法超过65k错误

近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持。 如果...

1665
来自专栏雨过天晴

原 在已安装Apache和MySQL的Ub

1213
来自专栏bboysoul

使用本地的docker客户端连接远程docker的守护进程

在这之前我们要知道docker是一个c/s架构的程序,也就是说我们输入的docker命令实际上是客户端用来发送指令给docker的守护进程的,所有的操作都是do...

622

扫码关注云+社区