采用docker部署时kafka共享zookeeper的网络配置

采用docker部署kafka、zookeeper,一般的做法是创建一个docker网络,然后kafka、zookeeper都使用这个网络。问题是,我部署到生产环境的时候,这种做法被禁止了。原因是添加了这个docker网络以后,服务器就无法访问了。该服务器是通过互联网访问的。我也不知道为啥就会搞到他们网络崩溃,总之就是不允许。

那怎么办?

经摸索,证明可以采用两个docker容器共享其中一个容器的网络配置的做法。众所周知,docker容器各自独立,相互区隔,自成一个世界。同一个网络,就是为了能够互相访问。创建docker网络如此,共享容器网络如此,都是这个目的。

以下是操作记录,以及相应学习。

一、共享容器网络配置

(一)原先创建docker网络方案

1、首先创建一个网络

sudo docker network create app-tier --driver bridge

2、安装zookeeper

sudo docker run --restart=always -d --name zookeeper-server \
    --network app-tier \
    -p 2181:2181 \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    bitnami/zookeeper:latest

3、安装Kafka

sudo docker run --restart=always -d --name kafka-server \
    --network app-tier \
    -p 8004:9092 \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.249:8004 \
    bitnami/kafka:latest

(二)共享容器网络配置方案

1、安装zookeeper,并映射所有要用到的端口

sudo docker run \
    --restart=always -d --name zookeeper-server \
    -p 2181:2181 \
    -p 8004:9092 \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    bitnami/zookeeper:latest    

2、安装Kafka

脚本中,–net=container:zookeeper-server,意为使用容器zookeeper-server的网络。注意到端口8004:9092放在了创建容器zookeeper-server时进行了设置。因为 --net=container 模式下,是不允许再进行端口暴露设置(-p host port : container port )的。但由于共享了容器zookeeper-server的网络配置,因此在创建容器zookeeper-server时设置即可。

sudo docker run --restart=always -d --name kafka-server \
    --net=container:zookeeper-server \
    -e ALLOW_PLAINTEXT_LISTENER=yes \
    -e KAFKA_CFG_ZOOKEEPER_CONNECT=localhost:2181 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.122.1:8004 \
    bitnami/kafka:latest

二、docker的网络模式

docker有以下几种网络模式:bridge、host、container、none和overlay。安装docker之后,即可见到:
采用docker部署时kafka共享zookeeper的网络配置_第1张图片

1、bridge

默认模式。一般我们创建容器就是用了这种模式(无须显示指定)。为了让外部能够访问到docker容器,应当暴露一些端口,-p host port : container port,我们都很熟悉了。

2、host

docker就直接基于宿主机的网络,理论上外部可以直接访问这个docker容器。这样的话,docker的区隔性、安全性会有所削弱。

3、container

就是上面提到的,共享容器网络配置模式。

4、none

啥网络模式都不分配,由docker容器里面的程序自己实现,便于它想怎么搞就怎么搞。

5、overlay

跨主机的docker容器互访。

参考文章:
My kafka docker container cannot connect to my zookeeper docker container
docker 容器的网络模式
Docker的网络模式bridge、host、container other、overlay

你可能感兴趣的:(应用,Linux,微服务,docker,kafka,zookeeper,container,docker,network)