Docker入门系列——网络

alt

Docker 通过容器化应用程序,彻底改变了我们构建、分发和运行应用程序的方式。然而,有效使用 Docker 的一个关键方面是理解容器如何相互通信以及与外界通信。

1. 什么是 Docker 网络?

Docker 网络允许容器相互通信以及与外部资源通信。默认情况下,每个容器都是隔离的,这意味着除非连接到共享网络,否则它们不会自动与其他容器通信。Docker 提供了一个灵活且强大的网络模型,简化了容器之间的连接。

简而言之,Docker 网络处理:

  • 容器之间的通信
  • 容器与外界的通信
  • 为容器化应用程序定义隔离边界

2. Docker 网络类型

Docker 提供了几种网络驱动程序,每种都适用于不同的用例。了解这些网络类型对于为您的应用程序选择正确的网络至关重要。

桥接网络(默认)

桥接网络是 Docker 在创建容器时使用的默认网络驱动程序。同一桥接网络上的容器可以使用 IP 地址或容器名称相互通信。

用例: 这通常用于需要在单个主机上内部通信的多容器应用程序,例如开发环境中的微服务。

# 列出默认桥接网络上的容器
docker network inspect bridge

主机网络

在主机网络中,容器共享主机的网络命名空间。这意味着容器可以直接使用主机的 IP 地址和端口。

用例: 这适用于需要避免网络开销的性能关键型应用程序,但您会失去容器与主机之间的隔离。

docker run --network host <image>

无网络

顾名思义,none 网络驱动程序禁用了容器的所有网络功能。当容器不需要任何外部或内部网络时,这很有用。

用例: 用于不需要任何网络通信的容器,例如特定的后台任务。

docker run --network none <image>

覆盖网络

覆盖网络用于多主机 Docker 设置,其中不同主机上运行的容器需要相互通信。它需要 Docker Swarm 或 Kubernetes 设置。

用例: 对于跨多个 Docker 主机的分布式系统至关重要。

docker network create --driver overlay my-overlay-network

3. Docker 网络实战

现在,让我们探索如何在现实世界场景中使用 Docker 网络。

创建和管理网络

默认情况下,Docker 在运行容器时会创建一个桥接网络。但是,您可以为更高级的设置创建自定义网络。

# 创建自定义桥接网络
docker network create my-custom-network

您可以使用以下命令检查您的网络:

docker network ls  # 列出所有网络
docker network inspect my-custom-network  # 关于特定网络的详细信息

将容器连接到网络

创建自定义网络后,您可以将容器附加到它。

# 运行一个容器并将其附加到自定义网络
docker run -d --name container1 --network my-custom-network nginx

# 运行另一个容器并将其附加到同一网络
docker run -d --name container2 --network my-custom-network redis

同一网络上的容器可以通过容器名称相互通信。

# 在 container1 内部,您可以通过名称访问 container2
ping container2

将服务暴露给主机

如果您希望容器内运行的服务能够从主机或外部世界访问,您需要暴露其端口。

docker run -d -p 8080:80 --name webserver nginx

在这种情况下,容器内运行的 Nginx Web 服务器将可以通过主机机器上的 localhost:8080 访问。

为确保容器间通信高效且安全,优化 Docker 网络配置是关键。以下是一些推荐的优化策略:

选择合适的网络模式

Docker 提供的不同网络模式适用于不同的场景,合理选择可以提高应用程序的性能和安全性。

  • 桥接网络:适合单主机、多容器之间的通信,典型的使用场景是开发环境的微服务。使用自定义桥接网络能够灵活命名容器,便于容器名称解析。
  • 主机网络:适合高性能应用,因为它消除了 NAT(网络地址转换)带来的网络开销。但使用主机网络时容器会共享主机的网络命名空间,因此隔离性会降低,适用于信任容器的场景。
  • 覆盖网络:用于多主机 Docker Swarm 或 Kubernetes 集群中,可以跨多主机的容器间通信。分布式系统或集群应用建议选择覆盖网络。
  • 无网络模式:适合无需网络的容器,例如单纯的数据处理或备份任务等。

使用 docker network ls 可以列出当前主机上的所有网络类型,从中选择合适的网络配置。

限制网络带宽

Docker 支持使用 --network-opt 设置自定义网络的带宽上限,帮助控制容器的网络带宽。对于共享资源的多租户系统,网络限速可以避免个别容器过度占用带宽,影响整体系统的稳定性。

docker network create \
  --opt com.docker.network.driver.mtu=1200 \
  --opt com.docker.network.window=30 \
  custom_network

使用自定义 DNS 配置

