Docker企业级私有仓库
一:Harbor介绍
1、容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是非常必要的。
2、Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能,欢迎使用和反馈意见。
3、作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
1)基于角色的访问控制
用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
2)镜像复制
镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
3)图形化用户界面
用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
4)AD/LDAP 支持
Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
5)审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
6)国际化
已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
7)RESTful API
RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
8)部署简单
提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备
二:Harbor 架构介绍
Harbor在架构上主要由五个组件构成:
1、Proxy:
Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
2、Registry:
负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。
3、Core services:
这是Harbor的核心功能,主要提供以下服务:
1)UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。
2)webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。
3)token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regi?stry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
4、Database:
为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
5、Log collector:
为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
各个组件之间的关系如下图所示:
三:企业级私有仓库部署
环境:
root@monitor:~# docker --version
Docker version 19.03.2, build 6a30dfc
root@monitor:~# uname -a
Linux 4.15.0-65-generic #74~16.04.1-Ubuntu SMP Wed Sep 18 09:51:44 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
3.1 安装docker-compose
安装方法一:
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
安装方法二:
pip install docker-compose
查看安装的docker-compose版本信息:
docker-compose --version
docker-compose version 1.23.1, build 1719ceb
3.2 安装harbor
软件包下载地址:
https://github.com/goharbor/harbor/releases
tar xf harbor-offline-installer-v1.9.3.tgz
cd harbor/
修改harbor.yml文件中的IP地址与端口项:
hostname: 172.17.2.128
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 85
harbor_admin_password = admin # harbor web页面后台密码
data_volume: /data/harbor_docker # 挂载的目录
./prepare # 执行prepare文件
./install.sh # 安装,会启动8个容器
root@virginia:~/docker/harbor# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
harbor-core /harbor/harbor_core Up (healthy)
harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp
harbor-jobservice /harbor/harbor_jobservice ... Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:85->8080/tcp
redis redis-server /etc/redis.conf Up (healthy) 6379/tcp
registry /entrypoint.sh /etc/regist ... Up (healthy) 5000/tcp
registryctl /harbor/start.sh Up (healthy)
修改配置文件:
root@virginia:~/docker/harbor# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["172.17.2.128"], # 此为harbor的域名或地址,harbor默认提交方式采用https,这里修改为http方式
"live-restore": true # 重启docker服务,正在运行的docker不退出,即使关闭docker服务,运行的docker也不受影响
}
systemctl restart docker
Harbor web界面通过 http://IP:Port 访问
3.3 推送镜像
推送镜像前需要先登录仓库:
[root@node01 ~]# docker login 172.17.2.128
................................
Login Succeeded
给镜像打tag【tag 修改 image 的名字. 格式为: userip/项目名/image名字:版本号】
docker tag nginx 172.17.2.128/library/nginx:latest
docker push 172.17.2.128/library/nginx:latest
四:docker-compose命令
Docker compose的使用非常类似于docker命令的使用,但是需要注意的是大部分的compose命令都需要到docker-compose.yml文件所在的目录下才能执行。
compose以守护进程模式运行加-d选项:
docker-compose up -d
查看某一容器日志:
docker-compose logs web
docker-compose logs redis
容器服务停止,重启命令:
docker-compose stop|restart
停止所有容器:
docker-compose kill
删除compose服务:
docker-compose rm
更多的docker-compose命令可以使用docker-compose --help查看