docker(五)--docker私有registry


docker私有仓库

   使用互联网的registry的缺点是推送和下载image可能会比较慢,带宽如果不够大,可能要很久才能启动起来使用,很多时候需要制作私有的registry.

Docker Registry分类

    Registry用于保存docker镜像,包括镜像的层次结构和元数据,用户可自建Registry,也可使用官方Docker Hub
分类:
- Sponsor Registry:第三方的registry,供客户和Docker社区使用
- Mirror Registry: 第三方的registry,只让客户使用
- Vendor Registry: 由发布Docker金翎奖的供应商提供registry
- Private Registry: 通过设有防火墙的安全层的私胡实体提供的registry
注: 自建仓库最好是生产环境所在的局域网内,才可以达到快的目的,在机房就在机房,如果在阿里云的,直接在它那里注册账号使用。

docker-distribution

  docker-distribution可以实现快速创建私有registry,docker-distribution也可以运行在容器中使用,任何程序都可以,docker官方直接把regisrty做成image。而且最好是存储在VOLUMN,这样即使容器中止,registry也存在。可以使用网络存储方式。

安装registry

# yum install docker-registry   #安装的时候实际是docker-distribution包
============================================================================================
Installing:
 docker-distribution            x86_64        2.6.2-2.git48294d9.el7    extras   3.5 M
# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml
/usr/bin/registry
/usr/lib/systemd/system/docker-distribution.service
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry
# cat /etc/docker-distribution/registry/config.yml   配置文件
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: :5000
# systemctl start docker-distribution
# ss -tnl |grep 5000
LISTEN     0      128         :::5000                    :::*  

把image推送到仓库中

   把myweb:v0.9推到registry,对于非docker hub的registry,往上面推镜像的时候必须指明服务器地址:端口,用户名等 

# docker tag myweb:v0.9 172.27.0.3:5000/myweb:v0.9   #打标签,myweb:v0.9前面没有用户名表示是顶层仓库
# docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
172.27.0.3:5000/myweb   v0.9                14f64a5b3a93        About an hour ago   16MB
myweb                   v0.9                14f64a5b3a93        About an hour ago   16MB
# docker push 172.27.0.3:5000/myweb:v0.9
The push refers to repository [172.27.0.3:5000/myweb]
Get https://172.27.0.3:5000/v2/: http: server gave HTTP response to HTTPS client

报错:docker push时默认是基于https协议工作的,docker client是https, 而这里的本地服务器registry端是http

  解决办法: 将docker client配置改成insecure-registries

# vim /etc/docker/daemon.json 

{
  "registry-mirror": ["https://registry.docker-cn.com"],
    "bip": "172.17.0.1/24",
    "insecure-registries": ["172.27.0.3:5000"]
}
# systemctl restart docker
再执行docker push,ok

# ll /var/lib/registry/docker/registry/v2/repositories/
total 4
drwxr-xr-x 5 root root 4096 Feb 25 15:37 myweb

 从仓库中下载镜像

首先修改docker client的insecure-registries,然后执行pull

#  docker pull 172.27.0.3:5000/myweb:v0.9 

Harbor

 Harbor是构建企业级私有docker镜像的仓库的开源解决方案(https://github.com/vmware/harbor),它是Docker Registry的更高级封装,用于存储和分发Docker镜像的企业级Registry服务器。它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能

特性:

- 支持多租户内容签署和校验
- 安全和漏洞分析
- 审计日志
- 集成认证,基于角色访问控制
- Image replication between instances
- 可扩展API,WEB UI界面
- 目前支持英语和中文

 harbor在部署时需要借助docker的编排工具 docker compose:https://docs.docker.com/compose/install/

1.下载
   # wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
   # tar xf harbor-offline-installer-v1.10.1.tgz -C /usr/local/

2.编辑配置文件

# vim /usr/local/harbor/harbor.yml
hostname = node02.magedu.com 
http:
  port: 80    #http端口. 如果 https 配置是打开的,那么默认会使用 https
#https:   
#  port: 443
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

harbor_admin_password = Harbor12345
database:
  password: root123
data_volume: /data    

 3.运行

   # yum install -y docker-compose
   # cd /usr/local/harbor/
   # ./install.sh      # 完成创建和启动

4. 在web界面操作 harbor, 用户名:admin 密码:Harbor12345

5. 客户端推送测试

1. 修改docker客户端为http方式(vim /etc/docker/daemon.json "insecure-registries":[" node02.magedu.com"]),重启docker

2. 打标签,与仓库名称一致 docker tag myweb:v0.3-11 node02.magedu.com/devel/myweb:v0.3-11

3. 登录harbor。docker login node02.magedu.com

4. 推送镜像。docker push myweb:v0.3-11 node02.magedu.com/devel/myweb

在生产环境使用时,还需要修改docker-compose.yml文件配置,定义数据存放位置

cd /usr/local/harbor

docker-compose pause   停止harbor服务,最好跟yml文件一个目录,能自动读取docker-compose.yml
docker-compose unpause   启动harbor服务
docker-compose scale   扩容

原文地址:https://www.cnblogs.com/xiaobaozi-95/p/12361944.html