在微服务架构中,DNS 解析是容器间通信的关键。Docker 默认使用主机的 DNS 配置,但在某些情况下,配置自定义 DNS 服务器更可靠。使用 --dns 参数为容器指定 DNS 服务器,以确保解析过程不受主机配置影响。

docker run --dns 8.8.8.8 --dns 8.8.4.4 --network my-custom-network my_container

也可以通过在 /etc/docker/daemon.json 文件中添加 "dns" 配置,设置 Docker Daemon 的默认 DNS。

{
  "dns": ["8.8.8.8""8.8.4.4"]
}

网络命名空间隔离

对于隔离要求高的应用,建议将生产和测试环境分别置于不同的网络命名空间。例如,您可以创建不同的自定义网络来隔离环境,确保敏感数据或服务不会意外暴露或被干扰。

4. Docker 网络常见问题

在使用 Docker 网络时,开发者可能会遇到一些常见问题。以下列出几种常见问题及对应的解决方案。

问题 1:容器之间无法通信

原因:容器未连接到同一个网络,或网络配置不当。

解决方案:确保容器位于相同的自定义网络上,可通过 docker network connect 将容器添加到目标网络,或使用自定义网络创建容器。检查 docker network inspect <network_name>,查看是否所有容器均正确连接。

docker network connect my-custom-network container1

问题 2:桥接网络内通信不通

原因:默认桥接网络或防火墙阻止了容器间通信。

解决方案:使用 docker network inspect bridge 检查网络设置,确保桥接网络的设置未被更改。如果网络仍不通,可能需要检查主机防火墙规则,确保允许 Docker 的默认端口和 IP 范围。

问题 3:服务端口映射失败

原因:容器内服务未绑定到正确的 IP 或端口映射未设置。

解决方案:确保服务监听 0.0.0.0,而非 localhost。启动容器时使用 -p 参数设置端口映射,如 docker run -d -p 8080:80 my_container。


结论

Docker 网络是一个强大的功能,允许容器与彼此和外部世界无缝交互。通过了解不同的 Docker 网络类型以及如何配置它们,开发者可以高效地构建和部署容器化应用程序。无论您是在开发一个小型应用程序还是复杂的多容器系统,Docker 网络都能实现这一切。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1102.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

20241029软考架构-------软考案例9答案

每日打卡题案例9答案 【2014年真题】 难度&#xff1a;简单 请详细阅读有关软件架构评估方面的说明&#xff0c;回答下列问题。&#xff08;25分&#xff09; 【说明】 某电子商务公司拟升级目前正在使用的在线交易系统&#xff0c;以提高客户网上购物时在线支付环节的效率和安…

双分解+一区极光优化+Transformer!CEEMDAN-Kmeans-VMD-PLO-Transformer多元时序预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CEEMDAN-Kmeans-VMD-PLO-Transformer融合K均值聚类的数据双重分解极光优化Transformer多元时间序列预测&#xff08;完整源码和数据&#xff09; 2.CEEMDAN分解&#xff0c;计算样本熵&#xff0c;根据样…

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前&#xff0c;需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed&#xff0c;它就是一个绝对定位元素。​ 在…

el-table 滚动条重置 手动控制滚动条

最近在使用 el-table 的时候&#xff0c;出现一个问题&#xff1a; 表头过长的时候&#xff0c;会有左右滑动的操作&#xff0c;当我们把表格拉到最右侧&#xff0c;这个时候重新请求数据的话&#xff0c;表格位置还是在最右侧&#xff0c;不会恢复原位。 那我们想恢复原位&a…

【Android】View的事件分发机制

文章目录 分发顺序ActivityViewGroupView 协作方法整体流程注意 Activity事件分发ViewGroup事件分发View点击事件总结 分发顺序 Activity->ViewGroup->View Activity 分发事件&#xff1a;Activity 通过 dispatchTouchEvent 方法分发事件&#xff0c;首先尝试将事件传递…

基于vue框架的的考研网上辅导系统ao9z7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,公告信息,课程分类,考研资料,考研视频,课程信息,院校建议,教师 开题报告内容 基于Vue框架的考研网上辅导系统开题报告 一、研究背景与意义 随着高等教育的普及和就业竞争的加剧&#xff0c;考研已成为众多大学生提升学历、增强就…

分析 std::optional 的使用与常见错误

文章目录 引言常见错误及解决方案1. 错误使用 std::optional 变量进行算术运算2. 错误检查 std::optional 是否有值3. 忽视 std::optional 的默认值 结论 引言 std::optional 是 C17 引入的一个模板类&#xff0c;用于表示可能有也可能没有值的情况。它特别适用于函数返回值&a…

