1 .docker-compose安装
方式一:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version # 查看版本号,测试是否安装成功
你可以通过修改URL中的版本,可以自定义您的需要的版本。
方式二:
1、安装python-pip
yum -y install epel-release
yum -y install python-pip
2、安装docker-compose
pip install docker-compose
待安装完成后,执行查询版本的命令确认安装成功
docker-compose version
2.docker的安装
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r
7、安装docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version
问题:
1.因为之前已经安装过旧版本的docker,在安装的时候报错如下
Transaction check error:
file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
2.卸载旧版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
3.再次安装
$ sudo yum install docker-ce
国外镜像一般很难访问,建议配置阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
拉去还是缓慢的话:
出现这个问题原因为网络问题,无法连接到 docker hub。 但国内有 daocloud加速,docker指定该源即可
echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io\"" | sudo tee -a /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io"
镜像下载慢问题:
vi /etc/docker/daemon.json
添加一下内容:
{
"registry-mirrors": ["https://hccwwfjl.mirror.aliyuncs.com"]
}
3.docker常用命令
3.1 删除容器
删除容器:
docker rm -f +容器名称
3.2 删除镜像
Docker rmi +镜像名称
3.2 重启docker
systemctl restart docker
3.3 查看运行的容器
docker ps
3.4 查看容器
docker container ls -a
3.5 进入容器
docker exec -it kafka1 /bin/bash
3.6 停止容器
docker stop 7e2f1deea7f7
4.docker 拉取wurstmeister/kafka 、wurstmeister/zookeeper、sheepkiller/kafka-manager
docker pull wurstmeister/kafka
docker pull wurstmeister/zookeeper
docker pull sheepkiller/kafka-manager
利用docker可以很方便的在一台机子上搭建kafka集群并进行测试。为了简化配置流程,采用docker-compose进行进行搭建
新建文件docker-compose.yml(任一目录都可以),并添加内容如下:
version: '3.3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- 2181:2181
container_name: zookeeper
networks:
default:
ipv4_address: 172.19.0.11
kafka0:
image: wurstmeister/kafka
depends_on:
- zookeeper
container_name: kafka0
ports:
- 9092:9092
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka0:9092
KAFKA_LISTENERS: PLAINTEXT://kafka0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 0
volumes:
- /root/data/kafka0/data:/data
- /root/data/kafka0/gt:/kafka
- /root/data/kafka0/log:/datalog #宿主机映射容器目录
networks:
default:
ipv4_address: 172.19.0.12
kafka1:
image: wurstmeister/kafka
depends_on:
- zookeeper
container_name: kafka1
ports:
- 9093:9093
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9093
KAFKA_LISTENERS: PLAINTEXT://kafka1:9093
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 1
volumes:
- /root/data/kafka1/data:/data
- /root/data/kafka1/gt:/kafka
- /root/data/kafka1/log:/datalog
networks:
default:
ipv4_address: 172.19.0.13
kafka2:
image: wurstmeister/kafka
depends_on:
- zookeeper
container_name: kafka2
ports:
- 9094:9094
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9094
KAFKA_LISTENERS: PLAINTEXT://kafka2:9094
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 2
volumes:
- /root/data/kafka2/data:/data
- /root/data/kafka2/gt:/kafka
- /root/data/kafka2/log:/datalog
networks:
default:
ipv4_address: 172.19.0.14
kafka-manager:
image: sheepkiller/kafka-manager:latest
restart: unless-stopped
container_name: kafka-manager
hostname: kafka-manager
ports:
- "9000:9000"
links: # 连接本compose文件创建的container
- kafka0
- kafka1
- kafka2
external_links: # 连接本compose文件以外的container
- zookeeper
environment:
ZK_HOSTS: 192.168.12.172:2181 ## 修改:宿主机IP
TZ: CST-8
networks:
default:
external:
name: zookeeper_kafka
执行 docker-compose -f docker-compose.yaml up -d(docker-compose.yaml文件所在目录)
访问ip http://192.168.12.172:9000
python 控制kafka集群消费:
import sys from kafka import KafkaConsumer from kafka.structs import TopicPartition consumer = KafkaConsumer( enable_auto_commit=False, bootstrap_servers=["192.168.12.203:9092","192.168.12.203:9093","192.168.12.203:9094"]) consumer.subscribe(topics=('test-me')) if sys.getdefaultencoding() != 'utf-8': # reload(sys) sys.setdefaultencoding('utf-8') # for message in consumer: # print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition, # message.offset, message.key, # message.value.decode())) for msg in consumer: recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value) print(recv)