Dcoker网络

Docker网络

一、桥接模式(默认)

1、概念

桥接模式:部署好docker服务,启动之后,创建一个虚拟网桥(docker0),docker0是一个虚拟的网络设备,类似于交换机。每一次运行容器之后,docker就会从网段当中分配一个ip地址给这个容器。

bash 复制代码
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名    # 查看虚拟ip地址

2、通信模式

不同网段:桥接模式(容器与主机)进行通信

同一网段:ip地址(容器和容器)进行通信

3、桥接工作模式

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

例如:172.17 ------路由器------192.168 # 基于mac地址转发数据帧

​ 当172.17这个网段访问192.168这个网段时

(1)桥接设备查看目标的mac地址

(2)APR广播。如果在mac地址表,桥接设备直接把数据帧转发目标的相应接口,如果不在,ARP广播,所有接口都会收到数据报文,有则响应,无则丢弃。

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

(4)虚拟网卡。vetpair 方式生成一个对应的容器的虚拟网卡(ifconfig查看)

(5)docker虚拟网桥。docker网桥是宿主机虚拟出来的,并没有真的网络设备,外部是没有办法通过寻址找到的,即客户端是无法直接访问容器的ip地址,如果希望外部网络能够访问,要通过映射容器的端口到宿主机。

注意:容器要保持一直运行,必须要指定有一个运行的程序。以nginx容器为例,nginx镜像当中声明好了运行程序,保持nginx一直在后台运行,不加d,则前台运行展示运行结果。

bash 复制代码
nginx -g "daemon off"

4、端口映射(nat)

桥接模式的宿主机和容器之间的端口映射,实际上是做了nat地址转换,容器的私有ip映射到主机的ip上,从而实现容器与外部网络的通信,隐藏了容器内部的真实ip地址

二、Docker的网络模式

1、docker基于桥接模式的网络类型:(重要)

(1)host模式

容器不会虚拟出自己的网卡,也不会配置自己的ip,容器全部使用宿主机的ip和端口。一般用于端口不重复的类型的应用,docker本身是单节点模式,适用于部署单个服务的应用程序。

创建host
bash 复制代码
docker run -itd --name test1 --network host nginx:1.22

docker run -itd --name test2 --net=host nginx:1.22

docker ps     # 运行test1,
docker ps -a    # test1运行,test2关闭。原因:80端口被占用

(2)container模式

容器和容器之间共用一个network namesapce,不是和宿主机共享,新创建的容器也不会有自己的网卡,配置自己的ip,而是和一个容器共享ip端口,除了网络之外,其他的比如文件系统等等都是隔离

创建container
bash 复制代码
docker run -itd --name 指定名字1 centos:7 /bin/bash

docker run -itd --name 指定名字2 --net=container:指定名字1 centos:7 /bin/bash
查看容器进程号
bash 复制代码
docker inspect -f '{{.State.Pid}}' 指定名字1

docker inspect -f '{{.State.Pid}}' 指定名字2

ls -l /proc/进程号/ns   # net一样

(3)none模式

创建容器之后,容器有自己的网络命名空间,但是不会进行任何网络的配置,没有网卡,没有ip,没有端口,只有本地的lo的回环网络,没有办法进行联网,网络是封闭的,一般用于内部调试。

创建none
bash 复制代码
docker run -itd --name 指定名字 --network none nginx:1.22

(4)自定义网络

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

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

查看网络设备
bash 复制代码
docker network ls     # 查看docker的网络设备
创建自定
bash 复制代码
docker network create --subnet=172.111.0.0/16 指定网络名字1    # 创建自定义网络

ifconfig   # 查看

docker run -itd --name 容器名 --net 指定网络名2 --ip 172.111.0.10 -p 88:80 nginx:1.22

创建自定并指定网卡名称
docker network create --subnet=172.112.0.0/16 --opt "com.docker.network.bridge.name"="docker2" 指定网络名字2    # docker2指定网卡名称  网段不要重复
报错
bash 复制代码
docker run -itd --name 指定名字 --network bridge --ip 172.17.0.10 nginx:1.22
# 系统创建的桥接模式,只能自动分配地址,也只能自动分配;我们在创建自定义网络时,才可以指定网段,并给指定网段分配ip地址

(5)总结

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

host:与宿主机共享网络

container:容器之间共享

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

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

相关推荐
数安旭说4 小时前
终端防火墙深度拆解:网络隔离、进程级管控与流量治理的落地避坑指南
网络·数据安全·企业安全·防火墙·终端安全·终端防火墙·违规外联
数智工坊5 小时前
NTIRE2024×4图像超分竞赛综述|Mamba崛起、数据缩放、频域增强成为新趋势
网络·人工智能·深度学习·cnn·机器人
聚美智数5 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全
一个向上的运维者6 小时前
Kubernetes 网络三部曲:CNI、kube-proxy 与 CoreDNS 是如何协作的?
网络·容器·kubernetes
2301_815091016 小时前
TCP 并发服务器模型:4 种 IO 模型完整梳理
服务器·网络·tcp/ip
斑马1396 小时前
Linux软件编程学习笔记(十二)——TCP并发服务器模型
java·服务器·网络
学着改变2757 小时前
2026便携式超声波流量计性能白皮书 户外巡检适用性横评
大数据·网络·人工智能·科技·产品运营·量子计算
rcms152702692187 小时前
Novellus Systems 02-033134-00晶圆底座加热器
网络
马立杰7 小时前
IE241210_路由安全技术(三层安全)
网络·安全
石小千7 小时前
Docker 笔记(九)--离线安装
docker·容器