一、简写安装 Docker及docker-compose
1. 安装Docker
# 安装依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加docker下载仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker-ce
sudo yum install docker-ce
# 启动docker-ce
sudo systemctl start docker
# 验证
sudo docker --version
sudo docker run hello-world
2. 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
用两句话简单介绍下docker-compose:
- docker-compose 是用来做docker 的多容器控制,是一个用来把 docker 自动化的东西。
- 有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。
注意事项:
- docker-compose与CentOS7系统版本冲突问题
二、通过docker-compose部署kafka
1. 下载镜像
docker pull confluentinc/cp-zookeeper
docker pull confluentinc/cp-kafka
2. docker-compose.yml脚本
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper
ports:
- "9092:9092"
container_name: zookeeper
mem_limit: 1024M
environment:
ZOOKEEPER_CLIENT_PORT: 2181
kafka:
image: confluentinc/cp-kafka
container_name: kafka
mem_limit: 1024M
depends_on:
- zookeeper
environment:
KAFKA_BROKER_NO: 1
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_HEAP_OPTS: "-Xmx512M -Xms16M"
重点(外网访问两种方式):
1.在上述的docker-compose.yml中加入如下:
ports:
- "9092:9092"
这里有一个坑需要注意的是:
如果宿主机上有防火墙,需要增加一条规则,允许docker网络访问宿主机的端口,否则会连接失败。如下:
# 取得行号
iptables -L INPUT --line-num
# xx为最后一行DROP的行号,插到它前面
iptables -I INPUT xx -p tcp -m tcp -s 172.17.0.0/16 --dport 9092 -j ACCEPT
2.进入安装目录:
cd /docker/kafka_2.11-1.1.0/config
vi server.properties
advertised.listeners=PLAINTEXT://ip:9092
3. 在docker-compose.yml脚本存放路径下执行命令:
1.后台运行 一 > 执行docker-compose up -d 一般推荐生产环境下使用该选项。
2.前台运行 一 > 执行docker-compose up 控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
3.其他docker-compose命令可参考:友情连接(Docker-compose命令)
三、测试发送消息
打开两个新的终端窗口,执行Docker ps,找到kafka的Container ID,进入容器内部:
docker exec -it ${CONTAINER ID} /bin/bash
在其中一个窗口里创建topic并运行producer:
kafka-topics --zookeeper zookeeper:2181 --create --replication-factor 1 --partitions 1 --topic my-kafka
kafka-console-producer --broker-list localhost:9092 --topic my-kafka
在另一个窗口里运行consumer:
kafka-console-consumer --bootstrap-server localhost:9092 --topic my-kafka --from-beginning
现在,在producer里输入任何内容,都会在consumer里收到。