在上一章《 Docker下kafka學習,三部曲之一:極速體驗kafka》中咱們快速體驗了kafka的消息分發和訂閱功能,可是對環境搭建的印象僅僅是執行了幾個命令和腳本,本章咱們經過實戰來學習如何編寫這些腳本,搭建本地kafka環境;java
本次實踐會製做docker鏡像,所用的材料請在此獲取:https://github.com/zq2599/docker_kafkagit
整個環境涉及到多個容器,咱們先把它們所有列出來,再梳理一下之間的關係,以下圖:程序員
kafka sever提供消息服務;github
message producer的做用是產生執行主題的消息;docker
message consumer的做用是訂閱指定主題的消息並消費掉。shell
zookeeper使用單機版,沒什麼須要定製的,所以直接使用官方鏡像便可,daocloud.io/library/zookeeper:3.3.6tomcat
去hub.docker.com上搜索kafka,沒看到官方標誌的鏡像,仍是本身作一個吧,寫Dockerfile以前先準備兩個材料:kafka安裝包和啓動kafka的shell腳本;bash
kafka安裝包用的是2.9.2-0.8.1版本,在git@github.com:zq2599/docker_kafka.git中,請clone獲取;學習
啓動kafka server的shell腳本內容以下,很簡單,在kafka的bin目錄下執行腳本啓動server便可:ui
#!/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編寫完成後,和kafka2.9.2-0.8.1.tgz以及startserver.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中配置了四個容器:
如今打開終端,在docker-compose.yml所在目錄下執行docker-compose up -d,便可啓動全部容器;
至此,本地環境搭建已經成功了,咱們能夠經過命令行體驗kafka的消息發佈訂閱服務,具體的命令能夠參考上一章《 Docker下kafka學習,三部曲之一:極速體驗kafka》。
以上就是本地搭建kafka的全過程,下一章咱們開發java應用來體驗kafka的消息發佈訂閱服務。