搜索结果

×

搜索结果将在这里显示。

🚀 04-Docker资源配额及私有镜像仓库

一、Docker 资源配额(Cgroup 资源限制)

Docker 基于 Linux Cgroup 机制实现容器资源管控,可限制 CPU、内存、磁盘 IO 三类核心资源,避免单容器占用过多宿主机资源。

1. CPU 资源控制

1.1 CPU 份额权重(--cpu-shares /-c)

  • 作用:设置 CPU 相对加权值,默认所有容器份额为 1024,仅在多个容器争抢同一 CPU 核心时生效。

  • 特点:不是固定分配多少 GHz CPU,而是相对优先级。CPU 空闲时,低权重容器也能占用全部 CPU 资源。

示例:创建 512 权重的容器

# 查看参数帮助
docker run --help | grep cpu-shares

# 创建指定CPU份额的容器
docker run -it --cpu-shares 512 centos /bin/bash

# 容器内查看生效的配置
cat /sys/fs/cgroup/cpu/cpu.shares
# 输出:512

权重规则说明

  • 容器 A(1024)、容器 B(512)争抢同核心 CPU 时,A 获得的 CPU 时间片约为 B 的 2 倍。

  • 若只有一个容器运行,即使权重很低,也会独占全部 CPU 资源。

1.2 CPU 核心绑定(--cpuset-cpus)

  • 作用:强制容器只能运行在指定的 CPU 核心上,适合 NUMA 架构服务器做性能优化。

  • 配套参数 --cpuset-mems 可绑定内存节点,仅多内存节点服务器有明显效果。

示例:容器只能使用 0 号和 1 号 CPU 核心

docker run -itd --name test-cpu --cpuset-cpus 0,1 centos /bin/bash

扩展:服务器三大架构

  1. SMP(对称多处理器):普通双路 x86 服务器,多 CPU 共享内存

  2. NUMA(非一致存储访问):IBM 小型机等,每个 CPU 有独立内存节点

  3. MPP(海量并行处理):大型机,多节点分布式并行计算

1.3 CPU 配额混合验证(stress 压测)

通过压力测试工具 stress 跑满 CPU,验证权重和核心绑定是否生效。

(1)安装 stress 工具
yum install -y epel-release
yum install stress -y

stress 核心参数:

  • -c n:生成 n 个进程,持续计算随机数平方根,占满 CPU

  • -i n:生成 n 个进程,调用 sync 刷盘,测试磁盘 IO

  • -m n:生成 n 个进程,持续申请 / 释放内存,测试内存

  • -t 时间:运行指定时长后自动停止

(2)实验:验证 CPU 份额 + 核心绑定效果

实验目标:两个容器都绑定 CPU0、CPU1,权重分别为 512 和 1024,验证 CPU 占用比例。

  1. 启动两个测试容器
# 容器docker10:绑定0、1核心,权重512
docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash

# 容器docker20:绑定0、1核心,权重1024
docker run -itd --name docker20 --cpuset-cpus 0,1 --cpu-shares 1024 centos /bin/bash
  1. 两个容器内分别安装 stress 并跑满 CPU
# 进入docker10
docker exec -it docker10 /bin/bash
yum install -y epel-release && yum install stress -y
# 启动2个进程,跑10分钟
stress -c 2 -v -t 10m

# 进入docker20,执行相同操作
docker exec -it docker20 /bin/bash
yum install -y epel-release && yum install stress -y
stress -c 2 -v -t 10m
  1. 宿主机执行 top1 查看各核心占用
  • 预期 1:仅 CPU0、CPU1 被占满,其他核心空闲 → 核心绑定生效

  • 预期 2:docker20 的 CPU 占用约为 docker10 的 2 倍 → 权重限制生效

2. 内存资源控制(-m /--memory)

  • 作用:限制容器最大可使用内存,超出可能触发 OOM(内存溢出)被系统杀掉。

示例 1:限制容器最大内存 128M

docker run -it -m 128m centos /bin/bash

# 容器内验证限制
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
# 输出:134217728(对应128MB)

示例 2:同时限制 CPU 核心 + 内存

docker run -it --cpuset-cpus 0,1 -m 128m centos

3. 磁盘 IO 资源控制

  • 作用:限制容器对磁盘的读写速度,防止单容器吃光磁盘 IO 影响其他服务。

  • 核心参数:

    • --device-read-bps:限制磁盘读速度,单位 kb/mb/gb

    • --device-write-bps:限制磁盘写速度,单位 kb/mb/gb

示例:限制容器对 /dev/sda 磁盘写入速度最高 2MB/s

# 启动容器,挂载磁盘设备并限制写速度
docker run -it -v /var/www/html/:/var/www/html \
  --device /dev/sda:/dev/sda \
  --device-write-bps /dev/sda:2mb centos /bin/bash

# 容器内用dd命令测试写速度
time dd if=/dev/sda of=/var/www/html/test.out bs=2M count=50 oflag=direct,nonblock

dd 参数说明:direct 跳过缓存直接写盘,nonblock 非阻塞 IO,确保测速准确
预期结果:写入速度稳定在 2MB/s 左右,限制生效

