docker私有仓库管理

创建私有仓库

仓库是集中存放镜像的地方
仓库注册服务器才是存放仓库具体的服务器,每个服务器上都可以放置多个仓库,而仓库下可以放置多个镜像,每个镜像可以运行多个容器,每个容器可以跑一个应用或应用组。
官方仓库:http://hub.docker.com
国内仓库:http://d1.dockerpool.com

mkdir -p /opt/data/registry
docker run -d --restart=always -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
#run -d --restart=always #保证一直在运行
#-p 5000:5000  #第一个宿主端口,第二个本机端口
#-v /opt/data/registry:/tmp/registry  #将镜像的/tmp/regisrtryd导入到本机的/opt/data/registry里
#最后的registry是镜像的意思
docker ps -a
#创建完仓库要让docker识别到
vim /etc/docker/paemon.json
{
        "registry-mirrors":["https://nyakyfun.mirror.aliyuncs.com"],"insecure-registries":["192.168.200.14:5000"]
}
systemctl daemon-reload
systemctl restart docker

#将本地镜像上传到私有仓库
docker tag nginx 192.168.200.10:5000/nginx  #改名前面必须是仓库地址
docker push 192.168.200.10:5000/nginx  #上传

#检验私有仓库下载
docker images  #查看镜像
docker pull 192.168.200.10:5000/nginx  #从私有仓库下载本地贼拉快

使用harbor仓库

harbor是由多个容器组成,可以使用docker-compose做容器管理

mv docker-compose /usr/bin/  #将这个放到bash可以查到的位置
chmod +x /usr/bin/docker-compose  #给他可执行权限
tar xf harbor... -C /usr/
[root@localhost harbor]# ls
common.sh              harbor.v2.0.0.tar.gz  install.sh  prepare
harbor.v1.10.6.tar.gz  harbor.yml.tmpl       LICENSE

vim habor.yml.tmpl  #修改主配置文件
./install.sh  #一键安装脚本
#因为要依赖主配置文件才能使用docker,所以只能一直在目录里面使用
docker-compose ps  #查看所有容器

此时就可以使用浏览器访问就是harbor页面

这时候就需要docker连接hardor仓库
vim /usr/lib/systemd/system/docker.server
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.200.14
systemctl daemon-reload
systemctl restart docker
#此时必须保证harbor里的所有容器是打开的
#登录hardor仓库
docker login -u admin -p Harbor12345 http://192.168.200.14:80
#harbor的页面里的项目下载
docker tag 192.168.200.14:5000/nginx 192.168.200.14/study/nginx:v1  
docker push 192.168.200.14/study/nginx:v1  #长传hardor仓库

docker资源限制

docker容器技术底层是通过Cgroup(Control Group 控制组)实现容器对物理资源使用的限制,限制的资源包括CPU,内存,磁盘三个方面。
Cgroup是linux内核提供的一种可以限制,记录,隔离进程组锁使用的物理资源的机制,使用于实现进程的资源控制。
Cgroup实现将Docker中的I/O或者内存的分配控制等具体是资源管理功能,也别称之为Cgroup子系统

  • blkio:限制磁盘使用做输入输出控制
  • CPU:限制CPU资源的访问
  • CPUset:限制分配单独的凑合内存资源
  • memory:设置每个Croup的内存限制以及产生内存资源报告
    使用dockerfile来创建一个基于centos的stress工具镜像
    stress:用来跑压力测试
[root@localhost ~]# cat centos-7-x86_64.tar.gz | docker import - centos:7
sha256:19bc99b3e2511241d9b6b5f9df2944ddf6534e7d9c25f3dbea2531310fc7f020
[root@localhost ~]# cd stress/
[root@localhost stress]# vim Dockerfile
FROM centos:7  #镜像名
MAINTAINER crushlinux"crushlinux@163.com"
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
docker build -t centos:stress

