Docker单机网络:解锁本地开发环境的无限潜能

news2025/2/25 11:12:46

  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  •  座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  •  个人主页:团儿.-CSDN博客

目录

前言:

正文:

docker 网络

    这里我们先讨论docker的单主机网络模式,它包括以下4类:

1.1 host

1.2 bridge

1.3 none

1.4 joined-container

2、容器互联(自定义局域网络****)

我们为什么需要自定义网络?

如何自定义网络?

2.1 我们可以通过 docker network create 自定义一个网络

自定义网络:

(1)自定义网络

(2)查看容器网络

接下来,我们启动两个容器,并将其放入我们自定义的网络中

// 1、启动centos01 

// 2、启动centos02    

// 3、查看 tigerNet 网络中的变化

#ping一下两个容器

// 1、centos02 ping centos01 可ping通

// 2、centos01 ping centos02 可ping通

2.2、容器互联(局域网络之间的联通****)

现在构建两个局域网

在 tigerNet 中启动 centos01 和 centos02(2.1中已实现)

在 studiousNet中启动centos03 和 centos04

现在我们来打通局域网与容器之间的通信

我们ping一下试一下

// 1、 centos01 ping centos04 可ping通

// 2、 centos01 ping centos03 测试

3.容器互联(Redis集群实战****)

3.1集群搭建

先下载redis包,使用docker load  -i 导入

① 创建一个redis网络

② 编写 redis.conf 文件

进02,03,04,05,06中修改ip

③ 启动6个redis容器

④ 随便进入一个容器,并创建一个redis集群

⑤ 进入集群,并查看集群信息

⑥ 集群高可用测试

将对应的容器停掉

查看name值(集群搭建成功)

修复 

若02想要回到一开始的主,声明一下即可 


前言:

在当今的软件开发领域,容器化技术以其轻量级、可移植性和高效性,成为了推动应用交付和部署变革的重要力量。而Docker,作为容器化技术的杰出代表,更是凭借其强大的功能和简便的操作,赢得了广大开发者和运维人员的青睐。

在Docker的众多特性中,单机网络(也称为单节点网络)是一个尤为重要的功能。它不仅允许我们在单个Docker主机上创建和管理复杂的网络拓扑结构,实现容器间的互联互通,还为开发者提供了一个高度可控、隔离且安全的本地开发环境。

本文档将深入探讨Docker单机网络的原理、配置方法和实际应用。从基础的网络模式介绍,到高级的网络配置技巧,再到实际场景中的问题解决,我们力求为读者呈现一个全面、系统且实用的知识体系。

无论你是Docker的初学者,还是有一定经验的开发者,都将在本书/本文档中找到适合自己的内容。我们希望通过我们的努力,帮助大家更好地掌握Docker单机网络的技术,从而在实际开发中发挥出更大的潜力。

让我们一同踏上这段探索Docker单机网络的旅程,共同开启软件开发的新篇章!


正文:

docker 网络

1、
    当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识。
    Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。
    然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。
    因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

    这里我们先讨论docker的单主机网络模式,它包括以下4类:

        host
        bridge
        none
        joined-container
    查看网卡模式命令:
        docker  network ls

1.1 host

    类似于VMware的桥接模式,但没有独立ip;
    
    docker不会为容器创建独有的network namespace;

    使用宿主机的默认网络命名空间,共享一个网络栈;

    表现为容器内和宿主机的IP一致;

    这种模式用于网络性能较高的场景,但安全隔离性相对差一些。

    命令:创建网络为host的容器
    

1.2 bridge

    桥接模式,有点类型VM-NAT,dockerd进程启动时会创建一个docker0网桥,容器内的数据通过这个网卡设备与宿主机进行数据传输。

    docker会为容器创建独有的network namespace,也会为这个命名空间配置好虚拟网卡,路由,DNS,IP地址与iptables规则。

1.3 none

none模式可以说是桥接模式的一种特例,docker会为容器创建独有的network namespace ,但不会为这个命名空间准备虚拟网卡,IP地址,路由等,需要用户自己配置。

