Docker 设置 - 多个容器之间的网络
Docker Setup - Networking between multiple containers
在我的 linux 服务器上,我有 运行 3 张图像 -
A) Docker 和 Zookeeper 使用此 docker-compose 文件 -
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.11-2.0.0
ports:
- "9092:9092"
expose:
- "9093"
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
这将为主机打开 kafka 代理。
B) JupyterHub
docker run -v /notebooks:/notebooks -p 8000:8000 jupyterhub
C) Confluent Schema Registry(我还没有尝试过,但在我的最终设置中我也会有一个 schema registry 容器)
docker run confluentinc/cp-schema-registry
两者都可以正常启动,没有任何问题。但是我如何打开 jupyterhub 容器到 kafka 容器和模式注册表端口,以便我的 python 脚本可以访问代理。
我假设您想 运行 按需使用您的 jupyter notebook 容器,而您的 zookeeper 和 kafka 容器将始终 运行 分开?您可以创建一个 docker network 并将所有容器加入该网络。然后您的容器将能够通过它们的名称相互解析。
- Create a network
- Specify this network in compose file
- 使用
docker run
启动其他容器时,请使用 --network
选项。
如果你 运行 docker network ls
那么你可以找到 Compose creates for you 的网络名称;它将被命名为 directoryname_default
。然后您可以启动连接到该网络的容器,
docker run --net directoryname_default confluentinc/cp-schema-registry
如果您可以将这些文件包含在同一个 docker-compose.yml
文件中,那么您就不需要做任何特殊的事情。特别是这对于 Confluent 模式注册表可能有意义,如果您使用 Avro 消息,您可以将其视为 Kafka 堆栈的核心部分。
您可以在此处使用 Docker Compose 服务名称 kafka
作为主机名,但由于您需要连接到“内部”侦听器,因此您需要配置一个非默认的端口 9093。(Docker Compose expose:
指令作用不大,您可以安全地删除它。)
在我的 linux 服务器上,我有 运行 3 张图像 -
A) Docker 和 Zookeeper 使用此 docker-compose 文件 -
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.11-2.0.0
ports:
- "9092:9092"
expose:
- "9093"
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
这将为主机打开 kafka 代理。
B) JupyterHub
docker run -v /notebooks:/notebooks -p 8000:8000 jupyterhub
C) Confluent Schema Registry(我还没有尝试过,但在我的最终设置中我也会有一个 schema registry 容器)
docker run confluentinc/cp-schema-registry
两者都可以正常启动,没有任何问题。但是我如何打开 jupyterhub 容器到 kafka 容器和模式注册表端口,以便我的 python 脚本可以访问代理。
我假设您想 运行 按需使用您的 jupyter notebook 容器,而您的 zookeeper 和 kafka 容器将始终 运行 分开?您可以创建一个 docker network 并将所有容器加入该网络。然后您的容器将能够通过它们的名称相互解析。
- Create a network
- Specify this network in compose file
- 使用
docker run
启动其他容器时,请使用--network
选项。
如果你 运行 docker network ls
那么你可以找到 Compose creates for you 的网络名称;它将被命名为 directoryname_default
。然后您可以启动连接到该网络的容器,
docker run --net directoryname_default confluentinc/cp-schema-registry
如果您可以将这些文件包含在同一个 docker-compose.yml
文件中,那么您就不需要做任何特殊的事情。特别是这对于 Confluent 模式注册表可能有意义,如果您使用 Avro 消息,您可以将其视为 Kafka 堆栈的核心部分。
您可以在此处使用 Docker Compose 服务名称 kafka
作为主机名,但由于您需要连接到“内部”侦听器,因此您需要配置一个非默认的端口 9093。(Docker Compose expose:
指令作用不大,您可以安全地删除它。)