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方式写入文件