当前位置: 首页 > news >正文

Docker网络基础

一、Docker网络基础

        1.docker安装后会自动创建3中网络,分别为bridge  host  none

            docker network ls

                

        2.docker原生bridge网络:

                docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口

                bridge模式下没有公有ip,只有宿主机可以直接访问,外部主机不可见,容器通过宿主机的nat规则后可以访问外网

        

        3.docker原生网络host:

                host网络模式需要在创建容器时指定:--network=host

                host模式可以让容器共享宿主机的网络栈,这样的好处时外部主机与容器直接通信,但是容器的网络缺少隔离性。

                

                如果共用一个网络则所有的网络资源都是公用的,比如启动nginx容器则真实主机的80端口也会被占用,在启动第二个nginx容器就会失败

        4.docker原生网络none:

                none模式是禁用网络功能,只有lo接口,在容器创建时指定:--network=none

        

        5.docker的自定义网络:

                三种自定义网络驱动:bridge  overlay  macvlan

                bridge驱动类似默认的bridge模式,overlay和macvlan是用于创建跨主机网络

        6.自定义桥接网络:

                在建立自定义网络时,默认使用桥接模式

                docker network create my_net1

                docker network ls

                ​​​​​​​              

                桥接支持自定义子网和网关:

                docker network  create  my_net2  --subnet  192.168.0.0/24  --gateway 192.168.0.100

        7.为什么要自定义桥接:

                docker引擎在分配ip时根据容器启动顺序分配,谁先启动谁用,多容器互访使用ip很显然不靠谱,多容器访问一般使用容器名字访问会更加稳定,docker原生网络不支持dns解析,自定义网络中内嵌了dns。

[root@docker ~]# docker run -d --network my_net1 --name web nginx
d9ed01850f7aae35eb1ca3e2c73ff2f83d13c255d4f68416a39949ebb8ec699f
[root@docker ~]# docker run -it --network my_net1 --name test busybox
/ # ping web
PING web (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.197 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.096 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.087 ms

        注:不同的自定义网络是不能通讯

        8.如何使不同的自定义网络进行互通:

                

                

[root@docker ~]# docker run -d --name web1 --network my_net1 nginx
[root@docker ~]# docker run -it --name test --network my_net2 busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:00:01
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5244 (5.1 KiB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2): 56 data bytes

                执行:docker network connect  my_net1 test,这段命令的作用使将test容器加入网络eth1

        9.joined容器网络:

                joined容器是一种特别的网络模式,在容器创建时使用--network=container:vm1指定,vm指定的是运行的容器名。

                这种模式下,docker容器会共享同一个网络栈,这两个容器之间可以localhost快速通信

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

                利用容器部署phpadmin管理mysql:   

#运行phpmysqladmin
docker run -d --name mysqladmin  --network my_net1  -e PMA-ARBITRARY=1 -p 80:80 phpadmin:latest#运行数据库
docker run -d --name mysql  -e MYSQL_ROOT_PASSWORD='test' --network container:mysqladmin  mysql:5.7
#表示把数据库容器添加到phpadmin容器中

        10.容器内外网的访问:

                

        

               通过docker-proxy对数据包进行内转:docker run -d --name webserver  -p 80:80 nginx

        11.docker跨主机网络:

                在生产环境,容器不可能都在同一个系统中,需要容器具有跨主机通信的能力

                跨主机网络的解决方案:

                docker 原生的overlay和macvlan

                第三方的flannel  weave  calico

        12.macvlan网络方式实现跨主机通信

                macvlan网络方式:

                容器的接口直接和主机网卡连接,无需nat和端口映射

                macvlan独占主机网卡,但可以使用vlan子接口实现实现多mavlan网络

                vlan可以将物理二层网络划分为多个逻辑网络,彼此隔离,vlanid取值为1-4094

                macvlan网络间的隔离和连通:

                macvaln网络在二层上时隔离的,不同macvlan网络的容器是无法通信

                可以在三层上通过网关将macvlan网络连通

          实现方式:

                

        eth1需要在vmware中设定为仅主机模式

                添加macvlan网络:

        ​​​​​​​        ​​​​​​​        

                测试:       

        

http://www.lryc.cn/news/531577.html

相关文章:

  • 重新刷题求职2-DAY2
  • [STM32 标准库]EXTI应用场景 功能框图 寄存器
  • Slint的学习
  • STM32 DMA+AD多通道
  • 如何构建ObjC语言编译环境?构建无比简洁的clang编译ObjC环境?Windows搭建Swift语言编译环境?
  • 【C语言】指针详解:概念、类型与解引用
  • VoIP中常见术语
  • 360嵌入式开发面试题及参考答案
  • 物理群晖SA6400核显直通win10虚拟机(VMM)
  • 【NLP 20、Encoding编码 和 Embedding嵌入】
  • 雷赛LC2000
  • ESP32开发工具介绍:Thonny——初学者的MicroPython利器
  • 【Go语言圣经】第六节:方法
  • 【Leetcode刷题记录】45. 跳跃游戏 II--贪心算法
  • mysql_init和mysql_real_connect的形象化认识
  • Qt网络相关
  • deepseek接入pycharm 进行AI编程
  • Verilog基础(三):过程
  • 生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (上)
  • .Net WebAPI -[HttpPut(“{fileServiceId:int}“)]
  • [EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型
  • C基础寒假练习(7)
  • Ajax:重塑Web交互体验的人性化探索
  • 【DeepSeek背后的技术】系列二:大模型知识蒸馏(Knowledge Distillation)
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.14 内存映射:处理超大型数组的终极方案
  • 【C++】STL——vector的使用
  • springboot/ssm互联网智慧医院体检平台web健康体检管理系统Java代码编写
  • 介绍一下Mybatis的Executor执行器
  • Wide Deep 模型:记忆能力与泛化能力
  • Hot100之矩阵