为什么要搭建私有镜像仓库
对于一个刚刚接触 Docker 的人来说, 官方的 Docker hub 是用于管理公共镜像既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢? 虽然也可以托管私有镜像我们可以非常方便的把我们自己镜像推送上去, 但是 Docker hub 提供的私有仓库个数有限对于个人来说 Docker hub 是个不错的选择, 但是对于企业来说, 相对于安全 , 成本和公司的架构来说搭建自己的私有镜像仓库才是正确的道路
什么是 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 方式) 虚拟设备
这就是官网原话完美解释了什么是 Harbor? 为什么要选择 Harbor 上面解释那么多的 Harbor, 现在我们来开始安装吧
Harbor 安装
要安装 Harbor, 有以下几个先决条件:
Python 版本大于或者等于 2.7
Docker engine 的版本大于等于 1.10
Docker Compose 的版本大于 1.6.0
首先我们需要检查自己服务器是否支持上面 3 个条件输入以下代码检查
- #python2.7 官网安装页面
- https://www.python.org/downloads/release/python-2711/
- # 检查 Python 版本. Ubuntu 16.04 已经集成了 python2.7
- python -V
- # 检查 Docker 的版本
- docker -v
- #Docker Compose 安装脚本
- sudo curl -L https://github.com/docker/compose/releases/download/1.6.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- # 检查 Docker Compose 的版
- docker-compose --version
- # 如果提示 Permission denied 执行以下语句赋权
- sudo chmod +x /usr/local/bin/docker-compose
确保服务器上的软件版本已经满足以上要求之后我们现在开始安装 Harbor 如果不知道怎么安装 docker 可以参考我博客之前的文章传送门
下载 Harbor
- # 下载安装包
- wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
- # 解压
- tar -xzf harbor-offline-installer-v1.1.2.tgz
- cd harbor
- # 编辑配置文件
- vi harbor.cfg
配置文件注释参考
- ## Configuration file of Harbor
- # 设置访问地址, 支持 IP, 域名, 主机名, 禁止设置 127.0.0.1
- hostname = reg.mydomain.com
- # 访问方式, http 或者 https
- ui_url_protocol = http
- # 邮件通知相关设置
- email_server = smtp.mydomain.com
- email_server_port = 25
- email_username = sample_admin@mydomain.com
- email_password = abc
- email_from = admin <sample_admin@mydomain.com>
- email_ssl = false
- # 用户登录密码
- harbor_admin_password = Harbor12345
- #harbor 认证模式, 默认为 db_auth, 本地 mysql, 也可以配置 ldap 认证
- auth_mode = db_auth
- #ldap 认证配置
- ldap_url = ldaps://ldap.mydomain.com
- ldap_basedn = ou=people,dc=mydomain,dc=com
- ldap_uid = uid
- ldap_scope = 3
- #mysql 数据库设置
- db_password = root123
- self_registration = on
- use_compressed_js = on
- max_job_workers = 3
- token_expiration = 30
- verify_remote_cert = on
- customize_crt = on
- # 显示的认证及组织信息
- crt_country = CN
- crt_state = State
- crt_location = CN
- crt_organization = organization
- crt_organizationalunit = organizational unit
- crt_commonname = example.com
- crt_email = example@example.com
- project_creation_restriction = everyone
- #SSL 证书地址只有开启 https 访问才生效
- ssl_cert = /data/cert/server.crt
- ssl_cert_key = /data/cert/server.key
- #############
以上按照自己需求修改如果想开启 https 模式访问需要自己申请 ssl 证书 harbor 默认监听 80 端口如果需要修改端口请修改目录下的 docker-compose.yml 文件,
修改完成之后运行
sudo ./install.sh
进行安装安装完成之后他会自己启动这里他会自己下载一些他所需的 images 过程有点慢可以通过阿里云的镜像加速器来加速阿里云镜像加速器 . 打开链接登录之后点击镜像加速然后你会得到一个专属加速地址如图
可以根据自己的环境查看文档安装使用然后等待命令执行结束
开启 https
如果使用 http 的这里可以跳过, 我们把已经申请好的证书文件放到 / data/cert 目录下面然后修改 harbor.cfg 文件
安装成功之后打开之前自己设定的域名或者 IP 地址测试地址 测试用户名: harbor_test, 测试密码: Harbor_test123
使用 harbor
创建用户
harbor 已经创建成功现在我们来开始创建一个用户
创建项目
创建项目, 并添加用户
上传镜像
- # 登录
- robin:~ robin$ sudo docker login shepherd618.cn
- Username: admin
- Password:
- Login Succeeded
- # 查看本地镜像
- robin:docker_demo robin$ sudo docker images
- Password:
- REPOSITORY TAG IMAGE ID CREATED SIZE
- docker_demo latest fdd994bee741 19 seconds ago 283MB
- node 8.9-alpine 406f227b21f5 2 weeks ago 68.1MB
- # 给 dcoker_demo 新增 tag
- robin:docker_demo robin$ sudo docker tag docker_demo shepherd618.cn/test/demo
- #push images
- robin:docker_demo robin$ docker push shepherd618.cn/test/demo
- The push refers to repository [shepherd618.cn/test/demo]
- f8387a884f73: Layer already exists
- d74f9d9e7013: Pushed
- f846841ed47f: Layer already exists
- 0198944a9875: Layer already exists
- 9dfa40a0da3b: Layer already exists
- latest: digest: sha256:5b33acc5edf6f48cbd8e7ccd216daa4a7da1ebd4871fbc68bc2517136f1ccf44 size: 1374
来源: https://www.cnblogs.com/pass245939319/p/8542177.html