目录
(3)验证 http 和 nginx 服务是否注册到 consul
一、私有仓库建立
docker pull registry
在docker 引擎终端设置
vim /etc/docker/daemon.json { "insecure-registries": ["ip网址:5000"], 添加 "registry-mirrors": ["https://05vz3np5.mirror.aliyuncs.com"] } systemctl restart docker.service docker create -it registry /bin/bash docker ps -a
会是异常状态
docker start
宿主机的/data/registry自动创建挂载容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
更改标记为ip网址:5000/nginx
docker tag nginx:latest ip网址:5000/nginx
上传
docker push ip网址:5000/nginx The push refers to repository [ip网址:5000/nginx]
获取私有仓库列表
获取registry的镜像仓库中的镜像信息
curl -XGET http://ip网址:5000/v2/_catalog
测试私有仓库下载
docker pull ip网址:5000/nginx
二、Cgroup 资源配置方法
docker 使用cgroup控制资源
respones request
Docker通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。
Cgroup 是 Control Groups 的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、磁盘 IO 等等)的机制
07年谷歌,可以控制资源分配通过操作系统内核,控制应用程序使用内存资源、cpu资源、 文件系统资源等等
cgroup是一种资源控制手段
也是容器隔离的6个名称空间的一种实现手段每个容器相当于一个进程
三、CPU使用率控制
cpu周期: 1s为一个周期的定律,参数值一般为100000 (CPU衡量单位是秒)。
假如需要给此容器分配cpu使用率的20%,则参数需要设置为20000,相当于每个周期分配给这个容器0.2s。
cpu在一个时刻,只能给一个进程占用。
使用 stress 工具测试 CPU 和内存
使用 Dockerfile 来创建一个基于 Centos 的 stress 工具镜像。
mkdir /opt/stress vim /opt/stress/Dockerfile FROM centos:7 RUN yum install -y wget RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo RUN yum install -y stress cd /opt/stress/ docker build -t centos:stress .
使用如下命令创建容器,命令中的--cpu-shares 参数值不能保证可以获得 1 个 vcpu 或 者多少 GHz 的 CPU 资源,它仅是一个弹性的加权值。
docker run -itd --cpu-shares 100 centos:stress
默认情况下,每个 Docker容器的CPU份额都是1024。单独一个容器的份额是没有意义的。只有在同时运行多个容器时,容器的 CPU 加权的效果才能体现出来。
两个容器 A、B 的 CPU 份额分别为 1000 和 500,在CPU进行时间片分配的时候,容器A比容器B多一倍的机会获得 CPU 的时间片。
但分配的结果取决于当时主机和其他容器的运行状态, 实际上也无法保证容器 A一定能获得CPU时间片。比如容器A的进程一直是空闲的,那么容器B是可以获取比容器A更多的CPU时间片的。极端情况下,例如主机上只运行了一个容器,即使它的 CPU 份额只有 50,它也可以独占整个主机的CPU资源。一个主机运行一个容器,只运行了一个应用(容器也是虚拟化技术 )
一个主机运行一个应用Cgroups 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的CPU份额来确定有多少CPU资源分配给它,
资源分配 结果取决于同时运行的其他容器的CPU分配和容器中进程运行情况。
可以通过 cpu share 可以设置容器使用 CPU 的优先级/权重,比如启动了两个容器及运行查看 CPU 使用百分比。docker run -tid --name cpu512 --cpu-shares 512 centos:stress stress -c 10 容器产生10个子函数进程 docker exec -it f4953c0d7e76 bash 进入容器使用top查看cpu使用情况 再开启一个容器做比较 docker run -tid --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10 docker exec -it 5590c57d27b0 bash //进容器使用top对比两个容器的%CPU,比例是1:2 docker stats 查看资源使用
四、 CPU 周期限制
Docker 提供了--cpu-period、--cpu-quota 两个参数控制容器可以分配到的 CPU 时钟周期。
--cpu-period 是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配。cd /sys/fs/cgroup/cpu/docker容器ID/cpu.cfs_quota_us
宿主机怎么提供资源、怎么控制docker容器中的应用的:
CPU→VCPU→以进程的方式体现在workstation环境(docker环境中)→docker表现形式是容器→Vcpu以进程的方式控制容器→容器中的应用需要的是服务进程支持→宿主机内核中cpu可以被cgroup管理(通过分配资源手段)→linux 内核中的cgroup可以控制管理docker 容器中的应用。--cpu-quota 是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。
与 --cpu-shares 不同的是,这种配置是指定一个绝对值,容器对 CPU 资源的使用绝对不会超过配置的值。cpu-period 和 cpu-quota 的单位为微秒(μs)。cpu-period 的最小值为 1000 微秒, 最大值为 1 秒(10^6 μs),默认值为 0.1 秒(100000 μs)。
cpu-quota 的值默认为 -1, 表示不做控制。cpu-period 和 cpu-quota 参数一般联合使用。redis 中,用来表示的永久 -1ttl teacher
-1
lrange teacher 0 -1容器进程需要每 1 秒使用单个 CPU 的 0.2 秒时间,可以将 cpu-period 设置 为 100000(即 1 秒),cpu-quota 设置为 20000(0.2 秒)。
当然,在多核情况下,如果允许容器进程完全占用两个 CPU,则可以将 cpu-period 设置为 10000(即 0.1 秒), cpu-quota 设置为 200000(0.2 秒)。
选项 描述 --pus= 指定容器可以使用多少可用CPU资源。例如,如果主机有两个CPU,并且您设置了而Cpus ="1.5", 那么该容器将保证最多可以访问一个半的CPU。这相当于设置-cpu-period ="100000"和--cpu- quota ="150000"。在Docker 1.13和更高版本中可用。 --Cpu-period= 指定CPU CFS调度程序周期,该周期与--pu-quota-起使用。默认为100000微妙,以微秒表示。 大多数用户不会从默认值更改此设置。如果您使用Docker 1.13或更高版本,请改用--cpus。 --Cpu-quota= 在容器上添加CPU CFS配额。每个--cpu-period允许CPU访问的容器数微秒数。换句话说,cpu- quota/ cpu-period。如果您使用Docker 1.13或更高版本,请改用-cpuS。 --cpuset-cpus 限制容器可以使用的特定CPU或核心。如果您有多个CPU,则容器可以使用的逗号分隔列表或连字 符分隔的CPU范围。第一个CPU编号为0.有效值可能为0-3 (使用第一,第二,第三和第四个 CPU)或1,3 (使用第二个和第四个CPU)。 --Cpu-shares 将此标志设置为大于或小于默认值1024的值,以增加或减少容器的重量,并使其能够访问主机 CPU周期的更大或更小比例。这仅在CPU周期受到限制时才会执行。当大量CPU周期可用时,所有 容器都使用尽可能多的CPU。这样,这是一个软限制。 --cpu-shares不会阻 止容器在群集模式下进 行调度。它优先考虑容器CPU资源的可用CPU周期。它不保证或保留任何特定的CPU访问权限。 docker run -tid --cpu-period 100000 --cpu-quota 200000 centos:stress docker exec -it 98d2aaa50019 bash
查询容器的资源限制参数
(1)在指定容器目录中
cat /sys/fs/cgroup/cpu/docker/容器ID/cpu.cfs_period_us cat /sys/fs/cgroup/cpu/docker/容器ID/cpu.cfs_quota_us
(2)使用docker inspect 容器ID/容器名
"CpuPeriod": "CpuQuota":
五、 CPU Core 控制
对多核 CPU 的服务器,Docker 还可以控制容器运行使用哪些 CPU 内核,即使用--cpuset-cpus 参数。
这对具有多 CPU 的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。docker run -tid --name cpu1 --cpuset-cpus 0-1 centos:stress
执行以上命令需要宿主机为双核,表示创建的容器只能用 0、1两个内核。最终生成 的 cgroup 的 CPU 内核配置
cat /sys/fs/cgroup/cpuset/docker/
通过下面指令可以看到容器中进程与 CPU 内核的绑定关系,达到绑定 CPU 内核的目的。
docker exec taskset -