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

来源:互联网 发布:三国志10武将资料数据 编辑:程序博客网 时间:2024/05/22 15:21

尽管之前写过《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,密码是passwordFROM 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目录加入PATHENV 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 invalidRUN 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集群环境;

原创粉丝点击