首页 > 其他分享 >Docker不同宿主机网络打通

Docker不同宿主机网络打通

时间:2024-08-19 16:54:29浏览次数:12  
标签:打通 busybox 宿主机 节点 swarm ubuntu22 Docker 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  [email protected]
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

完毕!!!

标签:打通,busybox,宿主机,节点,swarm,ubuntu22,Docker,docker
From: https://www.cnblogs.com/lanheader/p/18367654

相关文章

  • Docker 容器中镜像导出/导入
    利用容器中镜像导出/导入创建一个简单的Docker镜像利用dockerps-a命令查看要导出的镜像。导出查看要导出的镜像[root@localhost~]#dockerps-adockerexport命令进行镜像导出。[root@localhost~]#dockerexport418ae>nginx-docker.tar导入[vipsoft@kafka1ho......
  • docker 创建MySQL
    dockerrun\      --restart=always\  #这个参数是mysql在docker启动的时候,也会跟着自动启动--namemysql8.0\   #这个参数是mysql容器的名字-p3306:3306\    #这个参数是端口号映射-eMYSQL_ROOT_PASSWORD=root\  #这个参数是是设......
  • docker 容器迁移
    第一步:使用dockercommit命令将运行中的容器保存为新的镜像。这里需要容器的ID或名称,以及你想要命名的目标镜像名dockercommit[容器ID或名称][目标镜像名]:[标签]#例如:dockercommitmy_containermy_new_image:latest第二步:使用dockersave命令将刚才创建的镜像保存为tar......
  • ElasticSearch IK分词器的MySQL热部署字典(Docker)
    1.下载插件源码找到自己对应ES版本的下载Releases·infinilabs/analysis-ik·GitHub2.添加mysql驱动依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.......
  • 你还不知道的 Dockerfile 增强新语法 转载
    Dockerfile 是使用Docker的相关开发人员的基本工具,用来充当构建Docker镜像的模板,在这个文件中包含用户可以在命令行上调用来构建镜像的所有命令。了解并有效利用Dockerfile可以显着简化开发流程,实现镜像创建的自动化并确保不同开发阶段的环境一致。Dockerfile对于定义Doc......
  • Docker的Etcd项目
    etcd是CoreOS团队发起的一个管理配置信息和服务发现(servicediscovery)的项目,在这一章里面,我们将介绍该项目的目标,安装和使用,以及实现的技术。Docker的etcd简介什么是etcdetcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-......
  • Docker的介绍、保姆级安装和使用
    一、Docker简介1.1、Docker是什么        Docker是一个用于开发、发布和运行应用程序的开放平台;使您能够将应用程序与基础设施分离,以便您可以快速交付软件。不像虚拟机那样笨重(比如:我需要将一个安装好nginx环境的内容分享给其他人:方式一【使用虚拟】(应用程序Nginx与......
  • docker sql server安装
    概述一般情况下,部署sqlserver,需要准备一台windowsserver服务器,然后再安装sqlserver。但是windows太耗费资源了,在docker中运行,是比较方便的。 硬件和软件要求要在Docker容器上安装SQLServer2019,主机服务器必须满足以下要求:任何受支持的Linux分发版或Windows或......
  • docker yapi安装
    概述YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护API,YApi还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。 doc......
  • Docker实战案例
    Docker使用Supervisor来管理进程Docker容器在启动的时候开启单个进程,比如,一个ssh或者apache的daemon服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管......