文章目录
- 前言
- 一、资源限制
-
- [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内容,包括资源限制、数据卷容器、端口映射、容器互联,希望本文内容对大家有所帮助,谢谢收看😜