目录
一. 默认网络驱动程序
a. Bridge 网络
b. Host 网络
c. Overlay 网络
d. Macvlan 网络
二. 网络模式
三. 网络配置和管理
网络创建
网络连接
网络断开
查看网络
四. 端口映射和暴露
端口映射
端口暴露
Docker 的网络模型为容器提供了灵活的网络配置选项,使得容器可以彼此通信,也可以与外部世界进行交互。Docker 支持几种主要的网络驱动程序,每种驱动程序都适用于不同的场景。以下是 Docker 网络模型的主要组成部分:
特点:
docker0
)进行通信。在Docker中,docker0
是一个虚拟网桥,用于容器之间的通信以及容器与宿主机之间的通信。当你安装并启动Docker服务时,docker0
网桥会自动创建。这个网桥通常使用一个私有网络地址范围,默认是 172.17.0.0/16
。使用ip addr show docker0可查看详细信息。使用方式:
# --driver bridge 指定了网络类型为桥接网络 docker network create --driver bridge my_bridge_network
特点:
host
网络模式时,它将直接使用宿主机的网络接口,因此,容器内的服务可以通过宿主机的网络接口直接暴露给外部网络。这种网络模式适用于那些需要直接使用宿主机网络环境的容器,比如某些网络应用或服务使用方式:
# 在这个命令中,--network host 指定了容器应该使用宿主机的网络命名空间。 docker run --network host my_image
host
网络模式的主要特点是:
host
网络模式通常在网络性能上优于桥接网络。特点:
在Docker中,Overlay网络是一种跨多个主机工作的网络,它允许运行在不同主机上的容器之间进行通信。Overlay网络通常用于Swarm集群模式,其中多个Docker宿主机被配置为一个集群,共同工作以运行分布式应用程序。
Overlay网络的关键特性包括:
要创建一个Overlay网络,通常是在Swarm集群模式下进行的。可以使用以下命令:
docker network create -d overlay my-overlay-network
在这个命令中,-d overlay
指定了网络类型为Overlay网络,my-overlay-network
是新网络的名称。
在Swarm集群中,创建服务时可以指定使用这个Overlay网络:
docker service create --name my-service --network my-overlay-network my-image
在这个命令中,--network my-overlay-network
指定了服务应该连接到名为 my-overlay-network
的Overlay网络。
特点:
Macvlan 是 Docker 支持的一种网络驱动,它允许你为容器分配一个或多个独特的 MAC 地址,并让它们出现在物理网络上,就像物理设备一样。Macvlan 网络可以让你将一个物理网络接口(如 eth0)分割成多个虚拟网络接口,每个接口都可以有自己的 IP 地址和 MAC 地址。
Macvlan 的主要特点包括:
要在 Docker 中使用 Macvlan,首先需要确保系统支持 Macvlan,并且你的网络管理员允许使用它。然后,可以使用以下命令创建一个 Macvlan 网络:
docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 \ my-macvlan-network
在这个命令中:
-d macvlan
指定网络驱动为 Macvlan。--subnet
和 --gateway
指定了子网和网关。-o parent
指定了父接口,即宿主机上的物理网络接口。创建 Macvlan 网络后,你可以运行容器并指定使用这个网络:
docker run -d --name my-container --network my-macvlan-network my-image
使用 Macvlan 网络的容器将直接连接到父接口所在的物理网络,并且可以像物理设备一样进行通信。
扩展:
1. 自定义网络:
在Docker中,自定义网络是一种功能,它允许用户根据特定需求创建和管理网络。自定义网络的区分主要是基于不同的网络驱动程序和配置选项,这些驱动程序和选项提供了不同的网络功能和特性,以满足不同的使用场景。
2. Swarm
Swarm 是 Docker 官方提供的一个集群管理工具,用于管理多个 Docker 宿主机,使它们协同工作,形成一个高可用、可扩展的集群环境。Swarm 提供了以下主要功能:
集群管理:Swarm 可以管理多个 Docker 宿主机,使它们作为一个整体运行。管理员可以在 Swarm 集群中添加或移除宿主机,而不会影响到集群中运行的应用。
服务编排:Swarm 允许用户定义和部署服务,包括服务所需的容器数量、资源限制、网络配置等。Swarm 会自动根据定义的规则来调度和管理这些服务。
负载均衡:Swarm 能够自动在不同的宿主机之间分配负载,确保服务的高可用性和性能。
服务发现:Swarm 提供服务发现功能,允许容器通过服务名称相互通信,而不需要知道彼此的 IP 地址。
滚动更新:Swarm 支持滚动更新,允许用户平滑地更新服务,减少服务中断。
Swarm 集群由两种类型的节点组成:
管理节点(Manager Nodes):负责处理集群的编排任务,如服务部署、更新、故障转移等。
工作节点(Worker Nodes):执行由管理节点分配的任务,如运行容器、处理网络请求等。
None:none
网络是一种特殊的网络模式,它表示容器没有网络接口。当容器连接到 none
网络时,它将完全与外部网络隔离,没有任何网络通信能力。这种网络模式可以用于需要完全隔离和安全的场景。
docker run --network none my_image
Container:container
网络模式是一种让容器共享另一个容器的网络命名空间的网络模式。当使用 container
网络模式时,新创建的容器不会获得自己的网络接口,而是与指定的容器共享IP地址和端口等网络资源。这意味着两个容器将共享相同的网络栈,包括网络接口、IP地址、端口等。
docker run --network container:other_container my_image
--network container:
参数进行配置。创建一个自定义网络并指定驱动程序:
docker network create --driver bridge my_custom_network
将容器连接到指定网络:
docker network connect my_custom_network my_container
将容器从指定网络中断开:
docker network disconnect my_custom_network my_container
列出所有网络:
docker network ls
查看网络的详细信息:
docker network inspect my_custom_network
将主机端口映射到容器端口:
docker run -p 8080:80 my_image
在 Dockerfile 中声明容器要暴露的端口:
EXPOSE 80
EXPOSE
指令不进行端口映射,仅仅是文档化容器预期要使用的端口,实际的端口映射需通过 docker run -p
实现。