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 # 管理员admin的登录密码 database: password: root123 data_volume: /data # harbor数据目录
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 扩容