Docker - 网络
Docker - 网络
理解Docker0
# 我们发现这个容器带来网卡,都是一对对的
# evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
# 正因为有了这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备的
# OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术[root@iZ2zeg7mctvft5renx1qvbZ ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:16:3e:39:7c:e6 brd ff:ff:ff:ff:ff:ffinet 172.29.161.223/20 brd 172.29.175.255 scope global dynamic eth0valid_lft 314947070sec preferred_lft 314947070secinet6 fe80::216:3eff:fe39:7ce6/64 scope linkvalid_lft forever preferred_lft forever
3: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 2a:54:48:d3:d8:27 brd ff:ff:ff:ff:ff:ff
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group defaultlink/ether 02:42:ff:42:50:72 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:ffff:fe42:5072/64 scope linkvalid_lft forever preferred_lft forever
106: veth366b832@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group defaultlink/ether da:67:68:de:a3:3e brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::d867:68ff:fede:a33e/64 scope linkvalid_lft forever preferred_lft forever
我们每启动一个docker容器,docker就会给docker容器分配一个,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!
容器和容器之间是可以通信的
容器删除,对应的网卡也会被删除
# 通过 inspect 命令可以查看到当前窗口的ip
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker inspect 70f3d34a8c4b
"Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "765ff8aa537de2525f0ef4a726c6e0445f29b650cace9f8288a714b6c3c33526","EndpointID": "ccaabe374f9fb28133823ae28e51847131be3f761a59a0cf78142a40462622e3","Gateway": "172.17.0.1","IPAddress": "172.17.0.4","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:04","DriverOpts": null}}
link
不建议使用
# 通过like进行连接
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker run -d -p 8090:8080 --name tomcat02 --link tomcat -v /home/build/tomcat/test/:/usr/local/apache-tomcat-9.0.82/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.82/logs registry.cn-beijing.aliyuncs.com/am98/tomcat:1.0# 测试网络是否能连通【单向绑定】
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat ping tomcat02
ping: tomcat02: Name or service not known
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat02 ping tomcat
PING tomcat (172.17.0.2) 56(84) bytes of data.
64 bytes from tomcat (172.17.0.2): icmp_seq=1 ttl=64 time=0.096 ms
64 bytes from tomcat (172.17.0.2): icmp_seq=2 ttl=64 time=0.066 ms# 查看hosts文件,link命令只是在hosts文件中进行了映射配置
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat02 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 tomcat 9f9cdd3c8b02
172.17.0.4 70f3d34a8c4b
自定义网络
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
765ff8aa537d bridge bridge local
7a933a7d4db8 host host local
e2d2897222d8 none null local网络模式
bridge: 连接 docker (默认,自己搭建也使用bridge模式)
host: 不配置网络
none: 和宿主机共享网络
container: 容器网络连通!(用的少!局限很大)# 查看docker network命令
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network --help
Usage: docker network COMMAND
Manage networks
Commands:connect Connect a container to a networkcreate Create a networkdisconnect Disconnect a container from a networkinspect Display detailed information on one or more networksls List networksprune Remove all unused networksrm Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.
测试
# 我们直接启动命令 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat# docker0特点,默认,域名不能访问, --like可以打通连接# 我们可以自定义一个网络
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
94ab82cab2caaea17be29c3de0f5d96cee2ee2f0342e14869558c6867cfecb97
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
765ff8aa537d bridge bridge local
7a933a7d4db8 host host local
94ab82cab2ca mynet bridge local
e2d2897222d8 none null local
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network inspect mynet
[{"Name": "mynet","Id": "94ab82cab2caaea17be29c3de0f5d96cee2ee2f0342e14869558c6867cfecb97","Created": "2023-11-14T11:17:28.325534784+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "192.168.0.0/16","Gateway": "192.168.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
使用自定义网络启动容器并测试
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker run -d -p 8080:8080 --name tomcat01 --net mynet -v /home/build/tomcat/test/:/usr/local/apache-tomcat-9.0.82/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.82/logs registry.cn-beijing.aliyuncs.com/am98/tomcat:1.0
aaead7a414095b60c6db460020213332808e74e91453e848daa31f235ee31548
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker run -d -p 8081:8080 --name tomcat02 --net mynet -v /home/build/tomcat/test/:/usr/local/apache-tomcat-9.0.82/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.82/logs registry.cn-beijing.aliyuncs.com/am98/tomcat:1.0
42e75fb1cd57a66fe8dde474f530b8134d1578fb7846d806831852719af54f73# 通过 ip 容器名 均可ping通
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat02 ping tomcat01
PING tomcat01 (192.168.0.2) 56(84) bytes of data.
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat01 ping tomcat02
PING tomcat02 (192.168.0.3) 56(84) bytes of data.
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.098 ms
网络连通
网络与网络之间进行打通 【mynet与net网络之间的容器进行连接】
# 官方:一个容器两个IP
# 有点类似于 阿里云 内网IP与外网IP[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker run -d -p 8082:8080 --name tomcat03 -v /home/build/tomcat/test/:/usr/local/apache-tomcat-9.0.82/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.82/logs registry.cn-beijing.aliyuncs.com/am98/tomcat:1.0
fc84c14688ffef862a0fbc2d5ff7d5c4fadffc1be6be2e91a9e858af333e57d1
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat03 ping tomcat02
ping: tomcat02: Name or service not known# 网络连通后再测试
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network connect mynet tomcat03
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it tomcat03 ping tomcat02
PING tomcat02 (192.168.0.3) 56(84) bytes of data.
部署 Redis 集群
# 创建 redis 集群的网络
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker network create --driver bridge --subnet 192.169.0.0/16 --gateway 192.169.0.1 redis# 创建配置文件
for port in $(seq 2 7); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/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.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done# 创建 redis 容器
for port in $(seq 2 7); \
do \
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} -v /mydata/redis/node-${port}/data:/data -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 192.169.0.${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done# 进入容器
[root@iZ2zeg7mctvft5renx1qvbZ ~]# docker exec -it redis-2 /bin/sh# 创建集群
/data # redis-cli --cluster create 192.169.0.2:6379 192.169.0.3:6379 192.169.0.4:6379 192.169.0.5:6379 192.169.0.6:6379 192.169.0.7:6379 --cluster-replicas 1# 连接集群
/data # redis-cli -c# 查看集群信息
/data # cluster info# 查看集群节点
/data # cluster node
SpringBoot 发布镜像
# 1.将项目打包成jar
springbootDocker-0.0.1-SNAPSHOT.jar# 2.Dockerfile 文件编写
FROM openjdk:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]# 3.上传至服务器发布镜像
[root@iZ2zeg7mctvft5renx1qvbZ boot]# docker build -t boot .
[+] Building 2.5s (7/7) FINISHED# 4.运行镜像容器并访问
[root@iZ2zeg7mctvft5renx1qvbZ boot]# docker run -d -P boot boot
3342e5bef35c31fd1783956325ae9fe246547278d6e198bf1d43cf1e8944963f
[root@iZ2zeg7mctvft5renx1qvbZ boot]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
3342e5bef35c boot "java -jar /app.jar …" 3 seconds ago Up 3 seconds 0.0.0.0:32771->8080/tcp, :::32771->8080/tcp
[root@iZ2zeg7mctvft5renx1qvbZ boot]# curl localhost:32771/hello
Hello Docker !
相关文章:

Docker - 网络
Docker - 网络 理解Docker0 # 我们发现这个容器带来网卡,都是一对对的 # evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连 # 正因为有了这个特性,evth-pair 充当一个桥梁࿰…...

vue、react中虚拟的dom
React中虚拟DOM的例子: 下面是一个使用React创建的简单的计数器组件: import React, { Component } from react;class Counter extends Component {constructor(props) {super(props);this.state {count: 0};}handleClick () > {this.setState({c…...

Elasticsearch:ES|QL 快速入门
警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新发行版为 Elastic Stack 8.11。 Elasticsearch 查询语言 (ES|QL) 提供了一种强…...

7-1 进步排行榜
7-1 进步排行榜 分数 10 作者 黄龙军 单位 绍兴文理学院 假设每个学生信息包括“用户名”、“进步总数”和“解题总数”。解题进步排行榜中,按“进步总数”及“解题总数”生成排行榜。要求先输入n个学生的信息;然后按“进步总数”降序排列;若…...

解决删除QT后Qt VS Tools中Qt Options中未删除的错误
在Qt VS Tools的Qt Options已经配置好Qt Versions后如果删除QT程序之后会出现Default Qt/Win version任然存在,这是如果再添加一个话就不能出现重名了,如果新建一个其他名字的话其实在vs中还是不能正常运行qt,会出现点击ui文件vs会无故重启或…...

Django(五、视图层)
文章目录 一、视图层1.视图函数返回值的问题2.三板斧的使用结论:在视图文件中写视图函数的时候不能没有返回值,默认返回的是None,但是页面上会报错,用来处理请求的视图函数都必须返回httpResponse对象。 二、JsonReponse序列化类的…...

Git 工作流程、工作区、暂存区和版本库
目录 Git 工作流程 Git 工作区、暂存区和版本库 基本概念 Git 工作流程 本章节我们将为大家介绍 Git 的工作流程。 一般工作流程如下: 克隆 Git 资源作为工作目录。在克隆的资源上添加或修改文件。 如果其他人修改了,你可以更新资源。在提交前查看…...

PLSQL使用技巧
欲善其事,必先利其器,最近研究了一下各种编程工具的使用,发掘了不少新功能,能够大大提升我们日常的工作效率,下面是转载的一篇PLSQL使用技巧,个人感觉很有用,分享一下。 1、PL/SQL Developer记…...

DEC 深度编码聚类函数
2. 辅助目标函数 要使用输入 (bt, groups, embed_dim) 计算 DEC 模型的目标分布,关键部分是使用软分配 q ,其形状为 (bt, groups, max_cluster) 。这里, max_cluster 是您要定位的集群数量。当您沿该维度执行聚类时,需要跨 group…...

ubuntu中cuda12.1配置(之前存在11.1版本的cuda)(同时配置两个版本)
ubuntu中cuda12.1配置 由于YOLOv8项目中Pytorch版本需要cuda12.1版本 在官网下载12.1版本的deb包 官网地址 sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda然后需要修改bashrc文件(隐藏文件) 添加 exp…...

千兆路由只有200M,原来是模式选择不对,也找到了内网不能通过动态域名访问内部服务的原因
本来1000M的宽带接入的,但是一测试发现只有200M,把电信叼了过来, 一测试发现宽带没问题,网线正常,网卡正常,只有可能是路由器的问题了,尴尬了,赶紧给满意好评放他走。回头好好研究一…...

【10】maven打包报错 spring-boot-maven-plugin 与spring-boot 版本的不一致
报错信息 org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 解决方法 是因为pring-boot-mav…...

SQLAlchemy 在 Flask 应用中的使用和最佳实践
SQLAlchemy 在 Flask 应用中的使用和最佳实践 [TOC](SQLAlchemy 在 Flask 应用中的使用和最佳实践) 模型的编写**SQLAlchemy 中建立关联****利用 SQLAlchemy 中的关联进行查询****实现示例** backref与back_populates?**backref反向引用****back_populates后填充** …...

FineReport -问题学习图表设计图表类型-单元格扩展父子格-报表预览
1,问:为什么本地每次预览都要填帐号密码?答:模板认证关闭一下及可 2.单元格扩展与父子格----左父格-扩展方向-箭头往那个方向就往那个方向 1)数据集参数 在定义数据集时,通过使用if函数判断参数的值是否为空,若为空就不过滤参数,若不为空就进行参数过滤。SELECT * FROM…...

微信小程序广告banner、滚动屏怎么做?
使用滑块视图容器swiper和swiper-item可以制作滚动屏,代码如下: wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…...

Network(一)计算机网络介绍
一 计算机网络 1 概述 什么是计算机网络? 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统,应用软件,应用程序通过通信线路互连 实现资源共享、信息传递、增加可靠性、提高系统处理能力 2 网络与云计算 3 计算机网…...

【数据结构】堆(Heap):堆的实现、堆排序、TOP-K问题
目录 堆的概念及结构 编辑 堆的实现 实现堆的接口 堆的初始化 堆的打印 堆的销毁 获取最顶的根数据 交换 堆的插入(插入最后) 向上调整(这次用的是小堆) 堆的删除(删除根) 向下调整(这次用的…...

保护数字前沿:下一代防火墙如何塑造网络安全的未来
下一代防火墙通过提供先进的威胁检测、精细控制和云安全功能,正在重塑网络安全的未来。随着数字环境的不断发展,组织必须采用这些创新解决方案来保护其数字资产并维护安全的数字前沿。 在当今互联的世界中,网络威胁变得越来越复杂,…...

深入理解Java中的String.join方法
在 Java 编程中,字符串操作是非常常见的需求。在 Java 8 中引入了一个方便的字符串连接方法 String.join,它能够简洁而高效地将多个字符串连接起来。本篇博客将深入介绍 String.join 方法的使用和原理。 什么是String.join方法? String.join…...

【MySQL系列】 第三章 · 函数
写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正࿰…...

微信小程序wxss定位/选择/查找元素的几种方式
wxss定位、选择、查找元素的几种方式与css类似,下面介绍常用的几种: 选择器样例样例描述.class.intro选择所有拥有 class"intro" 的组件#id#firstname选择拥有 id"firstname" 的组件elementview选择所有 view 组件element, element…...

Canvas—从入门到案例实现
文章目录 Canvas—从入门到案例实现一、设置canvas环境1.1 <canvas>元素1.2 渲染上下文context 二、形状与路径的绘制2.1 形状绘制2.2 路径绘制2.3 绘制一个笑脸 三、使用样式和颜色四、绘制文本五、使用图像5.1 图片源5.2 获取页面内的图片5.3 缩放Scaling5.4 切片Slici…...

飞书开发学习笔记(六)-网页应用免登
飞书开发学习笔记(六)-网页应用免登 一.上一例的问题修正 在上一例中,飞书登录查看网页的界面显示是有误的,看了代码,理论上登录成功之后,应该显示用户名等信息。 最后的res.nickName是用户名,res.i18nName.en_us是英…...

【ROS】Nav2源码下载、编译、运行
【ROS】郭老二博文之:ROS目录 1、源码下载 1.1 源码地址 https://github.com/ros-planning/navigation2 1.2 创建工程目录 ROS2使用目录结果来管理项目,因此在下载前需要创建好目录结构: mkdir -p ~/git/nav2/src1.3 下载 git中默认版本是main。本人的开发环境为Ubun…...

微信小程序 30分钟倒计时功能
ps:凑个数 getTimeDiff(date) {let _this = this;let curTime = new Date(date)_this.countDown(_this.timeFormatConvert(new Date(curTime.setMinutes(curTime.getMinutes() + 30))))},timeFormatConvert(e) {const Y = e.getFullYear(); // 年const M = this.prefixZero(e.…...

JAVA判断指定日期是否在指定的时间段内
参考文献: Java语言判断当前时间在时间范围内_java判断时间区间-CSDN博客 package com.itheima.method2;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;public class DateTest {public static voi…...

关于晋升与跳槽的一些思考
内部晋升 内部晋升是我优先考虑的,原因有很多。首先这是一个新业务,相对而言容易拿到结果。其次我想体验不同的晋升路径,内部晋升答辩,是挑战也是一次成长的机会,是一次他人帮助自己review的机会。作为从校园出来的校…...

url找不到404的问题,url被拼接
今天遇到一个测试feign调用的功能,如图所示 先说结论 Controller换成RestController 将日志设置为debug模式 被DispatcherServlet FORWARD了 找到路径 对属性设置断点,看下是哪注进来的 我们再去找encodedPath 此处是undertow的源码,但是und…...

如何解决golang开发中遇到的报错:checksum mismatch downloaded
问题描述 如题,项目开发中遇到如下报错(你的报错信息可能与我的有一点区别,如verifying的包名,但是问题本质都是一样的): verifying github.com/algorand/go-codec/codecv1.1.8/go.mod: checksum mismatc…...

4.以docker容器生成镜像推送到阿里云镜像仓库
1.开通阿里云镜像仓库 1.1 登录阿里云,访问容器镜像服务。地址如下: https://cr.console.aliyun.com/cn-shanghai/instances 1.2 个人学习为例,创建个人版实例 1.2.1 点击个人实例 1.2.2 .创建个人实例 1.2.3 创建完成后,设置…...