首页 > 系统相关 >linux系统创建私有容器仓库和docker容器的资源限制

linux系统创建私有容器仓库和docker容器的资源限制

时间:2024-03-14 18:31:40浏览次数:22  
标签:容器 限制 -- 内存 linux docker CPU

私有仓库创建和资源限制

创建私有仓库

上传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

限制bps和iops
bps是 byte per second ,每秒读写的数量

iops是 io per second ,每秒IO的次数

注:目前Block I0限额只对direct IO (不使用文件缓存)有效。

标签:容器,限制,--,内存,linux,docker,CPU
From: https://blog.csdn.net/qq_59207739/article/details/136718463

相关文章

  • DDCMS 后端容器化解决方案:实现优雅的环境隔离,提升开发者体验
    DDCMS后端容器化解决方案:实现优雅的环境隔离,提升开发者体验浅聊一下,最近在参与DDCMS的组件开发和测试,碰到的一些问题,这个项目涉及了DDCMS-Contract和DDCMS-Service以及DDCMS-Front。合约、后端、前端。合约整理完了整体的业务和设计,当前在弄后端的时候,每一次部署稍微麻烦......
  • 在Linux中,哪些命令可以管理系统服务,如启动、停止、重启一个服务?
    在Linux中,管理系统服务涉及到对运行中的进程或后台任务的启动、停止、重启等操作。这些操作通常通过特定的命令和工具来完成。下面详细说明了如何执行这些任务:1.启动服务使用service命令在早期的Linux发行版中,service命令是启动服务的主要方式。例如:service服务名start使......
  • Linux安装JDK
    1.下载OpenJDK2.在/usr/创建java目录,命令mkdir/usr/java3.将OpenJDK复制进/usr/java目录,cpOpenJDK名称/usr/java4.进入/usr/java目录,cd/usr/java5.解压tarxvfOpenJDK名称6.删除OpenJDK包,rmOpenJDK名称,输入y,回车7.配置环境变量,执行vim/etc/profile,输入i编辑,......
  • docker_03days
    迁移备份#镜像从哪来的?1dockerpull拉的2通过容器打包成镜像-centos镜像运行成容器---》装了vim-把装了vim的容器---》打包成镜像-以后拿到这个镜像--》再运行成容器,都会带vim命令3Dockerfile构建#容器保存为......
  • Linux进程状态
    目录1.R运行状态(running)2.S睡眠状态(sleep)3.T或t状态(stopped或tracingstop)4.Z状态(zombie)(僵尸进程)1.R运行状态(running)并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。在CentOS7中,当查看进程状态时,可能会注意到很少看到进程处于状态为"R"(Ru......
  • docker基础知识
    Docker容器基础介绍和操作-清白之年980410-博客园<linkrel="stylesheet"href="/css/blog-common.min.css?v=g-c5Yfdgh3oAoyQibjhmJ6ylVcBcMRHNIG6JkF70hpY"/><linkid="MainCss"rel="stylesheet"href="/skins/mountainink......
  • Linux下安装Docker
    Ubuntu安装Docker环境Ubuntu安装Docker环境的方法,在Linux服务器上运行docker用于开发测试通过Ubuntu自带的apt存储库在安装Docker引擎首次在新主机运行之前,需要更新Dockder存储库,然后你在存储库安装或更新Docker更新Dockerapt存储库sudoapt-getupdatesudoapt-......
  • 使用docker搭建kasm desktop
    Kasm是一种基于Docker的解决方案,它可以提供Web应用程序和桌面环境的即时访问。使用Kasm,你可以通过Web浏览器在任何设备上安全地访问应用程序和桌面环境。下面将详细介绍如何使用DockerCLI和DockerCompose两种方式搭建KasmDesktop,并解释每个参数的作用。使用DockerCLI搭......
  • 使用docker搭建mongodb
    使用DockerCLI搭建MongoDB1.运行MongoDB容器首先,我们使用以下命令来启动一个MongoDB容器:dockerrun-itd--namemongodb_comm-v$PWD/data:/data/db-p27017:27017mongo:4.4--auth参数解释:-itd:这三个参数通常一起使用,i表示交互式模式,t分配一个伪......
  • Linux高可用性方案之Heartbeat安装(高级运维)
    安装Heartbeat前的准备 Heartbeat集群必须的硬件从下图看出,构建一个Heartbeat集群系统必须的硬件设备有:节点服务器;网络和网卡;共享磁盘。节点服务器安装Heartbeat至少需要两台主机,并且对主机的要求不高,普通的PC服务器即可满足要求。当然,也可以在虚拟机上安装Heartbeat,现在Hear......