CPU使用率
在centos7中通过Cgroup的配置文件cpu.cfs_quota_us的值来修改
将某容器的CPU使用率限定为20%,设置为20000

docker run -itd centos:7 /bin/bash  #基于这个镜像打开容器
[root@server01 stress]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
88ebd503b9fd        centos:7            "/bin/bash"         20 seconds ago      Up 19 seconds                           heuristic_brahmagupta
[root@server01 stress]# echo "20000" > /sys/fs/cgroup/cpu,cpuacct/docker/88ebd503b9fdb328b16bd8a796ac341a182164cf9b48c16997fadb2481e3f3da/cpu.cfs_quota_us 
docker attach 88edb  #进入到这个容器
stress -c 10  #打开十个容器

top  #查看动态进程可以看到每台容器的cup使用率在2%左右合起来就是20%

cup的共享比例
容器过多且时间不定时,很难计算cup使用率,此时可以通过--cpu-shares选项设置共享比例
运行3个新建容器a,b,c占用CPU的资源比为1:1:2

docker run --name A -itd --cpu-shares 1024 centos:stress /bin/bash
docker run --name B -itd --cpu-shares 1024 centos:stress /bin/bash
docker run --name C -itd --cpu-shares 2048 centos:stress /bin/bash
此时如果又有一个D的话,设置为4096,那么比例就是:1:1:2:4

默认情况下,每个docker容器的CPU份额为1024,按照数量以及使用率来分配

CPU周期限制
docker提供了--cpu-period,--cpu-quota 两个参数控制容器可以分配到CPU时钟周期

  • --cou-period是用来指定容器对CPU的使用要在多长时间做一次重新分配 单位:微秒
  • --cpu-puota是用来指定在这个周期还有多长时间用来跑这个容器 单位:微秒
docker run -it --cpu-period 1000000 --cpu-quota 200000 entos:stress /bin/bash
#将容器centos进程每一秒使用单个CPU的0.2秒时间

CPU核心限制
docker可以使用--cupset-cpus选项来使某些程序独享CPU核心
对应的Cgroup文件是/sys/fs/cgroup/cpuset/docker/容器ID号/cupset.cups

#让容器centos:stress单独使用前四个内核
dcoker run --itd --dpuset-cpus 0,1,2,3(表示前四个内核) centos:stress /bin/bash
dcoker run --itd --dpuset-cpus 0-3(表示前四个内核) centos:stress /bin/bash

docker exec 88ebd503b9fd taskset -c -p 1 pid 1's cyrrent affinity list: 0-3
#查看容器中进程与CPU内核的绑定关系

内存限制

  • 物理内存:-m/--memory
  • swap(虚拟内存):--memory-swap
docker run -it -m 200M --memory-swap=300M progrium/syress --vm 1 --vm-bytes 280M
确定progrium/stress这个镜像,给他200物理内存,300的虚拟内存,每一个进程分他280M内存,后面进程超出内存最大值报错,需要添加虚拟内存

Block IO限制
可以通过--blkio-weight参数改变容器的优先级读写磁盘

docker run -it --name container_A--blkio-weght 600 centos:stress
#类似于--cpu-chares的格式,设置的是相对权重值,默认是500

限制bps和iops
通过--device-write(read)-iops选项限制每秒的io写(读)速度

  • bps是每秒读写的数据量
  • iops是每秒的io次数
--device-write-bps  #限制写某个设备的bps
--device-read-bps  #限制读某个设备的bps
--device-write-iops  #限制写某个设备的iops
--device-read-iops  #限制读某个设备的iops

docker run -it --device-write-bps /dev/sda:5MB centos:stress /bin/bash
#限制容器每秒写入文件系统(/dev/sda)的数据量为5MB
dd if=/dev/zero of=test bs=1M count=100 oflag=direct  #查看,oflag=direct指定direct io方式写入文件
posted @ 2021-10-20 22:36  whml  阅读(237)  评论(0编辑  收藏  举报