docker swarm 跨主机容器互联
前提准备
虚拟机change1:192.168.1.20
虚拟机change2:192.168.1.21
两台虚拟机都安装好docker,安装步骤可参照该博客
搭建集群
虚拟机change2 执行以下命令:
docker swarm init
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0p89ldytfq18roe0snxunylwq0q95um36qpnf896ogqil7uci5-0bw2g0fu2ug0ehf8vojo9s20t 192.168.1.21:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
虚拟机change1:192.168.1.20 加入集群
docker swarm join --token SWMTKN-1-0p89ldytfq18roe0snxunylwq0q95um36qpnf896ogqil7uci5-0bw2g0fu2ug0ehf8vojo9s20t 192.168.1.21:2377
创建集群网络
只能在change2管理节点创建网络
docker network create -d overlay --subnet=10.10.0.0/16 --gateway=10.10.0.1 --attachable=true my-network-overlay
查看刚才创建的网络
docker network ls
NETWORK ID NAME DRIVER SCOPE
1191d51d217f bridge bridge local
6953e56e8ad1 docker_gwbridge bridge local
2fa9d09a1a36 host host local
uiepae7dknqg ingress overlay swarm
x0tjx8cjamm8 my-network-overlay overlay swarm
f5b89a7f54a8 none null local
称为ingress的overlay网络,用于传递集群服务的控制或是数据消息,若在创建swarm服务时没有指定连接用户自定义的overlay网络,将会加入到默认的ingress网络
名为docker_gwbridge桥接网络会连接swarm中所有独立的docker系统进程 docker_gwbridge是一个虚拟网桥,连接docker系统进程所处的物理网络和overlay网络,它存在于docker的内核中,如果我们想配置这个网络,首先需要确保主机不在集群中,接着进行下面的步骤:
- 退出集群服务
- 删除docker_gwbridge桥接网络
- 重启docker 服务
- 创建docker_gwbridge桥接网络,由于是docker_gwbridge 网卡scope 是local,所以需要所有集群节点进行重新生成 docker network create --subnet 172.21.0.0/20 --gateway 172.21.0.1 --opt com.docker.network.bridge.name=docker_gwbridge --opt com.docker.network.bridge.enable_icc=false --opt com.docker.network.bridge.enable_ip_masquerade=true docker_gwbridge
如果想要连接到my-network-overlay网络,请确保连接前下列端口没有服务,并且服务器防火墙要允许下列端口通过:
- TCP端口2377,用于集群管理信息的交流
- TCP、UDP端口7946用于集群中节点的交流
- UDP端口4789用于overlay网络中数据报的发送与接收
work节点是查询不到这个网络,需要升级work节点为管理节点
docker node promote change1
跨主机容器互联网络图
图中 Overlay network 是我们创建的 my-network-overlay
图中Physical network 是我们创建的 docker_gwbridge
到这里基本大功告成
测试容器互通
我们在change2运行java服务容器
docker run -p 80:80 --env datasource.url=mysql --name myblog --restart always --network my-network-overlay myblog:latest
在change1运行mysql数据库容器
docker run --name mysql --restart=always --network my-network-overlay -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:latest
然后在浏览器输入测试地址 http://192.168.1.21/
相关文章
- Docker中快速部署Zookeeper服务
- ECE认证笔记之使用docker compose快速启动ES+Kibaba测试环境
- docker容器端口冲突_docker web管理工具
- docker容器和主机同网段_docker桥接模式下外网访问
- docker安装RabbitMq
- Docker系列(2):容器给部署带来的快乐
- docker使用过程中需要留意的几个知识点
- 使用 Docker 来快速上手中文 Stable Diffusion 模型:太乙
- Docker服务的停止命令(systemctl stop docker)
- 「 使用docker for windows关于迁移目录的教程 」
- 如何判断服务器是云主机还是物理主机或docker容器
- 云原生之Docker容器的存储管理
- 从 docker 到 runC
- Docker - docker-compose搭建ELK服务
- docker run 命令使用详解(一)
- springboot整合docker部署(两种构建Docker镜像方式)详解编程语言
- 如何分析并探索 Docker 容器镜像的内容
- docker-容器启动入门
- flannel 的连通与隔离 – 每天5分钟玩转 Docker 容器技术(61)
- Docker基础之一: Docker架构
- 管理 Machine – 每天5分钟玩转 Docker 容器技术(47)
- Dockerfile 常用指令 – 每天5分钟玩转 Docker 容器技术(16)