docker自定义网络实现容器之间的通信

Background

  • docker原理
  • docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问。
  • docker核心三大组件:image–镜像、container-容器、 repository-仓库。
  • docker使用的cpu、内存以及系统内核等资源都是直接使用宿主物理机的硬件,所以docker的性能比虚拟机高。
  • docker容器的本质是宿主机上的一个进程。通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。
  • docker可以对哪些资源进行隔离:1、文件系统;2、网络(network);3、进程间的通信;4、针对权限的用户和用户组;5、进程内的pid和宿主机的pid;6、主机名与域名等。
  • docker网络

Docker是一种轻量级容器化技术,允许通过隔离OS级的虚拟化方式在一个操作系统上运行多个应用。网络是Docker中的一个非常重要的组件,它允许容器之间进行通信和联网访问。本文主要介绍Docker网络的基础知识以及在容器化部署java程序时的应用

1、docker网络类型

docker网络有三个基本要素:网络类型、网络驱动和网络配置。

  • bridge
    这个是默认的网络类型,建立在宿主机的网络接口之上。
  • host
    这种网络类型,直接使用宿主机的网络栈,容器和宿主机共享网络栈。
  • overlay
    这种网络类型可以跨越多个Docker守护进程,通过内置的DNS服务,允许容器之间跨主机进行通信。
  • macvlan
    这种方式可以让容器拥有自己的MAC地址,从而可以直接与物理网络中的设备进行通信。
    适用环境:希望容器能够直接与物理网络接口进行通信,或希望每个容器具有独立的 IP 地址的场景。
    创建方法:使用 docker network create 命令并选择 --driver macvlan 参数来创建 Macvlan 网络。

Macvlan是一个新的尝试,是真正的网络虚拟化技术的转折点。Linux实现非常轻量级,因为与传统的Linux Bridge隔离相比,它们只是简单地与一个Linux以太网接口或子接口相关联,以实现网络之间的分离和与物理网络的连接。

Macvlan提供了许多独特的功能,并有充足的空间进一步创新与各种模式。这些方法的两个高级优点是绕过Linux网桥的正面性能以及移动部件少的简单性。删除传统上驻留在Docker主机NIC和容器接口之间的网桥留下了一个非常简单的设置,包括容器接口,直接连接到Docker主机接口。由于在这些情况下没有端口映射,因此可以轻松访问外部服务。

  • 创建MACVLAN网络:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-network
  • 在MACVLAN网络上启动容器:
docker run -d --name my-container --network my-macvlan-network my-image

2、docker网络驱动

docker支持多种网络驱动程序,每种网络驱动的实现方式都不同。下面列出了docker支持的网络驱动程序。

1、bridge驱动:此驱动为docker的默认设置,docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。但与外界通信使用NAT,增加了通信的复杂性,在复杂场景下使用会有诸多限制。每个容器启动后会通过DHCP自动获取一个IP地址,容器间可以通过 IP 地址相互通信,但是容器重启IP会发生变化。

2、host驱动:使用这种驱动的时候,Docker容器和宿主机共用同一个network namespace,使用宿主机的网卡、IP和端口等信息。但是,容器其他方面,如文件系统、进程列表等还是和宿主机隔离的。host模式不存在虚拟化网络带来的额外性能负担。但是host驱动也降低了容器与容器之间、容器与宿主机之间网络层面的隔离性,引起网络资源的竞争与冲突。容器的网络配置与宿主机相同,可以通过宿主机的 IP 地址直接访问容器

3、overlay驱动:此驱动采用IETF标准的VXLAN方式,并且是VXLAN中被普遍认为最适合大规模的云计算虚拟化环境的SDN controller模式。在使用的过程中,需要一个额外的配置存储服务, 还需要在启动docker daemon的的时候额外添加参数来指定所使用的配置存储服务地址。overlay指的就是在物理网络层上再搭建一层网络,通过某种技术再构建一张相同的逻辑网络。需要互相通信的容器链接到相同的逻辑网络就可以通过容器名称互相通信

4、remote驱动:这个驱动实际上并未做真正的网络服务实现,而是调用了用户自行实现的网络驱动插件,使libnetwork实现了驱动的可插件化。

5、null驱动:使用这种驱动的时候,Docker容器拥有自己的network namespace,但是并不为Docker容器进行任何网络配置。也就是说,这个Docker容器除了network namespace自带的loopback网卡外,没有其他任何网卡、IP、路由等信息,需要用户为Docker容器添加网卡、配置IP等。这种模式如果不进行特定的配置是无法正常使用的,但是优点也非常明显,它给了用户最大的自由度来自定义容器的网络环境。