1.4 joined-container

容器共享模式,这种模式是host模式的一种延伸,一组容器共享一个network namespace;

对外表现为他们有共同的IP地址,共享一个网络栈;

kubernetes的pod就是使用的这一模式。


关于跨主机的docker网络通信,包含overlay、macvlan,又包含calico、flannel、weave等方案,不过跨主机的docker网络管理更多的是交给kubernetes或swarm等编排工具去实现了。


2、容器互联(自定义局域网络****)

我们为什么需要自定义网络?

将容器放在自定义的网络(数据局域网)中,容器之间是可以相互通信的,这样的话,我们就不需要使用 --link(旧技术,已淘汰) 来实现通信了。

如何自定义网络?

查看容器网络docker network ls,容器启动时默认的网络是bridge(桥接)模式(即,容器启动时默认是存在--net bridge)


2.1 我们可以通过 docker network create 自定义一个网络

自定义网络:
(1)自定义网络
 docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 tigerNet
(2)查看容器网络
docker network ls

接下来,我们启动两个容器,并将其放入我们自定义的网络中
// 1、启动centos01 

          --net tigerNet  将容器发布到我们自定义的网络中去    

docker run --name centos01 -itd --net tigerNet centos:latest
// 2、启动centos02    
docker run --name centos02 -itd --net tigerNet centos:latest
// 3、查看 tigerNet 网络中的变化
    docker network inspect tigerNet

#ping一下两个容器
// 1、centos02 ping centos01 可ping通
docker exec -it centos01 ping centos02

 

// 2、centos01 ping centos02 可ping通
docker exec -it centos02 ping centos01

 

2.2、容器互联(局域网络之间的联通****)

有这么一个需求,我们希望一个局域网中的容器可以与另一个局域网中的容器进行通信,如下:

现在构建两个局域网
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 tigerNet
docker network create --driver bridge --subnet 192.167.0.0/16 --gateway 192.167.0.1 studiousNet

在 tigerNet 中启动 centos01 和 centos02(2.1中已实现)
在 studiousNet中启动centos03 和 centos04
docker run --name centos03 -itd  --net studiousNet centos:latest
docker run --name centos04 -itd  --net studiousNet centos:latest
现在我们来打通局域网与容器之间的通信

docer给我提供了docker network connect命令,可以实现打通局域网与容器之间的通信

将 centos04 添加到 tigerNet 中,我们可以发现原来 docker 是给 centos04 设置了双IP

docker network connect tigerNet centos04
docker network inspect tigerNet

            // 1 我们可以看到tomcat01已经被加到tigerNet中去了

我们ping一下试一下
// 1、 centos01 ping centos04 可ping通
docker exec -it centos01 ping centos04


// 2、 centos01 ping centos03 测试
docker exec -it centos01 ping centos03

3.容器互联(Redis集群实战****)

3.1集群搭建

先下载redis包,使用docker load  -i 导入

通过网盘分享的文件:redis.tar
链接: https://pan.baidu.com/s/1NQeVDycq8Ms8nQzlMA5fDg 提取码: 1jkw

改名:

docker tag redis:5.0.10 redis
① 创建一个redis网络
docker network create redis --subnet 172.38.0.0/16

② 编写 redis.conf 文件

我们打算,使用数据卷挂载 redis 中的redis.conf,所以我们需要宿主机上提前配置到redis集群的配置文件

mkdir -p /home/redis/node0{1..6}/data
vim /home/redis/node01/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.11
cluster-announce-bus-port 16379
appendonly yes
cd /home/redis/node01/
cp redis.conf ../node02/
cp redis.conf ../node03/
cp redis.conf ../node04/
cp redis.conf ../node05/
cp redis.conf ../node06/
进02,03,04,05,06中修改ip
vim ../node02/redis.conf 
cluster-announce-ip 172.38.0.12

3,4,5,6同上

