Docker从网络管理到容器优化 - 详解

news/2025/10/12 12:37:38/文章来源:https://www.cnblogs.com/yxysuanfa/p/19136494

Docker 技术全面解析:从网络管理到容器优化

  • 前言
  • 一、Docker 网络管理
      • 1.1. Docker 网络实现原理
      • 1.2. Docker 的网络模式
  • 二、资源限制
      • 2.1. CPU 资源控制
      • 2.2. 内存使用限制
      • 3.3. 磁盘 IO 控制
  • 三、数据卷容器
  • 四、端口映射
  • 五、容器互联
  • 六、Docker 镜像的创建
  • 结语

前言

  在当今云计算和微服务架构盛行的时代,Docker 作为一种轻量级的容器化技术,已经成为现代应用开发和部署的重要工具。它不仅能够简化应用的打包和分发过程,还能提高资源利用率和应用的可移植性。本文将深入探讨 Docker 的网络管理、资源限制、数据卷管理、端口映射、容器互联以及镜像创建等多个方面的技术细节,帮助读者全面掌握 Docker 的核心概念和实践技巧。

一、Docker 网络管理

1.1. Docker 网络实现原理

  Docker 使用 Linux 桥接技术,在宿主机上虚拟出一个 Docker 容器网桥(docker0)。当启动一个容器时,Docker 会根据 docker0 的网段为容器分配一个 IP 地址,称为 Container-IP。Docker 网桥是每个容器的默认网关,同一宿主机内的容器通过这个网桥可以直接通信。然而,外部网络无法直接通过 Container-IP 访问容器,需要通过端口映射来实现外部访问。

1.2. Docker 的网络模式

  Docker 提供了多种网络模式,以满足不同的应用场景需求:

#1. 查看当前 Docker 网络列表
docker network ls
#2. 查看某个网络的详细信息
docker network inspect <网络名或ID>#3. 查看容器的网络信息docker inspect <容器ID或名称> | grep IPAddress#4. 查看 veth 设备与网桥的绑定关系(需安装 bridge 工具)brctl show#5. 查看 iptables NAT 规则(用于端口映射)iptables -t nat -L -n -v
docker run -d --name test1 -P nginx    #随机端口从32768开始
docker run -d --name test2 -p 40000:80 nginx #指定端口
docker logs [CONTAINER ID|NAMES]      #查看容器的输出和日志信息
docker run -d --name host --network host nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker run -itd --name os7 centos:7 /bin/bash
docker ps
docker inspect -f '{{.State.Pid}}' [contariner ID|NAMES] #查看容器进程号
ls -l /proc/[容器进程号]/ns
docker run -itd --name test2 --network contariner:[CONTARINER ID|NAMES] centos:7 /bin/bash

在这里插入图片描述
在这里插入图片描述

docker network create --subnet=172.18.0.0/24 --opt "com.docker
.network.bridge.name"="docker1" mynetwork  #自定义容器网卡
docker run -itd --name test5 --network mynetwork --ip 172.18.0.10 centos:7 /bin/bash

在这里插入图片描述
在这里插入图片描述

二、资源限制

2.1. CPU 资源控制

  Docker 通过 cgroups 实现对 CPU 资源的控制,主要方法包括:

docker run -itd --name os7_2 --cpu-quota 80000 centos:7 /bin/bash  #80000 (80%)
docker exec -it os_7 /bin/bash
vi 1.sh
#!/bin/bash
i=0
while true; do let i++;done
chmod +x 1.sh
docker stats

在这里插入图片描述
在这里插入图片描述

docker  run -itd --name c1 --cpu-shares 512 centos:7 /bin/bash
docker  run -itd --name c1 --cpu-shares 1024 centos:7 /bin/bash
docker exec -it c1 /bin/bash
docker exec -it c2 /bin/bash
yum  -y install epel-release
yum -y install stress
stress -c 4

在这里插入图片描述
在这里插入图片描述

