私有仓库创建和资源限制
创建私有仓库
上传harbor压缩包
解压
下载docker-compose
进入解压后的目录
修改配置文件
mv harbor.yml.tmpl harbor.yml
vim harbor.yml
修改文件中主机名,端口,将https的模块注释
运行install.sh
浏览器访问ip+端口
默认用户名admin
默认密码Harbor12345
上传镜像,下拉镜像到私有仓库配置访问白名单
vim /etc/docker/daemon.json
"insecure-registries": ["http://10.12.153.250:8888"]
docker资源限制
在使用 docker 运行容器时,如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说会导致容器资源使用不公平;大的来说,可能会导致主机和集群资源耗尽,服务完全不可用。
CPU 和内存的资源限制已经是比较成熟和易用,能够满足大部分用户的需求。磁盘限制也是不错的,虽然现在无法动态地限制容量,但是限制磁盘读写速度也能应对很多场景。
至于网络,docker 现在并没有给出网络限制的方案,也不会在可见的未来做这件事情,因为目前网络是通过插件来实现的,和容器本身的功能相对独立,不是很容易实现,扩展性也很差。
资源限制一方面可以让我们为容器(应用)设置合理的 CPU、内存等资源,方便管理;另外一方面也能有效地预防恶意的攻击和异常,对容器来说是非常重要的功能。
系统压力测试工具stress
cpu资源限制
限制CPU Share
docker 允许用户为每个容器设置一个数字,代表容器的 CPU share,默认情况下每个容器的 share 是 1024。这个 share 是相对的,本身并不能代表任何确定的意义。当主机上有多个容器运行时,每个容器占用的 CPU 时间比例为它的 share 在总额中的比例。docker 会根据主机上运行的容器和进程动态调整每个容器使用 CPU 的时间比例。
docker run --rm -it progrium/stress --cpu 4 //限制4个进程
docker run --rm -it progrium/stress --cpu 4
docker run --rm -it -c 512 progrium/stress --cpu 4
这两个容器的 CPU 使用率应该大致为 2:1
限制CPU核数
限制容器能使用的 CPU 核数
-c --cpu-shares 参数只能限制容器使用 CPU 的比例,或者说优先级,无法确定地限制容器使用 CPU 的具体核数;从 1.13 版本之后,docker 提供了 --cpus 参数可以限定容器能使用的 CPU 核数。这个功能可以让我们更精确地设置容器 CPU 使用量,是一种更容易理解也因此更常用的手段.
--cpus 后面跟着一个浮点数,代表容器最多使用的核数,可以精确到小数点二位,也就是说容器最小可以使用 0.01 核 CPU。
docker run --rm -it --cpus 1.5 progrium/stress --cpu 3 //限制容器只能使用 1.5 核数 CPU
CPU绑定
docker run --rm -it --cpuset-cpus=0,1 progrium/stress --cpu 2 //只使用cpu1,2来运行这两个线程
mem资源限制
docker 默认没有对容器内存进行限制,容器可以使用主机提供的所有内存。
不限制内存带来的问题:
这是非常危险的事情,如果某个容器运行了恶意的内存消耗软件,或者代码有内存泄露,很可能会导致主机内存耗尽,因此导致服务不可用。可以为每个容器设置内存使用的上限,一旦超过这个上限,容器会被杀死,而不是耗尽主机的内存。
限制内存带来的问题:
限制内存上限虽然能保护主机,但是也可能会伤害到容器里的服务。如果为服务设置的内存上限太小,会导致服务还在正常工作的时候就被 OOM 杀死;如果设置的过大,会因为调度器算法浪费内存。out of memory
合理做法:
1. 为应用做内存压力测试,理解正常业务需求下使用的内存情况,然后才能进入生产环境使用
2. 一定要限制容器的内存使用上限,尽量保证主机的资源充足,一旦通过监控发现资源不足,就进行扩容或者对容器进行迁移如果可以(内存资源充足的情况)
3. 尽量不要使用 swap,swap 的使用会导致内存计算复杂,对调度器非常不友好
docker 限制容器内存使用量:
docker 启动参数中,和内存限制有关的包括(参数的值一般是内存大小,也就是一个正数,后面跟着内存单位 b、k、m、g,分别对应 bytes、KB、MB、和 GB):
-m --memory:容器能使用的最大内存大小,最小值为 4m
如果限制容器的内存使用为 64M,在申请 64M 资源的情况下,容器运行正常(如果主机上内存非常紧张,并不一定能保证这一点):
docker run --rm -it -m 64m progrium/stress --vm 1 --vm-bytes 64M --vm-hang 0
容器可以正常运行。
-m 64m:限制你这个容器只能使用64M
--vm-bytes 64M:将内存撑到64兆是不会报错,因为我有64兆内存可用。
hang:就是卡在这里。
--vm:生成几个占用内存的进程
而如果申请 150M 内存,会发现容器里的进程被 kill 掉了(worker 6 got signal 9,signal 9 就是 kill 信号)
docker run --rm -it -m 64m progrium/stress --vm 1 --vm-bytes 150M --vm-hang 0
限制IO
标签:容器,限制,--,内存,linux,docker,CPU From: https://blog.csdn.net/qq_59207739/article/details/136718463限制bps和iops
bps是 byte per second ,每秒读写的数量iops是 io per second ,每秒IO的次数
注:目前Block I0限额只对direct IO (不使用文件缓存)有效。