registry私有仓库部署与docker-cgroup资源控制

私有仓库

1、下载registry

[root@localhost ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
6a428f9f83b0: Pull complete 
90cad49de35d: Pull complete 
b215d0b40846: Pull complete 
429305b6c15c: Pull complete 
6f7e10a4e907: Pull complete 
Digest: sha256:265d4a5ed8bf0df27d1107edb00b70e658ee9aa5acb3f37336c5a17db634481e
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

2、修改私有仓库地址

vim /etc/docker/daemon.json
	{
	 "insecure-registries":["192.168.218.214:5000"],		##添加,本地地址端口:5000
	}

[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl restart docker

3、创建私有仓库容器

[root@localhost ~]# docker create -it registry /bin/bash
faa27a53a8688d383fa26c59f33415e859dc9b873c25fa76cb6f1e5e58daeb50
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS    PORTS     NAMES
faa27a53a868   registry   "/entrypoint.sh /bin…"   10 seconds ago   Created             stoic_murdock

4、启动容器

[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
2e6103e52d9e7c879dcfcd20f495f74d026078768b93e31644b3a36817e13fff
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
2e6103e52d9e   registry   "/entrypoint.sh /etc…"   8 seconds ago   Up 7 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   confident_brown
faa27a53a868   registry   "/entrypoint.sh /bin…"   2 minutes ago   Created                                                    stoic_murdock

5、打上标签并上传容器

[root@localhost ~]# docker push 192.168.218.214:5000/nginx
Using default tag: latest
The push refers to repository [192.168.218.214:5000/nginx]
fac15b2caa0c: Pushed 
f8bf5746ac5a: Pushed 
d11eedadbd34: Pushed 
797e583d8c50: Pushed 
bf9ce92e8516: Pushed 
d000633a5681: Pushed 
latest: digest: sha256:6fe11397c34b973f3c957f0da22b09b7f11a4802e1db47aef54c29e2813cc125 size: 1570

6、查看私有仓库,如果显示有nginx则表明上传成功

[root@localhost ~]# curl -XGET http://192.168.218.214:5000/v2/_catalog
{"repositories":["nginx"]}

cgroup概述

Cgroup是 Control Groups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如CPU、内存、磁盘:io等等)的机制。

Docker通过cgroup来控制容器使用的资源配额,包括 CPO、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。

cgroup是一种资源控制手段,也是容器隔离的6个名称空间的一种实现手段。

cpu使用率

CPU周期:1s为一个周期的定律,参数值一般为100000 (CPU衡量单位是秒,参数值单位为微秒)

假如需要给此容器分配CPU使用率的20%,则参数需要设置为20000,相当于每个周期分配给这个容器0.2sCPU。

在一个时刻,只能给一个进程占用。

使用stress工具测试cpu和内存使用情况

安装stress工具

[root@localhost stress]# mkdir /opt/stress
[root@localhost stress]# vim /opt/stress/dockerfile

FROM centos:7
RUN yum -y install wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum -y install stress

[root@localhost stress]# docker build -t centos:stress .

使用如下命令创建容器,给这个容器的时间分片为100。默认情况下,每个Docker容器的CPU份额都是1024。单独一个容器的份额是没有意义的。只有在同时运行多个容器时,容器的CPU加权的效果才能体现出来。

[root@localhost stress]# docker run -itd --cpu-shares 100 centos:stress
1b763f6f652ef67854174187cadc8db5268652ec813ad776e24c24ad77da55c6

Cgroups只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的CPU份额来确定有多少CPU资源分配给它,资源分配结果取决于同时运行的其他容器的CPU分配和容器中进程运行情况。可以通过cpu share可以设置容器便用CPU的优先级/权重,比如启动了两个容器及运行查看CPU使用百分比。

[root@localhost stress]# docker run -tid --name cpu512 --cpu-shares 512 centos:stress stress -c 10
e214dec40628bf4bf0815bc2452290942955b7a9d3de53602bec8952844460aa

[root@localhost stress]# docker run -tid --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10
52805f808027a7540c19da19fb8da1c0008a9ffeb3d1e81d3026a8bd36b2a0e1

[root@localhost stress]# docker ps -a
CONTAINER ID   IMAGE           COMMAND          CREATED          STATUS          PORTS     NAMES
52805f808027   centos:stress   "stress -c 10"   9 seconds ago    Up 8 seconds              cpu1024
e214dec40628   centos:stress   "stress -c 10"   18 seconds ago   Up 17 seconds             cpu512
1b763f6f652e   centos:stress   "/bin/bash"      4 minutes ago    Up 4 minutes              peaceful_shockley

通过docker stats持续查看cpu使用率,可以看到512的使用率为1024的一半
在这里插入图片描述

CPU周期限制

Docker提供了–cpu-period、–cpu-quota两个参数控制容器可以分配到的CPU时钟周期。

cpu-period 是用来指定容器对CPU的使用要在多长时间内做一次重新分配。

cpu-guota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。与–cpu-shares不同的是,这种配置是指定一个绝对值,容器对CPU资源的使用绝对不会超过配置的值。

cpu-period和cpu-quota的单位为微秒(us)。cpu-period 的最小值为 1000微秒,最大值为1秒(10*6us) ,默认值为0.1秒(10000o us ) 。

cpu-quota的值默认为-1,表示不做控制。cpu-period 和 cpu-gquota参数一般联合使用。

/sys/fs/cgroup/cpu/docker/存放的是容器中cpu的各种限制文件
在这里插入图片描述

[root@localhost docker]# cat cpu.cfs_quota_us 
-1
[root@localhost docker]# cat cpu.cfs_period_us 
100000

每个容器有自己的cpu限制文件,可以进入容器id的目录下,通过cat查看cpu限制
在这里插入图片描述

CPU Core控制

对多核CPU的服务器,Docker还可以控制容器运行使用哪些CPU内核,即使用–cpuset-cpus参数。这对具有多CPU的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。

执行以下命令需要宿主机为双核,表示创建的容器只能用01两个内核。
[root@localhost docker]# docker run -itd --name cpu --cpuset-cpus 0-1 centos:stress
bdac5857305412058fce37d593631140d43f3b4a5d2fb0a07d056c56304eb403
[root@localhost docker]# cd /sys/fs/cgroup/cpuset/docker/
[root@localhost docker]# ls
1b763f6f652ef67854174187cadc8db5268652ec813ad776e24c24ad77da55c6
52805f808027a7540c19da19fb8da1c0008a9ffeb3d1e81d3026a8bd36b2a0e1
bdac5857305412058fce37d593631140d43f3b4a5d2fb0a07d056c56304eb403
cgroup.clone_children
cgroup.event_control
cgroup.procs
cpuset.cpu_exclusive
cpuset.cpus
cpuset.effective_cpus
cpuset.effective_mems
cpuset.mem_exclusive
cpuset.mem_hardwall
cpuset.memory_migrate
cpuset.memory_pressure
cpuset.memory_spread_page
cpuset.memory_spread_slab
cpuset.mems
cpuset.sched_load_balance
cpuset.sched_relax_domain_level
e214dec40628bf4bf0815bc2452290942955b7a9d3de53602bec8952844460aa
notify_on_release
tasks
[root@localhost docker]# cd /sys/fs/cgroup/cpuset/docker/bdac5857305412058fce37d593631140d43f3b4a5d2fb0a07d056c56304eb403/
[root@localhost bdac5857305412058fce37d593631140d43f3b4a5d2fb0a07d056c56304eb403]# cat cpuset.cpus
0-1

设置容器使用cpu1运行,达到绑定cpu的目的
[root@localhost bdac5857305412058fce37d593631140d43f3b4a5d2fb0a07d056c56304eb403]# docker exec bdac58573054 taskset -c -p 1
pid 1's current affinity list: 0,1

CPU配额控制参数的混合使用

通过cpuset-cpus 参数指定容器A使用CPU内核0,容器B只是用cPU内核1。

在主机上只有这两个容器使用对应CPU内核的情况,它们各自占用全部的内核资源,cpu-shares 没有明显效果。

[root@localhost ~]# docker run -tid --name cpu1 --cpuset-cpus 1 --cpu-shares 512 centos:stress stress -c 1
9ddca77d9727eea5bad3d73e1c797d6e3d3bb68a3011ff48f1ddf4c8891899a8

docker run -tid --name cpu2 --cpuset-cpus 3 --cpu-shares 1024 centos:stress stress -c 1
11a55411b60d137a75ad8a688d1821819ba2231bd48d4b7da527ae16559f3442

通过top命令查看cpu核心占用
在这里插入图片描述

内存限额

与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap
Docker 通过下面两组参数来控制容器内存的使用量。
-m或–memory:设置内存的使用限额,例如100M、1024M。
–memory-swap:设置内存+swap的使用限额。

[root@localhost ~]# docker run -itd -m 200M --memory-swap=300M centos:stress
6e376a3d59db35328f310f9a7a62d2b8556794f62a128657725835ed6f91d89f
[root@localhost ~]# docker run -itd centos:stress 
9892597020fd0f6e76efbf780c610db8eca69d8862ff1dc3db8d4c9b397625a8

在这里插入图片描述

Block IO限制

默认情况下,所有容器能平等地读写磁盘,可以通过设置–blkio-weight参数来改变容器block 1o的优先级。
–blkio-weight 与–cpu-shares类似,设置的是相对权重值,默认为500。

[root@localhost ~]# docker run -itd --blkio-weight 600 centos:stress 
04a5b67c0821e2b56394b0125f8424e93e5533fdbfddfca4844c08fff29203ab
[root@localhost ~]# docker run -itd --blkio-weight 300 centos:stress 
6cd7632159ad18ac97e64d38ee99359d9b68be6cc098b6b5e13f06eb88aa7100

查看两个容器的磁盘读写限制
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值