cd /sys/fs/cgroup/cpu/docker/<container-id>/cat cpu.cfs_period_uscat cpu.cfs_quota_usecho 50000 > cpu.cfs_quota_us   # 设置配额(临时生效)

注意事项(CPU)

  • --cpu-shares 是权重,不是限额。
  • --cpu-quota/--cpu-period 是硬限制(quota = -1 表示无限制)。
  • 使用 --cpuset-cpus 能提高性能稳定性(避免与其他进程抢核)。
  • 在多核宿主机上理解 quota/period 的含义(单位是 “相对于 1 个 CPU 的份额”)。

2.2. 内存使用限制

  通过 -m--memory-swap 参数限制容器可用的物理内存和 swap 总量,确保容器不会耗尽宿主机的内存资源。

docker run -itd --name test8 -m 512m centos:7 /bin/bash
# 或者设置 swap 总额
docker run -itd --name test8b -m 300m --memory-swap=1g centos:7
cd /sys/fs/cgroup/memory/docker/<container-id>/cat memory.limit_in_bytescat memory.usage_in_bytes

在这里插入图片描述
--memory--memory-swap 规则

  • -m 300m --memory-swap=1g`
    • 含义:容器可用物理内存 = 300 MB;物理 + swap 总共 = 1 GB → swap 可用 = 700 MB(1G - 300M)。
  • 默认行为:若不设置 --memory-swap,通常容器可使用的 swap 为 -m 值的两倍(行为可能随 Docker 版本/配置变化)。
  • --memory-swap = -1:swap 不受限制(宿主机可用多少 swap 就用多少)。
  • --memory-swap = -m:容器不能使用 swap(物理内存用尽会触发 OOM)。

3.3. 磁盘 IO 控制

  Docker 提供了对块设备读写带宽与 IOPS 的限制选项,基于 cgroups 的 blkio 控制器,确保容器对磁盘 I/O 的使用不会影响宿主机的性能。

--device-read-bps /dev/sda:1M       #限制设备上读速率为 1 MB/s。
--device-write-bps /dev/sda:1M      #限制写速率为 1 MB/s。
--device-read-iops /dev/sda:100     #限制读 IOPS(次数)。
--device-write-iops /dev/sda:100     #限制写 IOPS(次数)。
docker run -it --name test10 --device-write-bps /dev/sda:1MB centos:7 /bin/bash
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct
# CPU
docker run -itd --name c1 --cpu-shares 512 centos:7
docker run -itd --name c2 --cpu-quota 50000 centos:7
docker run -itd --name c3 --cpuset-cpus "1,3" centos:7
docker run -itd --name c4 --cpus="0.5" centos:7
# 内存
docker run -itd --name memtest -m 512m centos:7
docker run -itd --name memtest2 -m 300m --memory-swap=1g centos:7
# blkio
docker run -it --name iotest --device-write-bps /dev/sda:1MB centos:7
# 监控/验证
docker stats
docker exec -it <container> bashcat /sys/fs/cgroup/cpu/docker/<container-id>/cpu.cfs_quota_uscat /sys/fs/cgroup/memory/docker/<container-id>/memory.limit_in_bytes# 清理docker system prune -a   #删除 Docker 中所有未使用的资源,包括镜像、容器、网络和悬空卷(但默认不删除卷),以 ​释放磁盘空间。

三、数据卷容器

  数据卷是 Docker 中用于持久化存储数据的机制,通过数据卷容器,多个容器可以共享数据,避免数据丢失或重复管理。数据卷容器不运行应用程序,仅提供数据卷供其他容器挂载和使用。

#创建与挂载数据卷
docker run -itd -v /var/www/:/data1 --name web1 centos:7 /bin/bash
#创建数据卷容器
docker run -itd -v /data1 -v /data2 --name web2 centos:7 /bin/bash
docker run -itd --volumes-from web2 --name web3 centos:7 /bin/bash

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、端口映射

  端口映射机制使得容器内部运行的服务能够被外部网络访问。通过 -P 参数实现随机端口映射,或通过 -p 参数手动指定宿主机和容器之间的端口映射关系。

五、容器互联

  容器互联机制通过 --link 选项实现容器之间的网络通信,源容器和接收容器可以通过容器名称进行通信。尽管容器互联适用于简单的场景,但在复杂环境中,建议使用 Docker 网络来管理容器间的通信。

docker run -itd -P --name web1 centos:7 /bin/bash
docker run -itd -P --name web2 --link  web1:web1 centos:7 /bin/bash
docker exec -it web2 /bin/bash
ping web1

在这里插入图片描述

六、Docker 镜像的创建

  Docker 提供了多种创建镜像的方法:

  • 基于现有镜像创建:通过修改容器并提交为新的镜像。
  • 基于本地模板创建:从模板文件导入创建镜像。
  • 基于 Dockerfile 创建:通过编写 Dockerfile 实现镜像的自动化构建,支持定制化的镜像创建过程。
docker create -it centos:7 /bin/bash
docker ps -a
docker commit -m "new" -a "centos" <contarinet id> centos:test     #-m: 提交说明   -a:作者信息   centos:test  文件名称:标签

在这里插入图片描述

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
curl -L 下载路径 -o 保存路径
cat [文件名] | docker import - [名称]:[标签]
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER this is apache image <hmj>#镜像操作指令安装apache软件ADD CentOS-Base.repo /etc/yum.repos.d/RUN yum clean allRUN yum -y updateRUN yum -y install httpd#开启 80 端口EXPOSE 80#复制网站首页文件ADD index.html /var/www/html/index.htmlCMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]#准备html页面echo "RRRRRR" > index.htmldocker build -t httpd:centos .docker run -d -p 9090:80 httpd:centos

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结语

  Docker 作为一种强大的容器化技术,提供了丰富的功能和灵活的配置选项,能够帮助开发者和运维人员高效地管理和部署应用。通过深入理解 Docker 的网络管理、资源限制、数据卷管理、端口映射、容器互联以及镜像创建等方面的知识,读者可以更好地利用 Docker 提升应用的可靠性、可扩展性和可维护性。希望本文能够为您的 Docker 学习之旅提供有价值的参考和指导。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零实现 VGG-16

博客地址:https://www.cnblogs.com/zylyehuo/参考视频:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】需要用到的库torch安装有问题可参考网上教程pip install torchprotobufpip install protobufmodel.p…

完整教程:vlan Tag 概念及题目

完整教程:vlan Tag 概念及题目2025-10-12 12:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

WPF上位机入门教程

WPF上位机入门教程 顾名思义,是一个WPF上位机入门的教程,包含WPF基本控件使用方法、控件库、MVVM框架、IOC框架、日志、XML、串口、Modbus、PLC、SocketServer、SQLite、曲线绘制、文档导入导出等内容。 控件库Handy…

潘院士高瞻远瞩:三大趋势勾勒中国AI发展路径,元人文构想恰逢其时

潘院士高瞻远瞩:三大趋势勾勒中国AI发展路径,元人文构想恰逢其时 拜读潘云鹤院士在2025网易未来大会上的深刻洞见,深受启发。院士提出的三大趋势——专业大模型崛起、具身智能泛化深化、AI引领平台经济2.0——精准描…

2025家居MES厂家最新权威推荐榜:智能制造与高效管理深度

2025家居MES厂家最新权威推荐榜:智能制造与高效管理深度随着工业4.0时代的深入发展,家居制造业正迎来智能化转型的关键时期。制造执行系统(MES)作为连接企业计划层与控制层的核心枢纽,在家居行业的数字化进程中扮…

开源 C# 快速构建(七)通讯--串口

开源 C# 快速构建(七)通讯--串口pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

2025新能源冲压件厂家权威推荐榜:技术革新与品质保障深度解

2025新能源冲压件厂家权威推荐榜:技术革新与品质保障深度解新能源汽车产业的蓬勃发展带动了上游零部件领域的全面升级,其中冲压件作为电池包结构、电机壳体等关键部件的核心组成部分,其技术标准与品质要求正经历着革…

浮点数的相等性判断

在编程中,浮点数(如 C/C++ 中的float、double,Python 中的float)的赋值和相等性判断需要特别注意。因为浮点数在计算机中是近似表示的,直接使用==判断相等可能导致逻辑错误。一、浮点数的相等性判断 禁止直接使用…

ubuntu18

deb http://security.debian.org/debian-security buster/updates main 第三步:apt-get update之后若出现下面提示: 由于没有公钥,无法验证下列签名: NO_PUBKEY 112695A0E562B32A NO_PUBKEY 54404762BBB6E853 sudo…

2025国庆dp

经典例题 摆渡车 设fi表示i这个时刻发车最小答案,枚举上一次发车的时间j,容易转移 但这是O(t^2) 考虑优化 1.斜率优化 2.发现n,m<t,设计fi这种状态很浪费 优化1:若两次发车间隔>2m,完全可以再发一辆车,于是…

2025数控锯床厂家权威推荐榜:精密加工与高效生产口碑之选

2025数控锯床厂家权威推荐榜:精密加工与高效生产口碑之选在制造业转型升级的浪潮中,数控锯床作为金属加工领域的关键设备,其技术水平与性能表现直接影响着生产效率和产品质量。随着工业4.0时代的深入发展,数控锯床…

Java集成SaToken构建登录

Java集成SaToken构建登录pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

FFmpeg开发笔记(八十二)使用国产直播服务器smart_rtmpd执行推流操作

​《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2 FFmpeg向网络推流”介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能比较简单,也不方便个性化…

实验室装修厂家最新权威推荐榜:专业设计与施工品质深度解析

实验室装修厂家最新权威推荐榜:专业设计与施工品质深度解析在科技创新驱动发展的时代背景下,实验室作为科研创新的重要载体,其装修质量直接关系到实验结果的准确性和科研人员的安全。优秀的实验室装修不仅要满足基本…

生成式AI在红队测试中的应用:构建自动化工具

本文探讨如何利用生成式AI和大语言模型构建红队测试工具,包括自动化社交工程、代码生成和侦察等关键技术,通过实际Python代码示例展示AI在网络安全领域的实际应用。生成式AI为黑客服务:构建红队测试工具 红队测试人…

杂题 10月份

P3509 [POI 2010] ZAB-Frog 先考虑双指针处理出 \(nxt\),然后就是倍增板子了。注意直接倍增会被卡常,有一个 trick 是要二进制分解然后就没了。 P3811 【模板】模意义下的乘法逆元 卧槽,本以为是简单的费马小定理求…

2025年UV LED点光源厂家权威推荐榜:精准固化与高效能

2025年UV LED点光源厂家权威推荐榜:精准固化与高效能随着工业4.0时代的深入发展,UV LED点光源作为精密制造领域的关键设备,正迎来技术革新与市场需求的爆发式增长。据行业数据显示,全球UV固化设备市场规模预计在20…

NVR软件快速对比表

NVR软件快速对比表 一、核心数据对比(百分制评分)软件名称 系统占用 功能丰富度 AI智能 易用性 中文支持 性价比 总评分 推荐度Agent DVR 75 98 95 92 80 98 95 ⭐⭐⭐⭐⭐Surveillance Station 70 95 85 95 100 60 …

20232410 2025-2026-1 《网络与系统攻防技术》 实验一实验报告

一、实验目的 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正…

在Windows系统打造基于ConEmu的命令行工具环境

需求背景 对于git工具的使用,个人习惯了通过命令行进行操作。特别是当需要管理多个项目时,希望命令行工具支持多标签页方式便于切换,并且具备保存历史标签页的功能。 上述诉求在Linux/Mac系统下都比较好实现,但是在…