深入理解Docker网络实践

2023-11-28 12:05:00 字數 5263 閱讀 2744

docker 网络是 docker 引擎提供的一种功能,它可以让 docker 容器之间或者 docker 容器和外部网络进行通信。它主要包括以下几个方面:

1.网络驱动:docker 提供了多种网络驱动,如 bridge、host、overlay 和 macvlan,以支持不同的网络需求。2.网络模型:docker 支持单主机网络模型和多主机网络模型。单主机网络模型适用于所有容器都在同一台主机上的情况,而多主机网络模型则可以跨越多台主机。3.网络配置:用户可以通过 docker cli 或 docker api 来创建、修改或删除网络。4.服务发现和负载均衡:在使用 overlay 网络时,docker 提供了基于 dns 的服务发现和负载均衡功能。5.网络隔离:每个 docker 网络都位于其自己的命名空间中,因此可以实现网络环境的隔离。
总的来说,docker 网络提供了一个灵活且强大的工具,使得容器化应用能够在复杂的网络环境下正常运行。

bridge(桥接)网络:这是 docker 的默认网络类型。创建一个新的容器时,如果没有指定网络,docker会将其连接到一个内部的私有网络,在此网络中的每个容器都能通过 ip 地址来访问其他容器。

host(主机)网络:在 host 网络模式下,容器共享宿主机的网络命名空间,无需进行网络**,可以直接对外部进行通信。这种网络模式的性能最好,但也牺牲了容器的网络隔离。

none(无)网络:在 none 网络模式下,容器会拥有自己独立的网络命名空间,但并不会为容器配置网络接口,ip地址等网络栈信息。这种网络类型适合需要运行在隔离网络环境中的应用。

overlay(覆盖)网络:overlay 网络使得在不同主机上运行的 docker 容器可以互相通信。这种网络类型常用于 docker swarm 集群环境。

macvlan(mac vlan)网络:macvlan 网络允许你给容器分配 mac 地址,使其看起来像是物理设备一样在数据链路层进行通信。这种网络类型适用于无法更改源 mac 地址的应用。

bridge(桥接)网络:当你运行一个容器,且没有指定网络时,docker 默认会使用 bridge 网络。例如:

docker run -d --name my-app my-image

host(主机)网络:如果你希望容器直接使用宿主机的网络,可以在运行容器时指定使用 host 网络。如下所示:

docker run -d --network host --name my-app my-image

none(无)网络:如果你需要运行一个完全隔离的容器,可以指定使用 none 网络。例如:

docker run -d --network none --name my-app my-image

overlay(覆盖)网络:首先,你需要在 docker swarm 集群上创建一个 overlay 网络,然后在运行服务时指定使用这个网络。

##创建 overlay 网络:

docker network create -d overlay my-overlay

##运行服务时指定网络:

docker service create --network=my-overlay --name my-svc my-image

macvlan(mac vlan)网络:首先,你需要创建一个 macvlan 网络,然后可以在运行容器时指定使用这个网络。

##创建 macvlan 网络:

docker network create -d macvlan --subnet=172.20.0.0/16 --gateway=172.20.0.1 --ip-range=172.20.1.0/24 --aux-address 'host=172.20.0.2' -o parent=eth0 my-macvlan

##运行容器时指定网络:

docker run -d --network=my-macvlan --name=my-app my-image

其中,"my-image" 是你的 docker 镜像名称,需要替换为实际的镜像名称。

查看网络:docker network ls。此命令将列出系统中所有的 docker 网络。

创建网络:docker network create --driver [网络类型] [网络名称]。例如,创建一个名为 "my-network" 的 bridge 网络,你可以使用docker network create --driver bridge my-network

删除网络:docker network rm [网络名称|网络id]。例如,删除刚才创建的 "my-network" 网络,你可以使用docker network rm my-network

查看网络详情:docker network inspect [网络名称|网络id]。这将显示特定网络的详细信息,包括其驱动类型、子网设置、连接到该网络的容器等。

连接网络:docker network connect [网络名称] [容器名称|容器id]。此命令可将一个正在运行的容器连接到指定网络。

断开网络:docker network disconnect [网络名称] [容器名称|容器id]。此命令用于从指定网络断开一个容器。

清除未使用的网络:如果你的docker系统有很多未使用的网络资源,可以使用docker network prune来清理。

docker 的--link参数是早期 docker 版本中用于链接两个容器的一种方式。它使你能够将源容器(source container)和接收容器(receiver container)连接在一起,从而使接收容器可以访问源容器的信息。

