首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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等,详细说明请看每个命令的注释部分:

代码语言:javascript
复制
# 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所在目录,执行如下命令:

代码语言:javascript
复制
docker build -t bolingcavalry/ssh-kafka292081-zk346:0.0.1 .

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

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

代码语言:javascript
复制
docker push bolingcavalry/ssh-kafka292081-zk346:0.0.1

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

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

举报
领券