③ 启动6个redis容器
docker run --name redis01 -p 6371:6379 -p 16371:16379 \
-v /home/redis/node01/data:/data  \
-v /home/redis/node01/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis redis-server /etc/redis/redis.conf

docker run --name redis02 -p 6372:6379 -p 16372:16379 \
-v /home/redis/node02/data:/data  \
-v /home/redis/node02/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.12 redis redis-server /etc/redis/redis.conf

docker run --name redis03 -p 6373:6379 -p 16373:16379 \
-v /home/redis/node03/data:/data \
-v /home/redis/node03/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.13 redis redis-server /etc/redis/redis.conf


docker run --name redis04 -p 6374:6379 -p 16374:16379 \
-v /home/redis/node04/data:/data \
-v /home/redis/node04/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.14 redis redis-server /etc/redis/redis.conf


docker run --name redis05 -p 6375:6379 -p 16375:16379 \
-v /home/redis/node05/data:/data  \
-v /home/redis/node05/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.15 redis redis-server /etc/redis/redis.conf


docker run --name redis06 -p 6376:6379 -p 16376:16379 \
-v /home/redis/node06/data:/data \
-v /home/redis/node06/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.16 redis redis-server /etc/redis/redis.conf
④ 随便进入一个容器,并创建一个redis集群
docker exec -it redis01 /bin/bash
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

⑤ 进入集群,并查看集群信息
redis-cli -c cluster nodes

redis-cli -c cluster info 


⑥ 集群高可用测试

存入一个name值到redis集群中,查看

set k1 1

将对应的容器停掉
docker stop redis02
查看name值(集群搭建成功)
get k4

修复 
docker start redis02

若02想要回到一开始的主,声明一下即可 


期待您的关注~ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux操作系统】多线程控制(创建,等待,终止、分离)

目录 一、线程与轻量级进程的关系二、进程创建1.线程创建线程创建函数(pthread)查看和理解线程id主线程与其他线程之间的关系 三、线程等待(回收)四、线程退出线程退出情况线程退出方法 五、线程分离线程的优点线程的缺点 一、线程…

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失

问题 easycode插件生成的mapper.xml文件字段之间逗号丢失,如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…

Android 实现中英文切换

在开发海外项目的时候,需要实现app内部的中英文切换功能,所有的英文都是内置的,整体思路为: 创建一个sp对象,存储当前系统的语言类型,然后在BaseActivity中对语言进行判断; //公共Activitypubl…

11月 | Apache DolphinScheduler月度进展总结

各位热爱 Apache DolphinScheduler 的小伙伴们,社区10月份月报更新啦!这里将记录 DolphinScheduler 社区每月的重要更新,欢迎关注! 月度Merge之星 感谢以下小伙伴11月份为 Apache DolphinScheduler 所做的精彩贡献(排…

[软件开发幼稚指数评比]《软件方法》自测题解析010

第1章自测题 Part2 **9 [**单选题] 以下说法和其他三个最不类似的是: A)如果允许一次走两步,新手也能击败象棋大师 B)百米短跑比赛才10秒钟,不可能为每一秒做周密计划,凭感觉跑就是 C)即使是最好的足球队,也不能保证每…

【JavaWeb后端学习笔记】使用IDEA连接MySQL数据库

IDEA连接MySQL IDEA中集成了DataGrip,因此可以直接使用IDEA操作MySQL数据库。 1.创建一个新的空工程。点击右侧的数据库标志。 2.选择要连接的数据库。第一步:点击“”;第二步:点击 Data Source;第三步:选…

大模型分类2—按训练方式

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl根据训练方式,大模型可分为监督学习、无监督学习、自监督学习和强化学习大模型。 1. 监督学习大模型 1.1 定义与原理 监督学习大模型是一种机器学习范式,它依赖于标记数据集进行训练。这些数据…

鸿蒙特色实战2

服务卡片开发 创建服务卡片 创建一个新的工程后,可以通过如下方法进行创建服务卡片: 创建服务卡片包括如下两种方式: 选择模块(如entry模块)下的任意文件,单击菜单栏File > New > Service Widget创…

