Docker不同宿主机网络打通
本方式使用docker Swarm集群的方式创建overlay 网络进行打通
背景
因java微服务使用nacos做配置中心,为了解决Nacos服务注册使用Docker容器内网ip问题,使用此方案
前置条件
1、宿主机之间需要开通端口
管理端口:
2377/tcp: 用于管理 Swarm 模式集群。这是 Swarm Manager 和 Worker 节点之间进行通信的主要端口,用于集群管理和任务调度。
节点间通信端口:
2375/tcp: 用于 Docker API 的通信。在 Swarm 模式下,这个端口通常只在 Manager 节点上开启,供外部客户端访问。
2376/tcp: 与 2375 类似,但使用了 TLS 加密。如果启用了 TLS,那么 2376 端口将被用于安全的 Docker API 访问。
网络端口:
4789/udp: 用于 VXLAN 通信,当使用 overlay 网络驱动时会用到此端口。这是 Swarm 用于跨节点容器通信的主要端口之一。
7946/tcp and/or 7946/udp: 用于节点间的服务发现和心跳消息。这两个端口用于 Raft 协议中的通信,以便维护集群状态的一致性。
2、docker版本
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。因此,docker版本必须大于1.12,以下我使用的docker版本为 27.1.1
安装docker
因为docker源被屏蔽以后,安装docker需要从阿里源进行安装,如果需要详细安装过程,请参考文档:https://www.cnblogs.com/lanheader/p/14260710.html
前期只需要替换源即可,这里不做过多的描述,系统我使用的是ubuntu 22
# 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 安装源
sudo sh -c 'echo "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list'
# 验证是否成功安装了docker
sudo systemctl status docker
docker --version
安装Swarm集群
master执行
docker swarm init --advertise-addr=192.168.0.1 # 注意替换这里的IP,IP为master的ip
Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377 # 注意保存此行命令
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
work节点执行
这个是加入节点的命令,删除节点使用 docker swarm leave
docker swarm join --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377
在 manager 节点,查看当前网络集群的节点情况
root@ubuntu22:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
7r4vvml8kd2jem850rqfl158h * ubuntu22 Ready Active Leader 27.1.1
lrvsq6quwaxleqejf0w1nawvu ubuntu22 Ready Active 27.1.1
u4v4os8zats4ro795a4l6lw3y ubuntu22 Ready Active 27.1.1
root@ubuntu22:~#
在 manager 节点,创建 overlay 网络
注意,这里强调使用--attachable参数,否则docker-compose不能使用此网络
docker network create -d overlay --attachable test
在 master 节点的查看是否创建成功
正常情况下,如果网络未激活,则节点不会有test网络,需要执行后才会出现网络
root@ubuntu22:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
28d3903acdb2 bridge bridge local
c2147e916c72 docker_gwbridge bridge local
7jczo6vw7mig test overlay swarm
63fa0e285c02 host host local
ypqnzuafqukz ingress overlay swarm
b0e97299b587 none null local
激活网络,使节点存在overlay网络
创建一个镜像
busybox 镜像可能拉取不到,各位大佬自行想办法解决...,再次感谢 方老师~
FROM busybox
MAINTAINER lanheader@163.com
ENTRYPOINT ["tail","-f","/etc/hosts"]
打包镜像
docker build -t busybox-swarm . swarm
激活overlay 网络
docker service create --replicas 3 --name busybox-net --network test busybox-swarm
查看服务
root@ubuntu22:~# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
iicn2h7rw3af busybox-net replicated 3/3 busybox-swarm:latest
查看节点容器工作状态
# 查看节点
root@ubuntu22:~# docker service ps busybox-net
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
s9reawp6seu5 busybox-net.1 busybox-swarm:latest ubuntu22 Running Running 41 minutes ago
iw3fvcy3tu14 busybox-net.2 busybox-swarm:latest ubuntu22 Running Running about an hour ago
vn16j18a2jzd busybox-net.3 busybox-swarm:latest ubuntu22 Running Running about an hour ago
测试
使用docker inspect xxx 查看容器IP地址
在docker exec -it xxx sh 进入容器进行测试
Docker-compose 配置文件中添加网络
容器中执行使用test网络即可
networks:
test:
external: true
完毕!!!
Docker不同宿主机网络打通的更多相关文章
- docker 访问宿主机网络
使用宿主机IP 在安装Docker的时候,会在宿主机安装一个虚拟网关docker0,我们可以使用宿主机在docker0上的IP地址来代替localhost. 首先,使用如下命令查询宿主机IP地址: i ...
- Docker桥接宿主机网络与配置固定IP地址
有些需求是把这个容器与宿主机在同一个网段,但是本人不建议这样子去操作,因为一个容器本身就是一个封装好的服务.建议去按默认的网络去实现. 临时设置 [root@linux-docker01 ~]# vi ...
- 跨 Docker 宿主机网络 overlay 类型
跨 Docker 宿主机网络 overlay 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 1 ...
- Docker挂载宿主机目录
一.普通方式直接挂载 1.查看已有容器 docker ps 2.进入容器并挂载 docker run -it -v /root/work/docker:/root/hzbtest tomcat:7.0 ...
- Docker 与 宿主机之间的文件cp
Docker 与 宿主机之间的文件cp 第一种方法是官方比较推荐的,其实和第二种方法实现是一样的. 第一种方法例: 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下. ...
- 如何在docker和宿主机之间复制文件
如何在docker和宿主机之间复制文件 最近在用Docker布署hadoop,要将文件上传到HDFS首先文件得在Docker容器中吧,网上提供的方法差不多有三种 1.用-v挂载主机数据卷到容器内 ...
- 宿主机网络中其它机器与Docker容器网络互通配置
前言 目前项目采用微服务架构进行开发,Nacos和其它服务部署到Docker中,Docker中容器采用的网络默认是桥接模式(Bridge),默认的子网码是172.17.0.1/16:宿主机是192.1 ...
- docker环境 宿主机和容器之间复制文件
容器往宿主机:docker cp 3234234324234:/database_dump_bak/db_bak.dmp /home/test 宿主机往容器:docker cp wenjian_001 ...
- Docker拷贝宿主机与容器中的文件
如果我们需要将宿主机文件拷贝到容器内可以使用 docker cp 命令,也可以将文件从容器内拷贝到宿主机 将宿主机文件拷贝到容器内 docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目 ...
- 使用docker与宿主机文件互相拷贝
1.从容器里面拷文件到宿主机 示例:容器名为s2-061_struts2_1,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将 ...
随机推荐
- Windows查看电源使用情况
这里使用Windows自带的东西查看电源使用情况. 1.按Win键+R,输入cmd,回车. 2.输入Powercfg /batteryreport回车. 3.根据提示找到电池报告文件,双击打开即可.
- AGC044C Strange Dance
在2020年A卷省选day2t2有类似操作trie的技巧. 题目链接 显然是建一棵三叉trie树,代表0/1/2 对这棵trie树,我们需要支持子树交换和全局加1 考虑第一个操作怎么做?直接打个懒标记 ...
- 你了解Vim的增删改查吗 ?
增: 在Vim的Normal模式中输入A/I/O,a/i/o字符进行对应的增加操作. 删 在Vim的Normal模式中, 输入x 删除光标对应的一个字符(4x代表删除4个字符): 输入dd删除光标所在 ...
- unp.h的安装以及第一个程序的运行
unp.h的安装以及第一个程序的运行 源代码下载以及编译 点击此处下载源代码 解压到本地文件夹,如果访问不了GitHub的话就用我搬到gitee的仓库吧 git clone https://gitee ...
- 小组合作实现的基于 jsp,servlet,mysql 编写的学校管理系统
基本完成的页面--源代码在<文件>中可下载 文件地址:https://i.cnblogs.com/Files.aspx 学生管理模块各功能已实现 百度网盘下载地址: 链接:https:// ...
- 不是人家太装逼,而是我们太low
在一个社团的迎新的时候,每个人自我介绍.等到一个一身LV,爱马仕的女孩子自我介绍,说起爱好,她想了想说:喜欢跑车.然后很淡定的坐下了.很多同学你看我我看你,投以"炫富"的判断目光- ...
- 量子位(qubit)发微
上一篇文章我们讲了量子计算机的一些概念,文章不短,但是信息量很少.这里继续深入量子机来揭开qubit的神秘面纱. 这篇文章会有一些数学概念,不过很简单 量子叠加 量子叠加非常重要,因为qubit就是利 ...
- js 获取年、月、周、当前日期第几周、这月有那几周
查看当前日期是第几周:https://wannianli.tianqi.com/today/zhou/ //获取完整的日期 var date=new Date; var y = date.getFul ...
- 在宝塔上配置打包好的vue3项目
配置文件如下 server{ listen 80; server_name gongchang.365cb.cn; index index.html index.htm default.php def ...
- mysql 删除数据表报错 表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理
mysql 删除数据表报错 表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理 MySQL报错 ...