docker(三)

文章目录

  • 前言
  • 一、资源限制
    • [1.1 CPU 资源控制](#1.1 CPU 资源控制)
    • [1.1.1 设置cpu使用率上限](#1.1.1 设置cpu使用率上限)
      • [1.1.2 设置cpu占比](#1.1.2 设置cpu占比)
      • [1.1.3 绑定指定CPU](#1.1.3 绑定指定CPU)
    • [1.2 内存使用限制](#1.2 内存使用限制)
    • [1.3 磁盘 IO控制](#1.3 磁盘 IO控制)
      • [1.3.1 参数](#1.3.1 参数)
  • [二、 数据卷容器](#二、 数据卷容器)
    • [2.1 数据卷的作用](#2.1 数据卷的作用)
    • [2.2 数据卷创建](#2.2 数据卷创建)
    • [2.3 数据卷容器的概念](#2.3 数据卷容器的概念)
    • [2.4 数据卷容器的创建](#2.4 数据卷容器的创建)
  • 三、端口映射
    • [3.1 为什么要做端口映射](#3.1 为什么要做端口映射)
    • [3.2 创建端口映射](#3.2 创建端口映射)
  • 四、容器互联
    • [4.1 容器互联的概念](#4.1 容器互联的概念)
    • [4.2 创建容器互联](#4.2 创建容器互联)
  • 总结

前言

本文继续讲解docker内容,包括资源限制、数据卷容器、端口映射、容器互联。

一、资源限制

1.1 CPU 资源控制

概述:

1、cgroups是 Linux 内核提供的资源控制机制。对容器非常重要,可控制:资

源限制、优先级分配、资源统计、任务控制(挂起/恢复/终止)。

2、Docker 通过 cgroups 来实现 CPU、内存、IO 等限制与度量。

cgroups 的 4 大功能:

1、资源限制:限制任务使用的总资源量。

2、优先级分配:如通过 cpu 时间片和 IO 带宽分配优先级。

3、资源统计:统计 cpu 时长、内存用量等。

4、任务控制:对 cgroup 中的进程执行挂起/恢复等操作。

1.1.1 设置cpu使用率上限

完全占用1个内核为100000

docker run -itd --name centos-1 --cpu-quota 50000 centos:7 /bin/bash ------------------------创建并开启一个容器名为centos-1,cpu使用率为50%

cd /sys/fs/cgroup/cpu/docker/id号 ------------------------------------切换到要改限制的容器目录

echo "要改权重值" >

1.1.2 设置cpu占比

概念:当cpu使用率过高时,两个容器会抢占cpu,如果设置容器c1的权重为10,容器c2的权重为20,则cpu使用率会根据权重比例进行分配,也就是容器1为33.3%,容器2为66.7%(1核)。

(注意:必须是在cpu抢占时)

--cpu-shares 指定相对权重(默认 1024),最低为2

演示:

第一步 创建两个容器并运行,设置权重为1:2

docker run -itd --name centos1 --cpu-shares 512 centos:7 ------------------------创建并运行一个容器名字为centos1,cpu使用权重为2。

docker run -itd --name centos2 --cpu-shares 1024 centos:7 ------------------------创建并运行一个容器名字为centos2,cpu使用权重为4。

第二步 在容器中做压力测试,使cpu占用率爆满。

stress -c 4 ------------------------------------创建四个进程进行压力测试

第三步 输入docker stats 查看cpu占用率

1.1.3 绑定指定CPU

docker run -itd --name xjy1 --cpuset-cpus "1,3" centos:7 /bin/bash ------------------创建并启动容器名字为xjy1,绑定使用的cpu为第一个到第三个

1.2 内存使用限制

基础参数

-m, --memory :限制容器可用的物理内存(例如 -m 512m )。

--memory-swap :限制容器可用的物理内存 + swap 总量(必须与 -m 一起使用以明确 swap 上限)。

-m 300m --memory-swap=1g:物理内存为300MB,总内存为1G,swap内存为700MB

(注:不设置swap,则一般默认swap内存大小为物理内存的两倍)

内存占用方式:先占用物理内存,物理内存站满了再使用swap内存

特殊参数:

若 --memory-swap = -1 :swap 不受限制(宿主机可用多少 swap 就用多少)。

若 --memory-swap = -m :容器不能使用 swap(物理内存用尽会触发 OOM)。

操作举例:

docker run -itd --name xjy2 -m 1G centos:7 /bin/bash ------------------------------限制内存为1G

1.3 磁盘 IO控制

1.3.1 参数

--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 ------------------------------------限制写入速率为1MB/s

(注:版本20.10.18,其他版本可能不支持,因此这里不做演示)

验证:

dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct ------------------------------输出示例说明: 10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s → 写速被限为约 1MB/s。

二、 数据卷容器

2.1 数据卷的作用

数据卷是 Docker 中一种专门为容器提供持久化存储的机制,通过数据卷,可以做到类似备份的作用,比如说将主机的某个文件挂载到容器中的某个文件,那么容器中文件的所有数据都会在主机的文件中,且如果容器停止,主机文件的数据不会消失,这种方式有利于避免容器的数据丢失问题。

2.2 数据卷创建

第一步 创建与挂载数据卷

docker run -v /opt/1.txt:/data1 --name centos4 -itd centos:7 /bin/bash ------------------------------创建一个容器,名字为centos4,将主机opt的目录挂载到data1下

第二步 在容器中被挂载目录创建一个文件并输入数据

echo "hello xjy" > /xjy/4.txt

第三步 在主机中查看挂载点中的文件

cat /opt/4.txt

2.3 数据卷容器的概念

数据卷容器是容器与容器之间的持久化(数据同步或备份),从而避免数据丢失产生的问题。

简单说:数据卷容器就是一个「数据中转站 / 共享仓库」,其他容器可以通过它来读取或写入同一个数据卷,实现多容器数据共享和持久化。

2.4 数据卷容器的创建

第一步 创建一个容器并挂载两个目录

docker run -itd --name centos-2 -v /xjy1 -v /xjy2 centos:7 /bin/bash

第二步 创建另一容器

docker run -itd --name centos-3 --volumes-from centos-2 centos:7 /bin/bash

第三步 在一台容器中的挂载目录下的文件输入数据

第四步 在另一台主机中查看

数据卷 (Data Volumes) 是容器中的特殊目录,用于持久化存储数据。它可以通过宿主机的目录进行挂载,实现容器与宿主机之间的数据共享。

数据卷容器 (Data Volumes Containers) 允许容器之间共享数据卷,避免每个容器都需要挂载宿主机目录。使用 --volumes-from 可以让多个容器共享同一数据卷。

三、端口映射

在上篇博客其实有讲过这部分内容,这边带大家简单回顾一下。

3.1 为什么要做端口映射

外网直接访问容器是做不到的,因为容器的虚拟网卡需要通过连接到主机的网卡才可以,而网卡连接需要用端口的连接才可以做到,也就是说,如果需要让外部网络能够访问容器中的服务,就需要使用端口映射机制。端口映射将宿主机的端口映射到容器内的端口,从而使得外部网络能够通过访问宿主机的端口,进而访问容器内的服务。

3.2 创建端口映射

第一步 创建端口映射

docker run -d --name httpd -P httpd:latest ------------------------------创建端口映射,并且随机分配端口(默认从32768)

docker run -d --name httpd1 -p 1111:80 httpd:latest ------------------------------自定义分配映射端口

第二步 访问主机ip与容器映射到主机的端口

四、容器互联

4.1 容器互联的概念

容器互联是一种让容器之间能够通过网络相互通信的机制。通过在容器间建立网络通信隧道,源容器和接收容器可以互相看到对方的指定信息。Docker 提供了 --link 选项来实现容器互联,在一个容器中可以通过另一个容器的名称来访问它。

4.2 创建容器互联

第一步 创建一个容器(源容器)

docker run -itd --name web1 centos:7 /bin/bash

第二步 创建第二个容器连接到容器1,并设置容器1的别名(接受容器)

docker run -itd --name centos_2 --link centos_1:c1 centos:7 /bin/bash ------------------------创建第二个容器并连接到第一个容器,设置别名为c1

第三步 第二个容器尝试ping第一个容器(通过ping别名的方式)

ping 别名 ------------------------------查看容器之间的连通性

(这个连接是单向的,因为容器1不知道容器2的别名,无法识别)

(由图可知,两者可以通过别名进行网络连通)

总结

本文继续讲解docker内容,包括资源限制、数据卷容器、端口映射、容器互联,希望本文内容对大家有所帮助,谢谢收看😜

相关推荐
大树886 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush46 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5207 小时前
Linux 11 动态监控指令top
linux
Inhand陈工7 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn867 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
网络研究院8 小时前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智8 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest8 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全