当前位置: 首页 > news >正文

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

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.gsyq.cn/news/19376.html

相关文章:

  • 潘院士高瞻远瞩:三大趋势勾勒中国AI发展路径,元人文构想恰逢其时
  • 开源 C# 快速构建(七)通讯--串口
  • 2025新能源冲压件厂家权威推荐榜:技术革新与品质保障深度解
  • 2025国庆dp
  • 2025数控锯床厂家权威推荐榜:精密加工与高效生产口碑之选
  • Java集成SaToken构建登录
  • 实验室装修厂家最新权威推荐榜:专业设计与施工品质深度解析
  • 生成式AI在红队测试中的应用:构建自动化工具
  • ZR 2025 十一集训 Day 1
  • 2025广东粉末厂家最新权威推荐榜:技术实力与市场口碑深度解
  • 2025年成都软件开发机构最新推荐排行榜,涵CRM,物联网,运维,仓储,人力多系统,技术实力与市场口碑深度解析
  • 语文_作文_开头结尾
  • 2025智能吉他厂家最新权威推荐榜:创新科技与卓越音质完美融
  • 2025景区售票系统厂家最新权威推荐榜:智慧票务与高效管理口
  • 对我学过的算法的一些总结
  • Java二维数组
  • 在Ubuntu系统上设置syslog日志轮替与大小限制
  • 从 “有人值守” 到 “少人运维”:智能巡检机器人重塑配电室管理模式 - 实践
  • 2025年10月最新推荐卫星电话品牌发布,涵防爆对讲卫星电话,卫星电话应急指挥系统,卫星电话防爆对讲终端,防爆手持卫星电话!
  • dataset类
  • [ARC081E] Dont Be a Subsequence 题目分析
  • macos单独打开模拟器simulator
  • 子序列自动机学习笔记
  • 2018牛客网暑期ACM多校训练营(第一场)
  • 20232311 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 你的认知模式,决定了你的人生高度
  • 在Typora中数学公式无法显示问题
  • C# 集合框架完全指南:从IEnumerable到ObservableCollection的深度解析 - 教程
  • docker常用命令 - 实践
  • 如何在UE中创建动态枚举