当前位置: 首页 > 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 提供了多种网络模式,以满足不同的应用场景需求:

  • Host 模式:容器与宿主机共享网络栈,直接使用宿主机的 IP 地址。
  • Container 模式:新创建的容器与已有的容器共享一个 Network Namespace。
  • None 模式:容器没有网络配置,只有回环接口(lo)。
  • Bridge 模式: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 资源的控制,主要方法包括:

  • 设置 CPU 使用率上限:通过 --cpu-quota--cpu-period 参数控制容器的 CPU 使用率。
  • 设置 CPU 占用比:通过 --cpu-shares 参数设置容器的 CPU 使用权重。
  • 绑定指定 CPU:通过 --cpuset-cpus 参数将容器进程绑定到宿主机的指定 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_us
cat cpu.cfs_quota_us
echo 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_bytes
cat 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> bash
cat /sys/fs/cgroup/cpu/docker/<container-id>/cpu.cfs_quota_us
cat /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 all
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
#准备html页面
echo "RRRRRR" > index.html
docker build -t httpd:centos . 
docker run -d -p 9090:80 httpd:centos

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

结语

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

http://www.dtcms.com/a/414257.html

相关文章:

  • count down 83 days
  • 华为云速建站如何用网页设计制作个人网站
  • 做网站用什么压缩代码和图片如何做淘宝商城网站
  • 基于STM32与influxDB的电力监控系统-3
  • STM32 程序下载失败的问题原因和解决方法集合!
  • 【读论文】AI笔记(一)9月26日组会前
  • 逻辑的回归——一阶谓词逻辑及其变体在自然语言处理深层语义分析中的作用与前瞻
  • Java EE初阶启程记03---Thread类及常见方法
  • 医疗行业 AI 投毒攻击原理及防护研究
  • PostIn入门到实战(5) - 如何快速导入PostMan数据,实现数据迁移
  • 让别人做网站需要注意什么服务器试用
  • 京东JoyAgent-JDGenie开源多智能体系统如何重塑AI应用落地新范式
  • idea学习日记7: StringBuilder的基本操作
  • MySQL专用服务器自动调优指南
  • Ubuntu24.04 安卓模拟器安装指南
  • 做餐饮网站价格网站建设内部优化
  • AI大模型开发语言排行
  • UMI企业智脑知识与数据管理:企业的智慧宝库
  • B3611 【模板】传递闭包-普及/提高-
  • 网上帮别人做网站深圳网站营销公司
  • 国内完美安装 Rust 环境 + VSCode 编写 Hello World 完整指南(2025 最新)
  • 基于 HTML、CSS 和 JavaScript 的智能图像灰度直方图匹配系统
  • 【自然语言处理与大模型】LlamaIndex快速入门①
  • 基于html2web和deepseek实现单词卡片识记功能的web设计
  • 定制开发开源AI智能名片S2B2C商城小程序在智慧零售价值链重构中的价值研究
  • 虚拟机建设网站猎聘网招聘
  • Uvicorn - Python ASGI Web 服务器
  • Ubuntu硬件性能测试工具
  • DragonBalls_One004
  • LinuxC++——gflags框架入门