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

71、docker网络

一、docker网络:

1.1、默认模式:

桥接模式 部署好docker服务,启动之后,就会创建一个虚拟网桥,docker0,这是一个虚拟网络设备,类似于交换机。

[root@docker1 ~]# ifconfig 
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255inet6 fe80::42:acff:fe8d:61a4  prefixlen 64  scopeid 0x20<link>ether 02:42:ac:8d:61:a4  txqueuelen 0  (Ethernet)RX packets 146  bytes 16410 (16.0 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 186  bytes 20291 (19.8 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

每一次运行容器之后,docker0就会从网段中分配一个ip地址给这个容器。

容器和主机之间的通信:通过桥接模式通信。

容器与容器之间通信:多个容器都在统一网段,都在统一网桥,可以通过自己的ip地址进行通信。

1.2、桥接模式

桥接模式:连接两个不同网络段的设备,共享通信的一种方式。

172.17. ------路由器------192.168.

基于mac地址转发数据帧。

当172.17-------------192.168 桥接设备查看目标的mac地址。

ARP广播。如果再mac地址表,桥接设备直接把数据帧转发目标的相应接口。

如果不在,ARP广播,所有接口都会收到数据报文,有则响应,无责丢弃。

桥接模式在物理和数据链路层上工作,学习和转发mac地址,用于局域网和内部网络的连接和扩展。

vethpair方式生成一个对应容器的虚拟网卡。

docker网桥是宿主机虚拟出来的,并不是真正的网络设备。外部是没有办法通过寻址找到的。

也是客户端是无法直接访问容器的ip地址。

如果希望外部网络能够访问,要通过端口映射容器的端口到宿主机。

桥接模式的宿主机和容器之间的端口映射,实际上是做了nat地址的转换,容器的私有ip映射到主机的ip上。

从而实现容器与外部网络的通信。隐藏了容器内部的真实ip地址。

内部之间通信数据帧转发

外部通信地址转换

#容器要保持一直运行,必须要指定有一个运行的程序。nginx镜像当中声明好了运行程序。

nginx -g ‘daemon off’ 保持nginx一直在后台运行。 itd 不加d,前台运行展示运行结果。加d,后台运行不展示运行结果。

1.3、docker基于桥接模式的网络类型:

1、host模式,容器不会虚拟出自己的网卡,也不会配置自己的ip。容器全部使用宿主机的ip和端口。

端口不重复的类型的应用,nginx http docker本身是单节点模式,使用与部署单个服务的应用程序。

1、创建host模式

[root@docker1 ~]# docker run -itd --name nginx1 --network host nginx:1.22  
[root@docker1 ~]# docker run -itd --name nginx2 --net=host nginx:1.22[root@docker1 ~]#  docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx1  ##查看容器ip地址
开启nginx2------发现端口占用
[root@docker1 ~]# docker run -itd --name nginx2 --net=host nginx:1.22
57f347225c6b1fda07ee541c88d4f529525d236ee7530fc10dcd2f2840453a2a
[root@docker1 ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED         STATUS         PORTS     NAMES
cc523653112e   nginx:1.22   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes             nginx1
[root@docker1 ~]# docker ps -a
CONTAINER ID   IMAGE        COMMAND                   CREATED          STATUS                      PORTS     NAMES
57f347225c6b   nginx:1.22   "/docker-entrypoint.…"   20 seconds ago   Exited (1) 17 seconds ago             nginx2
cc523653112e   nginx:1.22   "/docker-entrypoint.…"   4 minutes ago    Up 4 minutes                          nginx1

[root@docker1 ~]# docker logs -f nginx2 ##查看日志

在这里插入图片描述

2、container模式

container模式:容器和容器之间共用一个network namespace,不是和宿主机共享。

新创建的容器也不会有自己的网卡,配置自己的ip。

而是和一个容器共享ip端口,除了网络之外,其他的比如文件系统等等都是隔离的。

创建container容器网络
[root@docker1 ~]# docker rm -f nginx1   ##删除容器nginx1
[root@docker1 ~]# docker run -itd --name test1 centos:7 /bin/bash
[root@docker1 ~]#  docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test1
172.17.0.2
[root@docker1 ~]# docker run -itd --name test2 --net=container:test1 centos:7 /bin/bash
[root@docker1 ~]# docker inspect -f '{{.State.Pid}}' test1
26062
[root@docker1 ~]# docker inspect -f '{{.State.Pid}}' test2
26179[root@docker1 ~]# ls -l /proc/26062/ns
总用量 0
lrwxrwxrwx. 1 root root 0 8月  13 11:53 ipc -> ipc:[4026532581]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 mnt -> mnt:[4026532579]
lrwxrwxrwx. 1 root root 0 8月  13 11:16 net -> net:[4026532584]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 pid -> pid:[4026532582]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 uts -> uts:[4026532580]
[root@docker1 ~]# ls -l /proc/26179/ns
总用量 0
lrwxrwxrwx. 1 root root 0 8月  13 11:53 ipc -> ipc:[4026532654]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 mnt -> mnt:[4026532652]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 net -> net:[4026532584]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 pid -> pid:[4026532655]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 8月  13 11:53 uts -> uts:[4026532653]

在这里插入图片描述

3、none模式:

创建容器之后,容器有自己的网络命名空间,但是不会进行任何网络的配置。

没有网卡,没有ip,没有端口,只有本地lo回环网络,没有办法进行连网。网络是封闭的,一般是

[root@docker1 ~]# docker run -itd --name nginx1 --network none nginx:1.22
32058010ecfc44723d46dfccc862e7d94b5086418033cdd23e32205d936cc5fa
[root@docker1 ~]# docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx1

查看nginx1容器的信息

docker run -d --name a1 --network=none nginx:latest
docker ps -a
docker inspect a1  ##查看该容器的详细信息
"Gateway": ""
"IPAddress": "", 

4、自定义网络

自定义网络:和桥接模式一样,只不过我们可以自定义容器的网段和给新创建

[root@docker1 ~]# docker run -itd --name nginx1 --network brige --ip 172.17.0.5 nginx:1.22
c35e76bec84e3ae6dcc63acb37dc6eab1c3bc661d6063124a3bc0fa503e839c3
docker: Error response from daemon: network brige not found.

只有自定义网络可以在创建容器的时候指定ip地址

[root@docker1 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
3ed862dda9dc   bridge    bridge    local
2f233d494983   host      host      local
20b905123c24   none      null      local

创建自定义网络

[root@docker1 ~]# docker network create --subnet=172.111.0.0/16 mynetwork1 
978fd8c202ba023708ec0cd9be465aabe8814c123bc1a9ae2386b0cb986ba790
[root@docker1 ~]# docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
3ed862dda9dc   bridge       bridge    local
2f233d494983   host         host      local
978fd8c202ba   mynetwork1   bridge    local
20b905123c24   none         null      local

在这里插入图片描述

指定网卡名字
[root@docker1 ~]# docker network create --subnet=172.112.0.0/16 --opt "com.docker.network.bridge.name"="docker2" mynetwork2

在这里插入图片描述

[root@docker1 ~]# docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
3ed862dda9dc   bridge       bridge    local
2f233d494983   host         host      local
978fd8c202ba   mynetwork1   bridge    local
c87eba1e8cc7   mynetwork2   bridge    local
20b905123c24   none         null      local
根据自定义网络创建容器
[root@docker1 ~]# docker run -itd --name nginx5 --net mynetwork2 --ip 172.112.0.5 -p 88:80 nginx:1.22

总结:

1、docker的网络模式就是桥接模式

host 宿主机共享网络 常用

container 模式 容器之间共享

none模式 无网络模式,单机模式

自定义网络 只有自定义网络可以在创建容器的时候指定ip地址

①host模式---------------容器使用宿主机的网络直接公开服务

这意味着你在容器中运行一个web服务,那么它就直接绑定到主机的网络接口上,而不是通过docker进行任何网络转发

与宿主机共享网络名称空间

②container

这种模式允许容器去共享另一个容器网络命名空间,这说明两个容器可以相同的网络接口和iP地址,他们共享的是同一网络命名空间

多个容器之间共享一个net work namespace(命名空间)

③none---------- 是最简单的网络模式

此网络模式表示容器拥有自己的网络命名空间,但不会进行任何网络配置,这实际给了用户完全的自主权来给自己配置容器的网络

自闭空间 局域网

④ bridge------------- 默认的网络模式

每个新创建的容器都将该网络分配一个IP地址,此网络模式允许所有docker容器之间以及docker宿主机之间进行互相通信

默认模式 通过VETH对连接容器docker0网桥 、网桥分配给容器IP 、同时docker0作为局域网内容器的网关,最后与宿主机网卡进行通讯

⑤ user-defined network自定义

docker允许用户创建自己的定义的网络,用户可以定义的网络范围、子网、路由 等参数

这种类型网络使用用户可以更好地对容器网络进行控制和隔离

(业务需求:注:根据甲方指定或领导指定)
根据业务需求指定静态IP
容器都将该网络分配一个IP地址,此网络模式允许所有docker容器之间以及docker宿主机之间进行互相通信

默认模式 通过VETH对连接容器docker0网桥 、网桥分配给容器IP 、同时docker0作为局域网内容器的网关,最后与宿主机网卡进行通讯

⑤ user-defined network自定义

docker允许用户创建自己的定义的网络,用户可以定义的网络范围、子网、路由 等参数

这种类型网络使用用户可以更好地对容器网络进行控制和隔离

(业务需求:注:根据甲方指定或领导指定)
根据业务需求指定静态IP

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 白骑士的Matlab教学高级篇 3.1 高级编程技术
  • 聊聊场景及场景测试
  • [Meachines] [Medium] Haircut Curl命令注入+TRP00F自动化权限提升+Screen4.5.0权限提升
  • C语言类型转换的问题
  • 数据结构----队列
  • RabbitMq消息队列(缓存加速)
  • 登录过程记录
  • 讲解 狼人杀中的买单双是什么意思
  • php 在app中唤起微信app进行支付,并处理回调通知
  • mysql误删数据恢复记录
  • 判断 I2C 总线通信异常原因的方法2
  • HarmonyOS WebView
  • 学习STM32(6)-- STM32单片机ADCDAC的应用
  • NFS文件共享
  • Unity WebGL平台Hybrid Generate All报错undefined symbol sendfile
  • [PHP内核探索]PHP中的哈希表
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【css3】浏览器内核及其兼容性
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • angular组件开发
  • JavaScript HTML DOM
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java小白进阶笔记(3)-初级面向对象
  • k8s如何管理Pod
  • PHP变量
  • Redis 中的布隆过滤器
  • session共享问题解决方案
  • vue的全局变量和全局拦截请求器
  • 初探 Vue 生命周期和钩子函数
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 前端攻城师
  • 前端面试之CSS3新特性
  • 前言-如何学习区块链
  • 通过git安装npm私有模块
  • 用mpvue开发微信小程序
  • 在electron中实现跨域请求,无需更改服务器端设置
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #QT 笔记一
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (PADS学习)第二章:原理图绘制 第一部分
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (接口自动化)Python3操作MySQL数据库
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)JPA - JQPL 实现增删改查
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • . Flume面试题
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .env.development、.env.production、.env.staging
  • .htaccess配置常用技巧