4. 容器运行结束自动释放(--rm)

  • 作用:容器执行完命令后自动删除,释放资源,适合一次性临时任务。

示例:容器执行 sleep 6 秒后自动删除

docker run -it --rm --name zhappy centos sleep 6

# 6秒后查看,容器已自动消失
docker ps -a | grep zhappy

二、Harbor 私有镜像仓库

1. Harbor 介绍

Harbor 是 VMware 开源的企业级 Docker 镜像仓库,相比官方公共仓库,更适合企业内网使用,核心能力:

  • RBAC 角色权限管理、LDAP 集成

  • 镜像复制、漏洞扫描、日志审计

  • 中文 Web 管理界面、镜像签名等

官网地址:https://github.com/goharbor/harbor

实验环境

  • 主机名:harbor

  • IP:192.168.40.181

  • 配置建议:4vCPU / 4G 内存 / 100G 硬盘

2. 自签发 HTTPS 证书

Harbor 默认推荐 HTTPS 访问,先生成自签证书。

# 设置主机名
hostnamectl set-hostname harbor && bash

# 创建证书目录
mkdir -p /data/ssl && cd /data/ssl

步骤 1:生成 CA 根证书

# 生成CA私钥
openssl genrsa -out ca.key 3072

# 生成CA根证书,有效期10年
openssl req -new -x509 -days 3650 -key ca.key -out ca.pem
# 按提示填写国家、省份、城市等信息即可

步骤 2:生成 Harbor 域名证书

# 生成harbor域名私钥
openssl genrsa -out harbor.key 3072

# 生成证书签发请求
openssl req -new -key harbor.key -out harbor.csr
# Common Name 必须填 harbor(和主机名、配置一致)

步骤 3:用 CA 签发 harbor 证书

openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key \
  -CAcreateserial -out harbor.pem -days 3650

3. 宿主机 Docker 环境安装

和常规 Docker 安装步骤一致,简要流程:

  1. 关闭 firewalld、iptables、SELinux

  2. 配置时间同步、安装基础依赖包

  3. 安装 docker-ce、启动并设置开机自启

  4. 开启内核桥接转发参数

  5. 配置镜像加速器并重启 Docker

详细安装命令可参考 Docker 入门文档,此处不再重复。

4. 安装 Harbor

步骤 1:准备安装包

  1. 上传 harbor-offline-installer-v2.3.0-rc3.tgz 离线安装包

  2. 上传 docker-compose 二进制文件

# 创建安装目录
mkdir -p /data/install && cd /data/install

# 解压安装包
tar zxvf harbor-offline-installer-v2.3.0-rc3.tgz
cd harbor

步骤 2:安装 docker-compose

# 将二进制文件移动到系统路径并授权
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose

docker-compose 是 Docker 官方容器编排工具,可批量管理多个关联容器,Harbor 依赖它启动多组件。

步骤 3:修改 Harbor 配置文件

# 复制配置模板
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

核心修改项:

# 主机名,和证书域名一致
hostname: harbor

# HTTPS证书路径
certificate: /data/ssl/harbor.pem
private_key: /data/ssl/harbor.key

默认管理员账号:admin,默认密码:Harbor12345

步骤 4:加载镜像并执行安装

# 加载harbor离线镜像包
docker load -i docker-harbor-2-3-0.tar.gz

# 执行安装脚本
./install.sh

出现 Harbor has been installed and started successfully. 即安装成功。

Harbor 启停命令

cd /data/install/harbor
# 停止
docker-compose stop
# 启动
docker-compose start

5. Web 界面使用说明

  1. 本地电脑配置 hosts 解析:192.168.40.181 harbor

  2. 浏览器访问 https://harbor,接受自签证书风险

  3. 使用 admin / Harbor12345 登录

基础操作

  • 默认公共项目 library,存放基础镜像

  • 「新建项目」→ 输入项目名 → 勾选「公开」→ 确定,即可创建可公开拉取的镜像仓库

6. 客户端上传镜像到 Harbor

步骤 1:客户端 Docker 配置信任 Harbor

vim /etc/docker/daemon.json

添加 insecure-registries 配置:

{
  "registry-mirrors": ["https://rsbud4vc.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.40.181","harbor"]
}

重启 Docker 生效:

systemctl daemon-reload && systemctl restart docker

步骤 2:登录 Harbor

docker login 192.168.40.181
# 输入账号 admin 密码 Harbor12345
# 出现 Login Succeeded 即登录成功

步骤 3:镜像打标签并上传

# 1. 准备本地镜像(例:tomcat)
docker load -i tomcat.tar.gz

# 2. 给镜像打标签,格式:仓库地址/项目名/镜像名:版本
docker tag tomcat:latest 192.168.40.181/test/tomcat:v1

# 3. 推送到Harbor
docker push 192.168.40.181/test/tomcat:v1

推送完成后,可在 Web 界面 test 项目中看到镜像。

7. 从 Harbor 下载镜像

# 删除本地镜像
docker rmi -f 192.168.40.181/test/tomcat:v1

# 从Harbor拉取
docker pull 192.168.40.181/test/tomcat:v1