ubuntu1804搭建docker版kafka2.6.0

首先docker搭建kafka环境是需要有zookeeper的, 所以这里需要先搭建zookeeper环境

通过dockerfile创建zookeeper

创建一个文件夹, 里面创建出kafka子文件夹和zookeeper子文件夹, 然后在zookeeper文件夹中创建一个Dockerfile文件, 文件内容如下

FROM wurstmeister/zookeeper:3.4.6

MAINTAINER wirte the zookeeper docker file

在通过dockerfile生成zookeeper之前, 需要修改一下docker的镜像加载位置, 否则的话镜像拉取速度会很慢.

访问阿里云网站, 通过支付宝登录即可
https://cr.console.aliyun.com

ubuntu1804搭建docker版kafka2.6.0
找到镜像加速器 选择Ubuntu系统, 此时就会生成出一个对应的加速地址
ubuntu1804搭建docker版kafka2.6.0
将地址复制, 在ubuntu中编辑daemon.json文件, 位置在`/etc/docker/daemon.json
如果文件不存在, 就手动创建一下, 注意名称不要出现错误
文件内容将刚才的地址填入, 格式如下

{
	"registry-mirrors": ["https://youraddr.mirror.aliyuncs.com"]
}

然后保存退出
重新加载daemon配置文件, 然后重启docker

systemctl  daemon-reload 
systemctl  restart docker 

此时docker拉取镜像的速度就会提升

通过dockerfile文件拉取zookeeper镜像

cd zookeeper
docker build -t zookeeper:3.4.6 Dockerfile .

等待镜像拉取完毕
查看镜像文件

docker images

启动zookeeper

docker run -d --name zookeeper -p 2181:2181 -t zookeeper:3.4.6

查看docker容器

docker ps -a

进入kafka文件夹, 编辑kafka的Dockerfile文件

	FROM wurstmeister/kafka:2.13-2.6.0

	MAINTAINER wirte the kafka docker file

	ENV KAFKA_VERSION "2.13-2.6.0"

	RUN mkdir -p /data/kafka/logs && mkdir -p /data/zookeeper/logs && mkdir -p /data/zookeeper/data

	RUN sed -i '/^dataDir=/c dataDir=/data/zookeeper/data' /opt/kafka_$KAFKA_VERSION/config/zookeeper.properties

	RUN sed -i '/^dataDir/a dataLogDir=/data/zookeeper/logs' /opt/kafka_$KAFKA_VERSION/config/zookeeper.properties

后面的三条RUN命令, 是配置镜像的内容
第一个是创建logs目录和data目录
第二个是将数据存储目录设置到指定文件夹
第三个是将日志存储目录设置到指定文件夹
以便后期启动时, 将数据和日志映射到ubuntu主机上, docker容器重启时不会丢失数据

执行dockerfile文件

docker build -t kafka:2.6.0 Dockerfile .

启动kafka

sudo rm -rf /data/kafka/logs/meta.properties && docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=192.168.1.79 --env KAFKA_ADVERTISED_PORT=9092 --env KAFKA_LOG_DIRS=/data/kafka/logs --volume /etc/localtime:/etc/localtime --volume /data/kafka:/data/kafka --volume /data/zookeeper:/data/zookeeper kafka:2.6.0

这里没用代码块显示, 是为了看得更直观
最后解释一下命令开头的那个删除文件的作用
-d 参数是让docker在后台运行
– name参数是也容器起个名
–publish 是将docker中的端口号与ubuntu主机端口做一个映射
–env参数是启动时的配置文件, 修改后的内容在kafka容器中的server.properties文件中可以看到
–volume是docker容器映射镜像文件夹和主机文件夹的命令

因为zookeepr也是通过容器启动的, 所以每次启动时他的id都是不一样的, 而kafka启动会去连接zookeeper, kafka有一个配置文件, 在里面记录着zookeeper的id, 但是每次zookeeper重启, id会变化, 所以这个记录zookeeper id的文件, 需要在kafka启动之前删除, 让kafka去重新寻找zookeeper进行连接, 这就是命令开头位置的 删除meta.properites文件的作用

启动之后可以进入kafka容器中进行查看

首先通过命令获取kafka容器id

docker ps -a

查看结果如下

anx@ubuntu-server:~$ docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS        PORTS                                                NAMES
d8821e8c1ed7   postgres:alpine   "docker-entrypoint.s…"   46 hours ago   Up 46 hours   0.0.0.0:5432->5432/tcp                               mypostgres
1998ec9ef5d5   kafka:2.6.0       "start-kafka.sh"         46 hours ago   Up 46 hours   0.0.0.0:9092->9092/tcp                               kafka
b2c5218c06a0   zookeeper:3.4.6   "/bin/sh -c '/usr/sb…"   46 hours ago   Up 46 hours   22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   zookeeper

其中CONTAINER ID字段的值就是容器id

docker exec -it 1998ec9ef5d5 /bin/bash

进入之后通过kafka的一些命令就可以操作kafka, 例如通过控制台向kafka发送消息, 或者在控制台监听kafka某个topic的消息内容, 显示出来等等

上一篇:Ubuntu1804下安装gdb与使用


下一篇:ubuntu1804时间相差8小时