Docker镜像启动
Docker 网络配置
创建自己的Docker网络
–subnet 子网 e.g. 192.168.0.0
网络模式 bridge、host、none、container
–gateway 网关ip 192.168.0.1
docker network create --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet(默认为bridge模式)
网络其他命令
docker network rm mynet
docker network ls
docker容器使用自创的网络
docker run --d -name xxx --net mynet xxx
e.g. docker run -d --net mynet --name zookeeper -p 2181:2181 wurstmeister/zookeeper
Flink
docker run -d -p 8081:8081 flink:1.10.0
Kafka
docker run -d --net mynet --name zookeeper -p 2181:2181 wurstmeister/zookeeper
(注意,kafka如果设置zk的ip为localhost会连接失败,因为kafka在容器中独占一个ip,zk在容器中独占一个ip,导致kafka连不到zk,需要查看zk的ip并连接才行)
(对kafka来说,它是容器内的组件,所以连不到zk;zk也是容器内的组件,它也连不到kafka,但是本地却可以直接localhost连接kafka,为什么呢?因为kafka虽然运行在容器中,但是它对外暴露了9092端口,映射到了本地的9092,所以我本地访问9092可以访问到;其实本地访问zk也可以访问到,但是zk和kafka是访问不到的,因为它们两个不是同一个网络,—但在同一个局域网)
docker run -d --name kafka --net mynet -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_LISTENERS=PLAINTEXT://:9092 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e TZ=Asia/Shanghai -e KAFKA_LOG_DIRS=/kafka/data -v D:\kafka_data:/kafka/data -p 9092:9092 wurstmeister/kafka:2.11-1.0.2
为什么Windows无法访问Kafka
首先,我创建了192.168.0.0的net,并让所有的容器都使用了这个网络
其次,我可以使用localhost:6379访问Redis,证明不是Docker的问题,而是Kafka的配置问题
那么,重点就放在listeners和advertised.listeners上了
在内网环境的Kafka集群不需要advertised.listeners,advertised.listeners用于Kafka对外暴露服务用的
Docker的网络通信
都通过Docker路由进行和宿主机交互的
Redis
docker run --name redis -d ^
–restart unless-stopped ^
-e TZ=Asia/Shanghai ^
-p 6379:6379 ^
-v D:\Develop\Docker\Data\redis\redis.conf:/etc/redis/redis.conf ^
-v D:\Develop\Docker\Data\redis\data:/data ^
redis:5.0.12 ^
redis-server /etc/redis/redis.conf ^
–requirepass 123456 ^
-net mynet ^
–appendonly yes