Docker Private Registry
Docker Registry 分类
Registry用于保存docker镜像,包括镜像的层次结构和元数据
用户可自建Registry,也可使用官方的Docker Hub
分类
Sponsor Registry:第三方的registry,供客户和Docker社区使用
Mirror Registry:第三方的registry,只让客户使用
Vendor Registry:由发布Docker镜像的供应商提供的registry
Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry
Registry(repository and index)
Repository
由某特定的docker镜像的所有迭代版本组成的镜像仓库
一个 Registry中可以存在多个Repository
Repository可分为“顶层仓库”和“用户仓库”
用户仓库名称格式为“用户名/仓库名”
每个仓库可以包含多个Tag(标签) ,每个标签对应一个镜像
Index
维护用户帐户、镜像的校验以及公共命名空间的信息
相当于为Registry提供了一个完成用户认证等功能的检索接口
创建私有Registry
使用docker-distribution
Server: ~]#yum -y install docker-distribution ~]#systemctl start docker-distribution Client: ~]#vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com","https://4r35ny5z.mirror.aliy uncs.com"], "insecure-registries": ["centos37.liuyutang.top:5000"] } ~]#systemctl restart docker ~]#docker tag myweb:v0.3-11 centos37.liuyutang.top:5000/myweb:v0.3-11 ~]#docker push centos37.liuyutang.top:5000/myweb:v0.3-11
Harbor
Harbor简介
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
特性
基于角色的访问控制 - 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制 - 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
图形化用户界面 - 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
AD/LDAP 支持 - Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
RESTful API - RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
部署简单 - 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
安装配置向导
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
参考手册
https://vmware.github.io/harbor/cn/
安装部署
vmware harbor得借助于docker的单机编排工具:docker-compose
使用示例
vmware harbor安装方式
在线安装
离线安装
OVA安装
参考手册:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
Harbor安装部署
~]#wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.2.tgz ~]#tar xf harbor-offline-installer-v1.4.0.tgz -C /usr/local/ ~]#yum -y install epel-release ~]#cd /usr/local/harbor/ harbor]#vim harbor.cfg hostname = centos17.liuyutang.top harbor_admin_password = Harbor12345 db_host = mysql db_password = root123 harbor]#yum -y install docker-compose harbor]#./install.sh
输入用户名和密码登录即可
部署仓库
1、创建用户
2、创建仓库
3、使用刚才创建的用户登录,创建项目
~]#docker tag myweb:v0.3-1 centos17.liuyutang.top/devel/myweb:v0.3-1 ~]#docker tag myweb:v0.3-1 centos17.liuyutang.top/devel/myweb:v0.3-2 ~]#docker tag myweb:v0.3-1 centos17.liuyutang.top/devel/myweb:v0.3-3 ~]#vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com","https://4r35ny5z.mirror.aliy uncs.com"], "insecure-registries": ["centos17.liuyutang.top"] 使用http协议,默认使用https } ~]#docker login centos17.liuyutang.top ~]#docker push centos17.liuyutang.top/devel/myweb
可查看推上来的镜像
使用docker-compose命令可管理harbor服务
~]#docker-compose stop ~]#docker-compose start Define and run multi-container applications with Docker. Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--help
Docker资源限制
默认情况,在Docker容器中没有任何资源限制
可以从名称空间(namespace)和控制组(cgroups)两个维度来定义
Memory
OOME:如果Linux内核探测到当前宿主机已经没有足够内存可用,用于实现执行某些重要的系统功能,它会抛出一个异常,并且开始启动去killing某些进程来释放内存
一旦发生OOME,任何进程都有可能被杀死,包括docker daemon在内
为此,Docker特地调整了docker daemon的OOME优先级,以免它被内核“正法”,但容器的优先级未被调
限制内存资源
--memory-swap
CPU
默认设置每个容器可以使用宿主机的所有CPU资源
进程分类
CPU密集型:调低优先级
IO密集型
配置默认CFS调度
使用示例:使用stree镜像做压测
内存做限制: ~]#docker pull lorel/docker-stress-ng ~]#docker run --name stress --rm -it -m 256m lorel/docker-stress-ng:latest --vm 2 ~]#docker top stress ~]#docker stats stress CPU做限制: ~]#docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest --cpu 8 ~]#docker stats stress ~]#docker kill stress ~]#docker run --name stress -it --cpuset-cpus 0,1 --rm lorel/docker-stress-ng:latest --cpu 8 ~]#docker stats stress ~]#docker run --name stress -it --cpu-shares 1024 --rm lorel/docker-stress-ng:latest --cpu 8 ~]#docker run --name stress1 -it --cpu-shares 512 --rm lorel/docker-stress-ng:latest --cpu 8