这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战
容器
模拟运行在一个操作系统上的多个不同进程,并将封闭在一个密闭的容器内,也就是容器化技术。虚拟机是操作系统级别的隔离,容器本质上是进程级的资源隔离。
虚拟化
-
CPU虚拟化
单CPU模拟多CPU并行
-
网络虚拟化(VPN)
-
服务器虚拟化
-
存储虚拟化
-
应用虚拟化
Docker网络
默认的三个网络: bridge, host,none
docker network ls
docker info
docker在宿主机虚拟一个docker容器网桥(docker0), docker 启动一个容器时会根据docker网桥的网段分配给容器的一个IP, 同时docker网桥是每个容器的默认网关。docker内部容器能够通信,外部需要访问的化需要通过-p进行端口映射。
bridge模式
默认的网络模式,容器没有公有IP, 只有宿主机能访问, 容器通过宿主机的NAT规则后能访问外网。
- Docker利用veth pair技术创建两个虚拟网络接口设备,veth0和veth1
- 将veth0附加到docker0网桥上, 保证宿主机的网络报文可以发往veth0
- 将veth1添加到docker容器所属的namespace下,改名eth0, 保证宿主机的网络报文发往veth0, 立即被eth0接收, 实现联通,同时容器单独使用eth0, 实现网络的隔离
bridge的缺陷
- 不具有公有IP, 宿主机以外的无法直接和容器通信
- NAT模式通过中间处理实现了,但是仍有不便, 容器要在宿主机上竞争端口, 容器内部服务的访问者,需要使用服务发现获取服务的外部端口
- NAT在三层网络上实现,影响网络传输效率
docker network inspect bridge
docker network create -d bridge test
Host模式
相当于NAT模式,与宿主机在一个网络中,但没有独立IP, 容器不会获得独立的Network Namespace,和宿主机共用一个Namespace, 容器不会虚拟出自己的网卡,配置IP等,使用宿主机的IP 和端口。文件系统,进程列表还是隔离的。网络性能好,网络的隔离性不好,使用时需要在容器创建的时候指定-network=host.
Host的缺陷:
环境隔离的弱化, 容器和宿主机竞争网络栈的使用, 不再拥有所有的端口资源。
Container模式
两个容器共享一个网络环境,并不能和宿主机外的机器通信,两个容器共享一个Network Namespace,Ip,端口范围,进程可以通过IO网卡设备通信
None模式
没有网卡,IP,路由等。 密码加密的时候可以用。--network=none指定。
overlay模式
覆盖网络,用于集群部署。docker集成了一种基于VXLAN隧道的实现,主要用于实现跨主机容器的通信。
macvlan模式
基于mac地址进行转发。宿主机充当二层交换机, Docker维护一个mac地址表,当宿主机网络收到一个数据包后,直接根据mac地址找到对应的容器。
容器之间可以通过IP互通,通过宿主机内建的虚拟网络设备,但与主机无法直接利用IP互通。
docker network connect test nignx
将nignx的网络绑定到test网络上