docker in windows11

  1. 重启电脑后, 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

  1. windows dos窗口命令

查看docker所有镜像: docker images

查看docker所有容器: docker ps -a

进入容器内部: docker exec -it 容器名 bash (之后可执行mysql -u或kafka客户端命令等)

退出容器内部但不停止容器: 键盘 ctrl+p+q

  1. windows dos窗口进入容器内部, 等同于, docker页面选中container再点击terminal

  1. 容器名不可相同, 即同一镜像可以启动多个容器, 但是容器名不可相同, 且数据不共享

当停止第一次启动的容器后不删除, 第二次依然在dos窗口执行同一启动命令, 会报错, 因为该容器已存在

  1. mysql in docker

  1. 安装运行

docker pull mysql
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
  1. 使用注意

客户端可以通过WSL IPv4:3306访问, 但不推荐, 因为WSL IPv4会变更, 变更后无法连接;

客户端还可以通过localhost:3306访问, 当WSL IPv4变更后, localhost的指向会自动变更, 无需调整连接参数就可连接;

数据保存在容器里, 非必要不删除容器. 如mysql启动命令中不含ip, 可在第一次启动后, 想关闭时直接在docker container页面stop, 后续启动直接在docker container页面run;

只要不删除上次启动的容器, 即使WSL IPv4变更, 其中数据也不会丢失

  1. zookeeper in docker

  1. 安装运行

docker pull zookeeper
docker run -d --name zookeeper -p 2181:2181 zookeeper
  1. 使用注意

  1. kafka in docker

  1. 安装

docker pull wurstmeister/kafka
  1. 运行

  1. 方式一: 使用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容器

  1. 方式二: 使用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无法连接

  1. 方式三: 使用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变更, 暂未找到更好的解决方案, 建议先使用方式二

  1. 注意

  1. 结论

首次启动:

如上述命令启动zk, 容器名为zookeeper (因为kafka启动命令链接zk容器名);

使用zookeeper连接启动kafka;

不使用kafka-map, 其他客户端均由 localhost:端口 连接.

后续启动:

通过重启验证 (WSL IPv4变更)

docker container页面, 直接run上次运行过的容器, localhost依然可连, 且数据不会丢失

  1. kafka-map in docker

有问题, 见7.kafka in docker, 原因未知, 暂不使用, 转而使用offset explorer或IDEA bigdata插件


版权声明:本文为m0_65248736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。