Harbor 仓库介绍
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。
Harbor是由VMware公司开源的企业级的Docker
Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
Harbor核心组件解释
Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
UI:提供图形化界面,帮助用户管理registry上的镜像,并对用户进行授权。
jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry
pull镜像然后push到另一个registry,并记录job_log。
Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
Registry:镜像仓库,负责存储镜像文件。
Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
Harbor和Registry的比较
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
1.提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2.提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3.支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4.良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
安装harbor仓库
下载harbor离线安装包
官方Github下载地址: https://github.com/goharbor/harbor/releases
那下载速度十分感人啊,为此下载好后,特贴网盘下载 提取码: b7zv
将离线安装包harbor-offline-installer-v1.10.6.tgz
下载到电脑上,执行以下命令解压
tar -zxvf harbor-offline-installer-v1.10.6.tgz -C /usr/local/
cd !$/harbor
解压的结果是个名为harbor的文件夹,进入该文件夹;
修改配置文件harbor.yml,
主要是修改以下两个配置:hostname:填写本机的IP地址,如果绑定了域名也可以填域名;
harbor_admin_password:管理员初始密码;
更多配置例如https、存储等,请参考官方文档按需设置;
配置文件修改完毕后,我们继续下一步
可以看到目录下有2个可执行文件,一个安装,一个检查环境
1.检测harbor
./prepare
2.安装harbor
./install.sh
提示如下图,就表示安装完毕!
查看一下运行容器
1.docker-compose
[root@localhost harbor]# docker-compose ps --all
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:80->8080/tcp
redis redis-server /etc/redis.conf Up (healthy) 6379/tcp
registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp
registryctl /home/harbor/start.sh Up (healthy)
2.docker ps
[root@localhost harbor]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e128be235e97 goharbor/nginx-photon:v1.10.6 "nginx -g 'daemon of…" 28 minutes ago Up 28 minutes (healthy) 0.0.0.0:80->8080/tcp nginx
b76966e5c2f8 goharbor/harbor-jobservice:v1.10.6 "/harbor/harbor_jobs…" 28 minutes ago Up 28 minutes (healthy) harbor-jobservice
807ca451c713 goharbor/harbor-core:v1.10.6 "/harbor/harbor_core" 28 minutes ago Up 28 minutes (healthy) harbor-core
bcdf63c0a612 goharbor/redis-photon:v1.10.6 "redis-server /etc/r…" 28 minutes ago Up 28 minutes (healthy) 6379/tcp redis
cc4f03952326 goharbor/harbor-portal:v1.10.6 "nginx -g 'daemon of…" 28 minutes ago Up 28 minutes (healthy) 8080/tcp harbor-portal
bc0dafe29c85 goharbor/registry-photon:v1.10.6 "/home/harbor/entryp…" 28 minutes ago Up 28 minutes (healthy) 5000/tcp registry
140338f3d583 goharbor/harbor-registryctl:v1.10.6 "/home/harbor/start.…" 28 minutes ago Up 28 minutes (healthy) registryctl
6d5a8a1c093d goharbor/harbor-db:v1.10.6 "/docker-entrypoint.…" 28 minutes ago Up 28 minutes (healthy) 5432/tcp harbor-db
8fc3ad6636bb goharbor/harbor-log:v1.10.6 "/bin/sh -c /usr/loc…" 28 minutes ago Up 28 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log
d5c5228e1b15 f1d1eb360670 "/bin/sh -c 'apt-get…" 2 days ago Exited (100) 2 days ago nice_archimedes
访问Harbor管理系统
地址: http://192.168.88.10
默认账号:admin
密码: harbor12345
docker-compose相关命令
# 后台启动,如果容器不存在根据镜像自动创建
docker-compose up -d
# 停止容器并删除容器
docker-compose down -v
# 启动容器,容器不存在就无法启动,不会自动创建镜像
docker-compose start
# 停止容器
docker-compose stop
创建项目
docker镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://r4f5yw8c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
上传tomcat
#下载tomcat,默认是最新版
[root@localhost ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
756975cb9c7e: Pull complete
d77915b4e630: Pull complete
5f37a0a41b6b: Pull complete
96b2c1e36db5: Pull complete
27a2d52b526e: Pull complete
a867dba77389: Pull complete
0939c055fb79: Pull complete
0b0694ce0ae2: Pull complete
81a5f8099e05: Pull complete
c3d7917d545e: Pull complete
Digest: sha256:a319b10d8729817c7ce0bcc2343a6f97711c7870395019340d96b6aafd6ccbea
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
#启动tomcat
[root@localhost ~]# docker run -d -p 8080:8080 --name tomcat-test tomcat:latest
e98c33d0c47e6e1cb68878c4ce6b368926a663ba9bcd6bcae7aa9cc978ca9ddf
#进入启动的tomcat容器
[root@localhost ~]# docker exec -it tomcat-test /bin/bash
#tomcat官方镜像 webapps 目录下默认没有文件,我们将webapps.dist 下的文件拷贝过去
root@e98c33d0c47e:/usr/local/tomcat# cp -r webapps.dist/* webapps/
root@e98c33d0c47e:/usr/local/tomcat# exit #退出
#重启tomcat容器
[root@localhost ~]# docker restart tomcat-test
tomcat-test
浏览器访问 http://192.168.88.10:8080
docker commit 镜像
#commit 将运行中的容器制作成镜像
[root@localhost ~]# docker commit tomcat-test 192.168.88.10/docker-test/tomcat:v1
sha256:d93ad439e2d59e7ca7c48b6647285ae6adb41c7b0a94e5e9ff00c32f60019ac8
登录harbor,会出现错误
[root@localhost ~]# docker login 192.168.88.10
Username: admin
Password:
Error response from daemon: Get https://192.168.88.10/v2/: dial tcp 192.168.88.10:443: connect: connection refused
指定docker仓库
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://r4f5yw8c.mirror.aliyuncs.com"],
"insecure-registries":["192.168.88.10"]
}
#重新加载,启动docker
systemctl daemon-reload
systemctl restart docker
推送制作的镜像到harbor上
[root@localhost ~]# docker push 192.168.88.10/docker-test/tomcat:v1
The push refers to repository [192.168.88.10/docker-test/tomcat]
ba193cb0a469: Pushed
3be17d77a93a: Pushed
a84354b89db3: Pushed
438ec47051c4: Pushed
94982bbe98d5: Pushed
39341dafb261: Pushed
4b9227ba273c: Pushed
712264374d24: Pushed
475b4eb79695: Pushed
f3be340a54b9: Pushed
114ca5b7280f: Pushed
v1: digest: sha256:a37c72011075a04f65a2971522665e064b012c65bacd6a5670f86ef2900e5ddf size: 2632
仓库harbor仓库
docker企业镜像仓库Harbor
到此部署完毕