Docker系列-4

同宿主机Docker网络通信机制

在这里插入图片描述
查看容器IP:
1、如果已经进入了容器则查看hosts文件即可:cat /etc/hosts
在这里插入图片描述
2、如果没有进入容器则使用:docker inspect 查看其中的NetworkSettings下面的IPAddress字段即为容器IP;
在这里插入图片描述

同一个宿主机中,容器与容器之间的通信可以有几种实现方式:

1、通过容器本身的ip相互直接访问对方;

Tomcat互访、Redis互访、MySQL互访
这种方式会导致ip地址的硬编码写死,不方便迁移,容器重启后,ip可能会发生变化,容器启动时是随机生成的一个ip,通过容器ip访问不是一个好的方案,不推荐使用;

2、通过宿主机的ip:port访问

通过宿主机的ip:port访问,需要将宿主机的端口与容器的端口进行映射;

3、通过link建立连接(老版本使用,官方已经不推荐使用)

运行容器时,指定参数link,使得源容器与被链接的容器可以进行相互通信,并且接受的容器可以获得源容器的一些数据,比如:环境变量;

# 源容器:mysql
docker run -d --name test-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#被链接容器 centos
docker run -d --name  test-centos  --link test-mysql:mysql  centos
#进入test-centos
docker exec -it test-centos /bin/bash
然后在centos中直接通过 link的名字或者link时候取的别名就能进入:
mysql -h test-mysql -uroot -p123456
或者:
mysql -h mysql -uroot -p123456
通过link建立连接的容器,被链接的容器能 ping 通源容器,反过来不行;

4、通过自定义网络通信(官方推荐)

使用docker network命令创建一个桥接网络,在docker run的时候将容器指定到新创建的桥接网络中,这样同一桥接网络中的容器就可以相互访问;
查看当前宿主机有哪些桥接网络:docker network ls

1、创建桥接网络
docker network create my-docker-network
2、启动容器时,加入创建的网络,并指定网络别名
docker run -d --network my-docker-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql
启动被链接的容器
docker run -d --network my-docker-network --network-alias mysql2 -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql

不同宿主机Docker容器之间通信

在这里插入图片描述

Docker跨宿主机通信目前有如下几种主流方法:

1、使用路由机制打通网络;
2、使用Open vSwitch(OVS)打通网络 ;
3、使用flannel来打通网络;
4、使用Quagga来实现自动学习路由;
5、借助openstack、k8s等方式打通网络;
我们介绍使用路由机制打通网络方案;
a机192.168.10.128,容器网段172.18.0.1/16,a机起了容器ip是172.18.0.2
b机192.168.10.130,容器网段172.17.0.1/16,b机起了容器ip是172.17.0.2
两台机分别配置路由表
a机,route add -net 172.17.0.0 netmask 255.255.255.0 gw 192.168.10.130
b机,route add -net 172.18.0.0 netmask 255.255.255.0 gw 192.168.10.128
添加好后,查看路由 route
然后a机ping b机容器,发现仍是ping不通,就是数据包会drop掉;
ip_forward配置
我们在b机上使用以下命令查看网络包转发情况,发现会丢失
iptables -t filter -nvL FORWARD
在这里插入图片描述

我们需要b机上配置,寻找172.17段ip的网络包不丢失,进行转发;
a机器: iptables -I DOCKER -d 172.17.0.0/16 -j ACCEPT
b机器: iptables -I DOCKER -d 172.18.0.0/16 -j ACCEPT
从而整个网络联通;
在这里插入图片描述
在这里插入图片描述

修改镜像的名称:
docker tag bedb47dcc893(镜像ID) my_jdk1.8.0_191:latest

Docker部署Spring Cloud

128机器:
Mysql、Rabbitmq、Eureka、Config、Zinkin
130机器:
portal服务、goods服务、orders服务
微服务网络访问图(如下):
在这里插入图片描述

部署RabbitMQ:
docker run -d -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 -v /opt/rabbitmq/data:/var/lib/rabbitmq --privileged=true --network my-docker-network --network-alias rabbitmq128 rabbitmq:management

部署mysql:
docker run -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql --privileged=true --network my-docker-network --network-alias mysql128 -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql

部署eureka注册中心
docker run -d -p 8761:8761 --network my-docker-network --network-alias eureka128 34-springcloud-service-eureka

部署spring-cloud-config
docker run -d -p 8888:8888 --network my-docker-network --network-alias config128 34-springcloud-service-config

部署zipkin
docker run -d -p 9410:9410 --network my-docker-network --network-alias zipkin128 34-springcloud-service-zipkin

部署goods
docker run -d -p 9100:9100 --network my-docker-network130 --network-alias goods9100 34-springcloud-service-goods-9100
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值