LCD1602液晶显示屏指令详解

文章目录 LCD1602液晶显示屏1.简介2. 液晶引脚说明3. 指令介绍3.1 清屏指令3.2 光标归位指令3.3 进入模式设置指令3.4 显示开关设置指令3.5 设定显示或光标移动方向指令3.6 功能设定指令3.7 设定CGRAM地址指令3.8 设定DDRAM地址指令3.9 读取忙或AC地址指令3.10 总图3.11 DDRAM …

Python毕业设计选题:基于大数据的旅游景区推荐系统_django

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页界面 用户注册界面 用户登录界面 景点信息界面 景点资讯界面 个人中心界面 …

引领素养教育行业,猿辅导素养课斩获“2024影响力教育品牌”奖项

近日,由教育界网、校长邦联合主办,鲸媒体、职教共创会协办的“第9届榜样教育年度盛典”评奖结果揭晓。据了解,此次评选共有近500家企业提交参评资料进行奖项角逐,历经教育界权威专家、资深教育从业者以及专业评审团队的多轮严格筛…

十七、监控与度量-Prometheus/Grafana/Actuator

文章目录 前言一、Spring Boot Actuator1. 简介2. 添加依赖2. 开启端点3. 暴露端点4. 总结 二、Prometheus1. 简介2. Prometheus客户端3. Prometheus服务端4. 总结 三、Grafana1. 简介2. Grafana安装3. Grafana配置 前言 系统监控‌ 在企业级的应用中,系统监控至关…

PHP语法学习(第六天)

💡依照惯例,回顾一下昨天讲的内容 PHP语法学习(第五天)主要讲了PHP中的常量和运算符的运用。 🔥 想要学习更多PHP语法相关内容点击“PHP专栏” 今天给大家讲课的角色是🍍菠萝吹雪,“我菠萝吹雪吹的不是雪,而…

关于遥感图像镶嵌后出现斑点情况的解决方案

把几张GF1的影像镶嵌在一起后,结果在Arcgis里出现了明显的斑点情况(在ENVI里显示则不会出现),个人觉得可能是斑点噪声问题,遂用Arcgis的滤波工具进行滤波处理,但由于该工具本身没有直接设置对多波段处理方式…

【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

单链表---合并两个链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 struct ListNode {int val;struct ListNode* next; }; w 方法一---不使用哨兵位 我们创建一个新链表用于合并两个升序链表, 将两个链表中最小的结点依次尾插到…

vue聊天对话语音消息播放动态特效

vue2写法&#xff0c;vue3也能用&#xff0c;粘之即走&#xff1a; 示例&#xff1a; <template><div class"voice-hidden"><divclass"voice-play-chat":class"[className, { animate-stop: !isPlaying }]"><div class&q…

深度学习7 梯度下降优化、过拟合、手机价格预测

三、BP算法 3、梯度下降 w w - lr * grad&#xff1a; w 表示权重&#xff0c;lr表示学习率&#xff0c;grad表示梯度 传统下降方式分三类&#xff1a;&#xff08;BGD&#xff09;批量梯度下降、&#xff08;MBGD&#xff09;小批量梯度下降、&#xff08;SGD&#xff09;随…

跑一下pyapp

文档&#xff1a;How-to - PyApp 首先没有rust要安装 安装 Rust - Rust 程序设计语言 查看是否安装成功 然后clone下pyapp https://github.com/ofek/pyapp/releases/latest/download/source.zip -OutFile pyapp-source.zip 进入目录中&#xff0c;cmd&#xff0c;设置环境…

Django模板系统

1.常用语法 Django模板中只需要记两种特殊符号&#xff1a; {{ }}和 {% %} {{ }}表示变量&#xff0c;在模板渲染的时候替换成值&#xff0c;{% %}表示逻辑相关的操作。 2.变量 {{ 变量名 }} 变量名由字母数字和下划线组成。 点&#xff08;.&#xff09;在模板语言中有…