安装docker
yum install -y docker
启动docker
systemctl start docker
拉取镜像
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
查看镜像
docker images
启动zookeeper容器
docker run -d --name zookeeper --publish 2181:2181 --volume /etc/localtime:/etc/localtime wurstmeister/zookeeper
启动kafka容器
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=宿主机的ip --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka
进入kafka容器
docker exec -it kafka bash
创建一个kafka topic test1
kafka-topics.sh --create --zookeeper 宿主机ip:2181 --replication-factor 1 --partitions 1 --topic test01
创建一个kafka生产者
kafka-console-producer.sh --broker-list localhost:9092 --topic test01
创建一个kafka消费者
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test01 --from-beginning
设置开机自启
docker update zookeeper --restart=always
docker update kafka --restart=always
php使用kafka
拉取php7.4
docker pull php:7.4-fpm
开启php容器
docker run -p 9000:9000 -d --name php -v /www/docker:/www/docker --privileged=true php:7.4-fpm
解释:
-p 9000:9000 :将容器的9000端口映射到主机的9000端口
-d 后台运行(守护进程)
--name php:将容器命名为php
-v 将主机中当前目录下的www挂载到容器的www目录
安装librdkafka
先退出,exit,然后在宿主机
cd /www/docker && git clone https://github.com/edenhill/librdkafka.git
下载完后,进入php容器
docker exec -it php bash
cd /www/docker/librdkafka && ./configure
make && make install
安装php-rdkafka
pecl install rdkafka
开启扩展
docker-php-ext-enable rdkafka
php.ini配置文件写入
extension=rdkafka.so
php.ini 文件位置:
/usr/local/etc/php/
docker里没有vi命令,先拷贝到宿主机修改,然后再拷贝回去
#宿主机创建目录
mkdir /www/docker/php
#拷贝到宿主机
docker cp php:/usr/local/etc/php/php.ini-development /www/docker/php
docker cp php:/usr/local/etc/php/php.ini-production /www/docker/php
#添加 extension=rdkafka.so 到php.ini文件
echo 'extension=rdkafka.so'>>/www/docker/php/php.ini-development
echo 'extension=rdkafka.so'>>/www/docker/php/php.ini-production
#从宿主机拷贝回容器里
docker cp /www/docker/php/php.ini-development php:/usr/local/etc/php/
docker cp /www/docker/php/php.ini-production php:/usr/local/etc/php/
命令解释:
重启php
docker restart php
查看是否加载成功
php -m
php 使用kafka
宿主机、/www/docker 下运行
composer require nmred/kafka-php
增加producer.php 生产者,consumer.php消费者
producer.php代码:
<?php
require './vendor/autoload.php';
date_default_timezone_set('PRC');
$config = \Kafka\ProducerConfig::getInstance();
$config->setMetadataRefreshIntervalMs(10000);
$config->setMetadataBrokerList('localhost:9092');
$config->setBrokerVersion('1.0.0');
$config->setRequiredAck(1);
$config->setIsAsyn(false);
$config->setProduceInterval(500);
$producer = new \Kafka\Producer();
for($i = 0; $i < 1; $i++) {
$result = $producer->send([
[
'topic' => 'topicA',
'value' => 'topicA下面的第一条消息-消息1'.time(),
'key' => '',
],
]);
var_dump($result);
}
consumer.php 代码:
<?php
require './vendor/autoload.php';
date_default_timezone_set('PRC');
$config = \Kafka\ConsumerConfig::getInstance();
$config->setMetadataRefreshIntervalMs(10000);
$config->setMetadataBrokerList('localhost:9092');
$config->setGroupId('test');
$config->setBrokerVersion('1.0.0');
$config->setTopics(array('topicA'));
//$config->setOffsetReset('earliest');
$consumer = new \Kafka\Consumer();
$consumer->start(function ($topic, $part, $message) {
var_dump($message);
});
先进入到容器,然后运行php文件
#进入容器
docker exex -it php bash
#运行生产者
php /www/dockerproducer.php
#运行消费者
php /www/dockerconsumer.php
参考链接:
https://blog.csdn.net/ertty34/article/details/122236022
https://www.jianshu.com/p/3e1d2aeaffd8
https://blog.csdn.net/qq_26683009/article/details/109289161
php安装mysql扩展,进入容器,安装扩展
docker-php-ext-install pdo pdo_mysql
【docker】php容器安装pdo_mysql扩展_drnrrwfs的博客-CSDN博客_docker php 安装pdo