# 启动一个名为 db 的数据库容器。

docker run -d --name db my-db-image

# 启动一个名为 web 的 web 服务器容器,并连接到 db 容器。

docker run -d --name web --link db:db my-web-app

在上述例子中,--link参数后面的db:db表示将源容器(左侧的db)链接到接收容器(这里是web容器),并在接收容器中以别名db(右侧的db)来引用源容器。

然而,现在--link参数已经被废弃,不建议在新的项目中使用。因为--link参数的功能有局限性,并且需要在运行容器时就定义好所有的链接,不方便后期调整。

作为取代--link的解决方案,docker 提供了自定义网络(custom networks)。通过创建自定义网络,你可以在不同的容器之间自由地进行通信,而不需要像--link那样在运行容器时预先定义好链接关系。

docker 提供了自定义网络的功能,该功能增强了容器之间的通信。在自定义网络中,容器可以在不需要预先定义链接(如 --link)的情况下进行互相发现和通信,步骤如下:

## 1.创建自定义网络:使用 docker network create 命令来创建一个新的网络。例如,创建一个名为 "my-network" 的桥接网络:

docker network create my-network

## 2.启动容器并连接到自定义网络:使用 docker run 命令启动一个新的容器,并使用 --network 参数将其连接到 "my-network" 网络:

## 启动 db 容器。

docker run -d --network=my-network --name db my-db-image

## 启动 web 容器。

docker run -d --network=my-network --name web my-web-app

在上述例子中,即使没有像--link那样明确定义链接关系,"web" 容器也能通过容器名称("db")来访问 "db" 容器。这是因为在同一自定义网络中的容器都被添加到了一个内部 dns 中,从而使得它们可以通过容器名称进行互相解析。

如果你想将一个正在运行的容器连接到一个自定义网络,可以使用docker network connect命令。例如:

docker network connect my-network my-running-container

如果你想要断开一个容器与某个网络的连接,可以使用docker network disconnect命令。

内置网络类型:docker 提供了几种内置的网络类型,分别是 bridge、host、none、overlay 和 macvlan。bridge 是默认的网络类型,适合大多数的应用场景。host 可以使容器直接共享宿主机的网络,性能最好。none 提供了完全隔离的网络环境。overlay 用于在 docker swarm 集群中的跨主机通信。macvlan 让容器像物理设备一样直接与数据链路层通信。

自定义网络:docker 还允许用户创建自定义网络,增强了容器间的通信。在自定义网络中,容器可以直接通过名称进行互相发现和通信,而无需预先定义链接。这方便了复杂应用的部署和扩展。

--link参数已废弃:虽然--link在早期的 docker 版本中被广泛用于链接两个容器,但现在已经被废弃。因为 --link 的功能有局限性,且不方便后期调整。作为替代,建议使用自定义网络。

安全注意事项:虽然 docker 网络提供了很多便利,但也可能带来安全隐患。例如,在同一个网络中的容器可以互相访问。如果一个容器被恶意攻击者控制,那么所有在同一网络中的服务都可能受到威胁。因此,你应该按需分配网络权限,并尽量减少不必要的网络连接。

在学业中融入现实实践,深入理解知行合一

写书评以来,第一次独到的一本大部头的专业书籍,让我第一次近距离理解了博士不好念这个事实。实践社会科学的方法 理论与前瞻 为 超级教授 黄宗智所写,其一生所研究领域甚广,著述涉及历史 经济 法学 社会学等人文科学。对于如何做好人文科学的研究有着自己独到的见解。如果你是一个想要在人文科学这个领域想要持续...

深入调研 实干践行

调查研究是我们党的传家宝,是谋事之基 成事之道。调查研究是发现问题 解决问题 为民谋利 为民尽责的实际行动和具体举措。奋进新征程,作为党员我们要用好调查研究这个 传家宝 扎实练好调查研究的基本功,通过调查研究把握实际情况和规律,找到破解难题的办法和路径。.真正放下架子 扑下身子,主动到问题最多的地方...

深入实践,了解搜狐体育首页的优势

首先,搜狐体育首页运行稳定 流畅,并为用户提供实时的体育新闻资讯,可以保证用户能够及时获取最新的体育资讯,从而了解体育世界的新闻动态。其次,搜狐体育首页采用特有的互联网科技手段和资源,构建出一条完整 全面 及时的新闻发布渠道。它还拥有丰富多彩的应用服务,有体育赛事 赛间实时资讯 体育评论 本地服务等...