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, 现在要将 ...
随机推荐
- Ubuntu 18.04安装xdrp以使用远程桌面
背景 开发环境有一台服务器默认没有屏幕(被我拿走用来拓展屏幕了),有时候需要使用到界面但嫌弃拆显示器太麻烦,因此使用远程桌面来解决这个需求. 做法 安装xrdp sudo apt install -y ...
- PetaLinux常用命令汇总
创建petalinux工程 Create a new project from a reference BSP file. 用于从官方下载的BSP中抽取数据产生工程. petalinux-create ...
- 『vulnhub系列』doubletrouble-1
『vulnhub系列』doubletrouble-1 下载地址 https://www.vulnhub.com/entry/doubletrouble-1,743/ 信息搜集 使用命令,获得存活靶机I ...
- SpringBoot实现Mysql读写分离
前言 在高并发的场景中,关于数据库都有哪些优化的手段? 常用的有以下的实现方法:读写分离.加缓存.主从架构集群.分库分表等,在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库. 主库的职 ...
- vue-router 路由模式有几种?
实际上存在三种模式: Hash: 使用URL的hash值来作为路由.支持所有浏览器. History: 以来HTML5 History API 和服务器配置.参考官网中HTML5 His ...
- computed 和 watch 的区别和运用的场景?
computed: 是计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值: watch: ...
- Jenkins插件管理(Manager Plugins)【快速提升项目构建和部署实施的工作效率】
Jenkins 是一个很棒的开源自动化平台.它有一些开箱即用的强大功能.然而,在我看来,让它脱颖而出的是它的社区和它开发的插件.有超过一千个插件可用于支持几乎所有用于构建.部署和自动化项目的技术.工具 ...
- [rCore学习笔记 02]Ubuntu 22虚拟机安装
写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 Ubu ...
- vue页面加载慢,chunk-vendors.js文件太大
今天拉取合并了同事的代码后页面加载速度变得非常慢,经过排查发现是因为加载的chunk-vendors.js太大 58m 28s就很离谱 经过同事指导加上百度终于找到解决办法,配置compression ...
- 【Java】实体类转换框架 MapStruct
简单尝试了下发现比Dozer还有BeanUtil还方便小巧 注解的作用是在生成字节码文件时实现具体GetterSetter方法,实际转换时就是赋值操作,嘎嘎快 参考文章: https://juejin ...