跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Docker网络基础
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Docker网络基础 = Docker网络是容器化技术中的核心概念之一,它允许容器之间、容器与宿主机以及外部网络进行通信。理解Docker网络对于构建分布式应用程序至关重要。本章将详细介绍Docker网络的基础知识、网络类型、配置方法以及实际应用场景。 == 介绍 == Docker网络提供了多种网络模式,每种模式适用于不同的场景。默认情况下,Docker会创建三种网络: * '''bridge'''(桥接网络):默认网络模式,适用于单主机上的容器通信。 * '''host'''(主机网络):容器直接使用宿主机的网络栈,适用于高性能需求场景。 * '''none'''(无网络):容器不配置任何网络,适用于完全隔离的环境。 此外,用户还可以创建自定义网络,以满足更复杂的网络需求。 == Docker网络类型 == === 桥接网络(bridge) === 桥接网络是Docker的默认网络模式。当容器启动时,如果没有指定网络,Docker会自动将其连接到默认的桥接网络(通常名为`bridge`)。桥接网络提供了以下特性: * 容器之间可以通过IP地址通信。 * 容器可以通过端口映射与外部网络通信。 以下是一个创建桥接网络并运行容器的示例: <syntaxhighlight lang="bash"> # 创建一个自定义桥接网络 docker network create my_bridge # 运行一个容器并连接到自定义桥接网络 docker run -d --name container1 --network my_bridge nginx docker run -d --name container2 --network my_bridge nginx # 验证容器之间的通信 docker exec -it container1 ping container2 </syntaxhighlight> 输出示例: <syntaxhighlight lang="text"> PING container2 (172.18.0.3): 56 data bytes 64 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.123 ms </syntaxhighlight> === 主机网络(host) === 主机网络模式允许容器直接使用宿主机的网络栈,无需端口映射。这种模式适用于对网络性能要求较高的场景,但牺牲了网络隔离性。 示例: <syntaxhighlight lang="bash"> # 运行一个容器并使用主机网络 docker run -d --name host_container --network host nginx </syntaxhighlight> === 无网络(none) === 无网络模式完全隔离容器的网络栈,适用于不需要网络通信的场景。 示例: <syntaxhighlight lang="bash"> # 运行一个容器并不配置任何网络 docker run -d --name none_container --network none alpine sleep 3600 </syntaxhighlight> == 自定义网络 == Docker允许用户创建自定义网络,以满足特定的需求。自定义网络支持以下驱动: * '''bridge''':适用于单主机上的容器通信。 * '''overlay''':适用于多主机上的容器通信(如Docker Swarm)。 * '''macvlan''':为容器分配MAC地址,使其在物理网络中可见。 以下是一个创建自定义桥接网络的示例: <syntaxhighlight lang="bash"> # 创建一个自定义桥接网络 docker network create --driver bridge --subnet 192.168.100.0/24 my_custom_network # 运行容器并连接到自定义网络 docker run -d --name custom_container --network my_custom_network nginx </syntaxhighlight> == 容器间通信 == Docker网络支持容器之间通过容器名称或别名进行通信。以下是一个示例: <syntaxhighlight lang="bash"> # 创建两个容器并连接到同一网络 docker run -d --name web --network my_bridge nginx docker run -d --name db --network my_bridge mysql # 在web容器中ping db容器 docker exec -it web ping db </syntaxhighlight> == 网络隔离与安全 == Docker网络提供了网络隔离功能,可以通过以下方式增强安全性: * 使用自定义网络限制容器之间的通信。 * 使用`--icc=false`禁用默认桥接网络的容器间通信。 * 使用网络策略(如`docker network connect`和`docker network disconnect`)动态管理容器与网络的连接。 == 实际案例 == === 场景:多容器应用程序 === 假设我们有一个Web应用程序,包含以下组件: 1. Web服务器(Nginx) 2. 应用服务器(Node.js) 3. 数据库(MySQL) 我们可以使用自定义桥接网络将这些容器连接起来: <syntaxhighlight lang="bash"> # 创建自定义网络 docker network create app_network # 启动数据库容器 docker run -d --name mysql --network app_network -e MYSQL_ROOT_PASSWORD=secret mysql # 启动应用服务器容器 docker run -d --name app --network app_network -e DB_HOST=mysql node_app # 启动Web服务器容器 docker run -d --name web --network app_network -p 80:80 nginx </syntaxhighlight> === 网络拓扑图 === <mermaid> graph LR A[Web (Nginx)] --> B[App (Node.js)] B --> C[DB (MySQL)] </mermaid> == 总结 == Docker网络是容器化应用程序的重要组成部分。通过理解不同的网络模式(如桥接、主机和无网络)以及如何创建和管理自定义网络,您可以构建高效、安全的分布式应用程序。本章介绍了Docker网络的基础知识,并通过实际案例展示了其应用场景。 [[Category:集成部署]] [[Category:Docker]] [[Category:Docker基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)