每个网络类型都具有自己的特点和适用场景,根据实际需求选择合适的网络创建方法非常重要。此外,还有其他网络驱动和网络插件可供选择,以满足不同环境的需求,例如 Calico、Weave 等。

3、docker网络配置

docker网络配置官方文档:https://docs.docker.com/reference/cli/docker/network

  • docker安装后会自动创建3种网络:bridge、host、none
# 查看命令
docker network ls

在这里插入图片描述

  • 创建一个自定义的Docker网络
docker network create yunlu

在这里插入图片描述

  • 将容器连接到一个已存在的Docker网络
# 第一种方式,my-container容器已经启动了
docker network connect yunlu my-container
# 第二种方式,my-container容器启动时通过 `--network yunlu` 或 `--net=yunlu`连接自定义网络
docker run -d --restart=always --name my-container --network yunlu -p 8080:8080 -v $(pwd):/app -w /app yunlu/openjdk:1.8-alpine java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -Dspring.config.location=/app/application.yml -jar /app/app.jar
  • 查看一个Docker网络的详细信息
docker network inspect yunlu
  • 查看一个Docker网络下的所有容器
docker network inspect --format='{{.Containers}}' yunlu
  • 删除一个已存在的Docker网络
docker network rm yunlu

4、docker容器网络配置

我们可以在容器启动时通过 --network yunlu--net=yunlu连接自定义网络。bridge 网络是 docker 默认的网络类型,当创建容器时,如果不指定网络类型,则会自动创建一个桥接网络并将容器连接到该网络上。

在这里插入图片描述

  1. 查看某个容器的网络信息
# 第一种方式
docker inspect my-container | grep "NetworkMode"
# 第二种方式
docker inspect --format='{{.HostConfig.NetworkMode}}' my-container

5、容器化部署java程序

实现目标

容器化部署一个java程序huhang-server,该程序用到mysql、redis等服务,这些服务也是采用容器化部署。

两种实现思路
  1. huhang-server部署时网络使用host模式,mysql、redis等服务容器化部署时把所需端口映射出来供huhang-server使用;
  2. 使用自定义网络模式,先创建一个自定义网络yunlu,然后mysql、redis等服务所有容器都加入自定义网络yunlu,huhang-server也加入自定义网络yunlu,然后通过容器名称去访问mysql、redis等服务。
容器化部署java程序的两种方式:
  1. 对于一些简单的单体项目,可以使用 docker run 命令可以直接在命令行中运行容器,无需事先构建镜像;
  2. 如果项目较为复杂,涉及多个组件和配置,或者需要在不同环境中部署,建议使用 Dockerfile 构建自定义镜像。这样可以更好地管理和复用代码,并确保在不同环境中的一致性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab/simulink光伏发电的扰动观察法MPPT仿真(持续更新)

1.光伏发电的电导增量法MPPT仿真 2.光伏发电的恒定电压法MPPT仿真 3.光伏发电的扰动观察法MPPT仿真 4.光伏发电的占空比法MPPT仿真 5.基于神经网络的MPPT光伏发电仿真 6. 基于模糊控制的MPPT光伏发电仿真 7. 基于粒子群算法(PSO)的500w光伏系统MPPT控…

【自然语言处理-二-attention注意力 是什么】

自然语言处理二-attention 注意力机制 自然语言处理二-attention 注意力记忆能力回顾下RNN(也包括LSTM GRU)解决memory问题改进后基于attention注意力的modelmatch操作softmax操作softmax值与hidder layer的值做weight sum 计算和将计算出来的和作为memo…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具,页面设计工具的发展从来没有停滞过, Axure,无论是国产设计工具即时设计,其功能都在不断更新迭代,为设计带来更高效的设计体验。今天对比两个设计工具,帮你找到最适合自己的&#xf…

二百二十四、Kettle——曲线实现从Hive插入更新到ClickHouse(分区字段是month或year)

一、目的 对于以month、year为分区字段的数据,不是像day字段分区那样每天增量插入更新即可,而是要以部分字段查询、部分字段更新,但是ClickHouse数据库并不适合更新操作,直接使用Kettle的插入更新控件会导致问题,必须…

osg qt5.15 osg3.6.3 osgEarth3.1 编译爬山

