默认网络
安装Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络
docker network ls
docker 运行新建容器的时候,默认使用 bridge 模式,
如果想更改,可以在 run 的时候,加上参数 --network name 进行修改。
Bridge模式
当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。这个和Vmware的桥接模式是一样的。但是docker默认禁止了容器之间的相互通信,所以,默认情况下(容器不指定 network 的情况下),容器和容器之间,网络是不通的。可以通过 配置–icc=true 来开启容器间的通信。但这意味着宿主机上的所有容器可以不受任何限制地相互通信,这可能导致拒绝服务攻击,所以不推荐
自定义网络实现容器间通信
创建网络
创建一个网络名为 zk-kfk-net 且 driver 为 bridge 的网络:(默认创建的就是bridge)
docker network create zk-kfk-net
然后执行 docker network ls
查看网络
运行容器的时候,指定 network
比如允许一个zookeeper容器
docker run -d -p 2181:2181 --restart=always --name=zookeeper --network=zk-kfk-net --network-alias=zookeeper.server zookeeper
说明:
- –network my_net:指定容器的网络
- –network-alias zookeeper.server:指定其它容器访问该容器时的网络别名
检查容器信息docker inspect zookeeper
,查看网络部分信息
接下来运行另一个容器kafka
docker run -d -p 9092:9092 --restart=always --name=kafka --network=zk-kfk-net --network-alias=kafka.server -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper.server:2181 -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka.server:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 bitnami/kafka
- KAFKA_ZOOKEEPER_CONNECT=zookeeper.server:2181 需要制定zookeeper的连接地址,可以发现能够正常启动
然后我们在 eureka-server 容器中去测试,是否能 ping 通刚才的 mysql 容器
docker exec -u 0 -it kafka /bin/sh
然后进行ping
通过 --link 实现容器间的通信
容器之间还可以通过 --link 的方式来实现通信,不过这种方式在多个容器之间需要进行通信时,不免显得笨重,所以不推荐使用
。