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

相关推荐
xu_ws4 小时前
Linux CentOS 7.9 MySQL 8.0安装配置全攻略
linux·运维·mysql·centos
starsky_walker4 小时前
【工具教程系列】--如何配置github的ssh
运维·ssh·github
l1t4 小时前
Python 字符串反转方法
linux·开发语言·python
爱潜水的小L4 小时前
自学嵌入式day37,网络编程
开发语言·网络·php
ベadvance courageouslyミ4 小时前
网络编程基础(一)
网络·udp·ip
饼饼饼4 小时前
从 0 到 1:前端 CI/CD 实战 ( 第一篇: 云服务器环境搭建)
运维·前端·自动化运维
小二·5 小时前
AI工程化实战《五》:私有化部署全栈指南——Qwen/Qwen-VL 本地化落地与生产级运维(万字深度长文)
运维·人工智能
叹了口丶气5 小时前
CentOS 7编译Python3.10时,SystemError: <built-in function compile> returned NULL
linux·运维·centos
Lueeee.5 小时前
FFMPEG输出模块初始化
linux·ffmpeg