Demo演示:Qt5.15.2OSG3.6.3OsgEarth3.1的QtCreator下的msvc2019x64版本 osgQt编译 步骤一:下载解压 步骤二:CMake配置 步骤三:CMake配置添加osg环境 步骤四:CMake配置添加Qt环境 步骤五:CMake修改CMakeLis…

《TCP/IP详解 卷一》第4章 地址解析协议ARP

目录 4.1 引言 4.2 一个例子 4.3 ARP缓存 4.4 ARP帧格式 4.5 ARP例子 4.6 ARP缓存超时 4.7 代理ARP 4.8 免费ARP和地址冲突检测 4.9 ARP命令 4.10 使用ARP设置嵌入式设备IPv4地址 4.11 与ARP相关攻击 4.12 总结 4.1 引言 地址解析: IPv4:AR…

《TCP/IP详解 卷一》第6章 DHCP

目录 6.1 引言 6.2 DHCP 6.2.1 地址池和租用 6.2.2 DHCP和BOOTP消息格式 6.2.3 DHCP和BOOTP选项 6.2.4 DHCP协议操作 6.2.5 DHCPv6 6.2.6 DCHP中继 6.2.7 DHCP认证 6.2.8 重新配置扩展 6.2.9 快速确认 6.2.10 位置信息(LCI和LoST) 6.2.11 移…

外包干了3个月,技术退步明显

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

git使用记录

1.使用 "git reset --hard 版本号"的方式回退版本号会覆盖从当前版本到回退版本之间的版本号,为避免这种情况,可以用"git revert -n 版本号"指令,具体看:https://blog.csdn.net/L1147484597/article/details/…

MYSQL-入门

一.安装和连接 1.1 安装 mysql安装教程: 2021MySql-8.0.26安装详细教程(保姆级)_2021mysql-8.0.26安装详细教程(保姆级)_mysql8.0.26_ylb呀的博客-cs-CSDN博客 workbench安装: MySQL Workbench 安装及使用-CSDN博客 1.2 配…

古天乐演唱会内涵梅西,郑中基助阵,网友狂赞。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 梅西的香港之行虽已落幕,但他对中国球迷造成的伤害…

MybatisPlus--03--IService、ServiceImpl

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1. IService接口1.1 IService、ServiceImpl 接口的使用第一步:实现basemapper接口第二步:编写service类第三步:编写serviceImpl第…

5个精美的wordpress中文企业主题模板

元宇宙WordPress主题模板 简洁大气的元宇宙 Metaverse WordPress主题模板,适合元宇宙行业的企业官网使用。 https://www.jianzhanpress.com/?p3292 职业技术培训WordPress主题模板 简洁大气的职业技术培训WordPress主题,适合用于搭建教育培训公司官方…

【动态规划】【前缀和】【推荐】2463. 最小移动总距离

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 本文涉及知识点 动态规划汇总 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 2463. 最小移动总距离 X 轴上有一些机器人和工厂。给你一个整数数组 robot &#xff0c…

Vue学习之计算属性

模板中的表达式虽然方便,但也只能用来做简单的操作。如果在模板中写太多逻辑,会让模板变得臃肿,难以维护。比如说,我们有这样一个包含嵌套数组的对象: const author reactive({name: John Doe,books: [Vue 2 - Advan…

mysql-MVCC

一、基础概念 1. MVCC的含义 MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它是通过读取某个时间点的快照数据, 来降低并发事务冲突而引起的锁等待, 从而提高并发性能的一种机制. MVCC 的实现,是通过保存数据…

危险!Wyze 摄像头安全漏洞致1.3万用户隐私遭窥探

最近,一则关于 Wyze 摄像头再次出现安全漏洞的新闻引起了人们的广泛关注。据报道,该安全漏洞导致约1.3万用户的摄像头受到了未经授权的访问,使得这些用户的隐私信息遭到了窥视。这一事件再次引发了人们对网络安全的关注和讨论。 网络安全不仅…

2024最强秋招八股文(精简、纯手打)

7/28日已更新,错误已修改~~~有错误的地方,欢迎大家留言! 目录 一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMap怎么办? 7.ConcurrentHa…

基于Java+SpringBoot+Vue前后端分离棋牌室管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容:SpringBoot、Vue、SSM、HLM…

【Docker】初学者 Docker 基础操作指南:从拉取镜像到运行、停止、删除容器

在现代软件开发和部署中,容器化技术已经成为一种常见的方式,它能够提供一种轻量级、可移植和可扩展的应用程序打包和部署解决方案。Docker 是目前最流行的容器化平台之一,它提供了一整套工具和技术,使得容器的创建、运行和管理变得…