• 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方式写入文件
    
  • 相关阅读:
    Natas Wargame Level 13 Writeup(文件上传漏洞,篡改file signature,Exif)
    Natas Wargame Level 12 Writeup(文件上传漏洞)
    Natas Wargame Level 9 Writeup(bash injection)
    Natas Wargame Level 2 Writeup 与目录泄露(强制访问)
    Natas Wargame Level 3 Writeup 与 robots.txt
    字符编码与文件操作
    python 基本数据类型
    python数据类型内置方法 字符串和列表
    python常用模块
    python数据类型及基本运算符
  • 原文地址:https://www.cnblogs.com/wml3030/p/15431176.html
Copyright © 2020-2023  润新知