本地搭建php包依赖管理工具,使用satis搭建私有composer仓库

一、总体设计 dns服务器nginxsatis web 静态页面satis manage 管理程序 二、nginx配置 1、nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://ngi…

软件测试学习笔记丨SeleniumPO模式

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/22525 本文为霍格沃兹测试开发学社的学习经历分享&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 说明&#xff1a;本篇博客基于sel…

Ubuntu-22.04 虚拟机安装

1. Ubuntu安装方式 1.1. 基于物理介质安装 光盘安装&#xff1a;通过将 Ubuntu 镜像刻录到光盘&#xff0c;在计算机 BIOS/UEFI 中设置光盘为第一启动项&#xff0c;然后按照安装程序的提示进行语言选择、分区、用户信息设置等操作来完成安装。这种方式需要有光盘刻录设备和空…

软件设计师-上午题-12、13 软件工程(11分)

软件工程题号一般为17-19和29-36题&#xff0c;分值一般为11分。 目录 1 软件过程 1.1 CMM(能力成熟度模型) 1.1.1 真题 1.2 CMMI(能力成熟度模型集成) 1.2.1 真题 2 软件过程模型 2.1 瀑布模型 2.2 V模型 2.2.1 真题 2.3 增量模型 2.3.1 真题 2.4 演化模型 2.5 …

Bartender 5 for Mac 菜单栏管理软件 安装教程【保姆级教程,操作简单小白轻松上手使用】

Mac分享吧 文章目录 Bartender 5 for Mac 菜单栏管理软件 安装完成&#xff0c;软件打开效果一、Bartender 5 菜单栏管理软件 Mac电脑版——v5.2.3⚠️注意事项&#xff1a;1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件3️⃣&#xff1a;打开软件&#xff0c;根据自己…

C#/.NET/.NET Core优秀项目和框架2024年10月简报

前言 每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架&#xff08;每周至少会推荐两个优秀的项目和框架当然节假日除外&#xff09;&#xff0c;推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等&#xff08;打不开或者打开GitHub很慢的同学可以优先查看…

OWASP TOP10 OSS 风险:开源软件安全指南

OWASP OSS 列表提供了旨在绕过 CVE 目录等滞后指标的建议&#xff0c;并为安全从业者提供了安全使用 OSS 组件的指南。 在最近的一些暴露的漏洞和风险之后&#xff0c;对开源软件 &#xff08;OSS&#xff09;的安全和使用方式进行批判性审视的呼声越来越高&#xff0c;特别是 …

数据转换 | Matlab基于SP符号递归图(Symbolic recurrence plots)一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 Matlab基于SP符号递归图&#xff08;Symbolic recurrence plots&#xff09;一维数据转二维图像方法 符号递归图(Symbolic recurrence plots)是一种一维时间序列转图像的技术&#xff0c;可用于平稳和非平稳数据集;对噪声具有…

01.如何用DDD重构老项目

学习资料来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 动机DDD与重构实践重构? 重写从一开始就采用DDD重构步骤1. 添加领域模块2.分离出有价值的代码3.迁移到领域模块4.重复2,3 动机 …

【uni-app】创建自定义模板

1. 步骤 打开自定义模板文件夹 在此文件夹下创建模板文件&#xff08;注意后缀名&#xff09; 重新点击“新建页面” 即可看到新建的模板 2. 注意事项 创建的模板必须文件类型对应&#xff08;vue模板就创建*.vue文件, uvue模板就创建*.uvue文件&#xff09;

本地部署开源在线即时通讯软件Fiora打造个人私密聊天室

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 相信大家在聊天时候总是很没安全感&#xff0c;比如在和小姐妹背着男朋友聊一些不能说的坏话&#xff0c;或者背着女朋友和兄…

【开发工具——依赖管理工具——Maven】

1. Maven介绍 Apache Maven 的本质是一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model&#xff0c;POM) 的概念&#xff0c;Maven 可以从一条中心信息管理项目的构建、报告和文档。 对于开发者来说&#xff0c;Maven 的主要作用主要有 3 个&#xff1a; …

bootstrap应用2——计算第n个观测在(or 不在)自助法样本里的概率

#计算第四个观测在自助法样本里的概率 store<-rep(NA,10000) for (i in 1:10000){store[i]<-sum(sample(1:100,repTRUE)4)>0 } #讨论第四个观测 mean(store) #计算第n个观测在自助法样本里的概率 boot <- function(n, N){return(1-(1-1/N)^N) }#计算第n个观测在自助…