重启电脑后, vEthernet (Default Switch) IPv4会变化, 此时无WSL IPv4;
启动docker后, 会动态分配WSL IPv4;
pause docker -> resume docker: WSL IPv4不会变更;
restart docker: WSL IPv4不会变更;
quit docker -> start docker: WSL IPv4不会变更;
只有当电脑重启后, 再次启动docker, 才会变更WSL IPv4
windows dos窗口命令
查看docker所有镜像: docker images
查看docker所有容器: docker ps -a
进入容器内部: docker exec -it 容器名 bash (之后可执行mysql -u或kafka客户端命令等)
退出容器内部但不停止容器: 键盘 ctrl+p+q
windows dos窗口进入容器内部, 等同于, docker页面选中container再点击terminal
容器名不可相同, 即同一镜像可以启动多个容器, 但是容器名不可相同, 且数据不共享
当停止第一次启动的容器后不删除, 第二次依然在dos窗口执行同一启动命令, 会报错, 因为该容器已存在
mysql in docker
安装运行
docker pull mysql
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
使用注意
客户端可以通过WSL IPv4:3306访问, 但不推荐, 因为WSL IPv4会变更, 变更后无法连接;
客户端还可以通过localhost:3306访问, 当WSL IPv4变更后, localhost的指向会自动变更, 无需调整连接参数就可连接;
数据保存在容器里, 非必要不删除容器. 如mysql启动命令中不含ip, 可在第一次启动后, 想关闭时直接在docker container页面stop, 后续启动直接在docker container页面run;
只要不删除上次启动的容器, 即使WSL IPv4变更, 其中数据也不会丢失
zookeeper in docker
安装运行
docker pull zookeeper
docker run -d --name zookeeper -p 2181:2181 zookeeper
使用注意
kafka in docker
安装
docker pull wurstmeister/kafka
运行
方式一: 使用localhost连接
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=localhost:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -t wurstmeister/kafka:latest
无法启动kafka容器
方式二: 使用zookeeper连接
docker run -d --name kafka --link zookeeper -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_HOST_NAME=localhost -e KAFKA_ADVERTISED_PORT=9092 -v /etc/localtime:/etc/localtime -t wurstmeister/kafka:latest
可以启动kafka容器; 进入kafka容器内部 -> ifconfig 得到 eth0 IP
但启动kafka-map(in docker)后, localhost:9092无法连接, WSL IPv4:9092无法连接, eth0 IP:9092无法连接
进入kafka容器内部, localhost:9092可以连接, WSL IPv4:9092可以连接, eth0 IP:9092可以连接
IDEA代码(in windows), localhost:9092可以连接, WSL IPv4:9092可以连接, eth0 IP:9092无法连接
offset explorer(in windows), localhost:2181可以连接, WSL IPv4:9092可以连接, eth0 IP:9092无法连接
方式三: 使用WSL IPv4连接
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=IP:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://IP:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -t wurstmeister/kafka:latest
均使用ip连接, 但重启电脑会使ip变更, 暂未找到更好的解决方案, 建议先使用方式二
注意
结论
首次启动:
如上述命令启动zk, 容器名为zookeeper (因为kafka启动命令链接zk容器名);
使用zookeeper连接启动kafka;
不使用kafka-map, 其他客户端均由 localhost:端口 连接.
后续启动:
通过重启验证 (WSL IPv4变更)
docker container页面, 直接run上次运行过的容器, localhost依然可连, 且数据不会丢失
kafka-map in docker
有问题, 见7.kafka in docker, 原因未知, 暂不使用, 转而使用offset explorer或IDEA bigdata插件