管理网络

docker network COMMAND

1、子命令

(1)将一个容器连接到网络上

docker network connect

(2)创建一个网络

docker network create

(3)断开容器与网络的连接

docker network disconnect

(4)显示一个或多个网络的详细信息

docker network inspect

(5)列出网络

docker network ls

(6)删除所有未使用的网络

docker network prune

(7)删除一个或多个网络

docker network rm

2、作用

(1)容器之间互联、通信、端口映射

(2)容器内部 IP 可能发生变化,容器 IP 变动时,可以通过服务名直接网络通信

 

网络驱动

1、创建网络时,可以指定网络驱动

docker network create -driver= NETWORK

2、bridge:默认的网络驱动程序

3、host:对于独立的容器,移除容器和 Docker 主机之间的网络隔离,并直接使用主机的网络

4、overlay

(1)overlay 网络将多个 Docker 守护进程连接在一起,使 swarm 服务能够相互通信

(2)也可以使用 overlay 网络来促进 swarm 服务和独立容器之间的通信,或者不同 Docker 守护进程上的两个独立容器之间的通信

(3)这种策略消除了在这些容器之间进行操作系统级路由的需要

5、ipvlan

(1)IPvlan 网络让用户完全控制 IPv4 和 IPv6 寻址

(2)VLAN 驱动建立在这个基础之上,让运营商完全控制第二层的 VLAN 标记,甚至让对底层网络整合感兴趣的用户控制 IPvlan L3 路由

6、macvlan

(1)Macvlan 网络允许为容器分配一个 MAC 地址,使它看起来像网络上的一个物理设备

(2)Docker 守护进程通过容器的 MAC 地址将流量路由到容器

(3)当处理那些希望直接连接到物理网络,而不是通过 Docker 主机的网络堆栈路由的传统应用程序时,使用 macvlan 驱动有时是最好的选择

7、none:对于这个容器,禁用所有网络。通常与自定义网络驱动程序一起使用。"none "不适用于swarm服务。请参阅禁用容器网络

8、网络插件:可以用 Docker 安装和使用第三方网络插件,这些插件可以从 Docker Hub 或第三方供应商处获得

 

网络模式

1、bridge

docker run --net=bridge

(1)默认的网络驱动程序

(2)当应用程序运行在需要通信的独立容器中时,通常会使用桥接网络

(3)为每一个容器分配、设置 IP 等,并将容器连接到 docker0

(4)Docker 服务默认会创建一个 docker0 网桥(存在一个 docker0 内部接口),该桥接网络的名称为 docker0,它在内核层连通其他的物理网卡或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络

(5)Docker 默认指定 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信

2、host

docker run --net=host

(1)对于独立的容器,移除容器和 Docker 主机之间的网络隔离,并直接使用主机的网络

(2)容器直接使用主机的 IP 地址、端口,与外界进行通信,不再需要额外进行 NAT 转换

(3)容器将不会获得一个独立 Network Namespace,而是和主机共用一个 Network Namespace,容器将不会虚拟出网卡,而是使用主机 IP、端口

(4)相当于 Vmware 中的桥接模式,与主机在同一个网络中,但没有独立 IP 地址

3、none

docker run --net=none

(1)对于这个容器,禁用所有网络,不为 Docker 容器进行任何网络配置,即没有网卡、IP、路由等信息,只有一个 lo(本地环回接口),但容器拥有独立 Network Namespace

(2)通常与自定义网络驱动程序一起使用

(3)none 不适用于 swarm 服务

4、container

docker run --net=container:NAME|容器ID

(1)指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和主机共享

(2)新创建的容器不会创建网卡、配置 IP,而是和一个指定容器共享 IP、端口范围等

(3)可以在一定程度上节省网络资源,容器内部依然不会拥有所有端口,两个容器除网络方面,如:文件系统,进程列表等是隔离的

(4)两个容器的进程可以通过 lo(本地环回接口)网卡设备通信

 

用户定义的网桥和默认网桥之间的区别

1、用户定义的网桥在容器之间提供自动的 DNS 解析

(1)默认桥接网络上的容器只能通过 IP 地址相互访问,在用户定义的桥接网络上,容器之间可以通过名称或别名来解析对方

(2)如果在默认的桥接网络上运行同一个应用堆栈,需要在容器之间手动创建链接(使用 --link),这些链接需要在两个方向上创建,如果有两个以上的容器需要通信,这就变得复杂了

2、用户定义的桥接器提供了更好的隔离

(1)所有没有指定 --network 的容器,都会连接到默认的桥接网络,这可能是一个风险,因为不相关的堆栈 / 服务 / 容器可以进行通信

(2)使用用户定义的网络可以提供一个范围广泛的网络,只有连接到该网络的容器才能够进行通信

3、容器可以随时从用户定义的网络中连接或分离

(1)在一个容器的生命周期中,可以从用户定义的网络中即时连接或断开它

(2)要从默认的桥接网络中移除一个容器,需要停止该容器并以不同的网络选项重新创建它

4、每个用户定义的网络都会创建一个可配置的桥接

(1)如果容器使用默认的桥接网络,可以对它进行配置,但所有的容器都使用相同的设置,比如 MTU 和 iptables 规则。此外,配置默认桥接网络发生在 Docker 本身之外,需要重新启动 Docker

(2)用户定义的桥接网络是用 docker network create 来创建和配置的,如果不同的应用程序组有不同的网络要求,可以在创建时单独配置每个用户定义的桥接

5、默认桥接网络上的链接容器共享环境变量

(1)最初,在两个容器之间共享环境变量的唯一方法是使用 --link 标志将它们链接起来,这种类型的变量共享在用户定义的网络中是不可能的,然而,也有一些更好的方法来共享环境变量

(2)多个容器可以使用 Docker 卷,挂载一个包含共享信息的文件或目录

(3)多个容器可以使用 docker-compose 一起启动,compose 文件可以定义共享变量

(4)可以使用 swarm 服务而不是独立的容器,并利用共享的 secrets 和 configs

(5)连接到同一用户定义的桥接网络的容器有效地将所有端口暴露给对方,要想让不同网络上的容器或非 Docker 主机访问一个端口,必须使用 -p 或 -publish 标志发布该端口

posted @   半条咸鱼  阅读(352)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示