什么是 harbor?
第一次使用这个的时候是刚进公司处理的第一个任务的时候,发现 harbor 就是一个用于存储和分发 docker 镜像的企业级registry 服务器。
网上找到一个 harbor 的架构图:
harbor 是 vmware 公司开源的企业级 dockerregistry 项目,项目地址为 https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的 docker registry 服务。它以 docker 公司开源的 registry 为基础,提供了管理ui,基于角色的访问控制(role based access control),ad/ldap集成、以及审计日志(auditlogging) 等企业用户需求的功能,同时还原生支持中文。harbor 的每个组件都是以 docker 容器的形式构建的,使用 docker compose 来对它进行部署。
环境准备
1、自己在腾讯云买的服务器(centos7.3)
2、docker 版本:17.05.0-ce
3、docker-compose:1.17.1
4、harbor:1.1.2
安装 docker
因为系统是 centos 7.3 ,内核啥的都已经是 3.10,所以不用担心内核升级的问题,一些操作啥的在 7.x 上操作也很方便。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
yum update // 系统版本更新
vim /etc/yum .repos.d /docker .repo // 添加以下内容
[dockerrepo]
name=docker repository
baseurl=https: //yum .dockerproject.org /repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https: //yum .dockerproject.org /gpg
// 下面安装 docker 引擎
yum install docker-engine -y
// 安装docker引擎,此步也可作为更新docker版本的操作:先 #systemctl stop docker 停止docker服务,再#yum install docker-engine 更新docker版本
systemctl enable docker.service
systemctl start docker // 启动docker守护进程
docker info // 查看docker运行情况
docker - v // 查看版本信息
|
修改 docker 配置文件 /etc/default/docker 如下:
docker_opts="--registry-mirror=http://aad0405c.m.daocloud.io" //换成国内的镜像加速源,不然拉取镜像简直龟速,不想在吐槽了
使用 service docker restart
重启 docker 服务即可。
或者用官方提供的方式:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ef017c13.m.daocloud.io[/code]
安装 docker-compose
如果是想直接命令安装也行,
下载指定版本的docker-compose
[code]
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
对二进制文件赋可执行权限
1
|
chmod +x /usr/local/bin/docker-compose
|
测试下docker-compose是否安装成功
1
|
docker-compose --version
|
出现如下
1
|
docker-compose version 1.17.1, build 6d101fb
|
但是,这种方法简直龟速,幸好还有种方法,
见这里:https://docs.docker.com/compose/install/#install-compose
这种需要通过 python 的 pip 安装
安装 pip
1
2
3
4
5
|
wget - - no - check - certificate https: / / pypi.python.org / packages / source / s / setuptools / setuptools - 1.4 . 2.tar .gz
tar - vxf setuptools - 1.4 . 2.tar .gz
cd setuptools - 1.4 . 2
python2. 7 setup.py install / / 因为服务器自带 python 2.7
easy_install - 2.7 pip
|
安装 docker compose
1
2
|
pip install docker-compose
docker-compose --version // 测试安装是否成功
|
安装 harbor
1
2
3
|
wget https: //github .com /vmware/harbor/releases/download/v1 .1.2 /harbor-offline-installer-v1 .1.2.tgz
#离线安装包,也是龟速,把这个下载链接用迅雷下载,速度却贼快,嘿嘿,然后再传到服务器上去,整个过程快很多!
tar -zxvf harbor-offline-installer-v1.1.2.tgz
|
解压缩之后,进入目录下会看到 harbor.cfg 文件,该文件就是 harbor 的配置文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
## configuration file of harbor
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = 115.159.227.249 #这里我先配置我的服务器ip地址
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root123
#maximum number of job workers in job service
max_job_workers = 3
#determine whether or not to generate certificate for the registry's token.
#if the value is on, the prepare script creates new root cert and private key
#for generating token to access the registry. if the value is off the default key/cert will be used.
#this flag also controls the creation of the notary signer's cert.
customize_crt = on
#the path of cert and key files for nginx, they are applied only the protocol is set to https
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
#the path of secretkey storage
secretkey_path = /data
#admiral's url, comment this attribute, or set its value to na when harbor is standalone
admiral_url = na
#notes: the properties between begin initial properties and end initial properties
#only take effect in the first boot, the subsequent changes of these properties
#should be performed on web ui
#************************begin initial properties************************
#email account settings for sending out password resetting emails.
#email server uses the given username and password to authenticate on tls connections to host and act as identity.
#identity left blank to act as username.
email_identity =
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
##the initial password of harbor admin, only works for the first time when harbor starts.
#it has no effect after the first launch of harbor.
# 启动harbor后,管理员ui登录的密码,默认是harbor12345
harbor_admin_password = harbor12345
# 认证方式,这里支持多种认证方式,如ladp、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth
#the url for an ldap endpoint.
ldap_url = ldaps://ldap.mydomain.com
#a user's dn who has the permission to search the ldap/ad server.
#if your ldap/ad server does not support anonymous search, you should configure this dn and ldap_search_pwd.
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
#the password of the ldap_searchdn
#ldap_search_pwd = password
#the base dn from which to look up a user in ldap/ad
ldap_basedn = ou=people,dc=mydomain,dc=com
#search filter for ldap/ad, make sure the syntax of the filter is correct.
#ldap_filter = (objectclass=person)
# the attribute used in a search to match a user, it could be uid, cn, email, samaccountname or other attributes de
pending on your ldap/ad ldap_uid = uid
#the scope to search for users, 1-ldap_scope_base, 2-ldap_scope_onelevel, 3-ldap_scope_subtree
ldap_scope = 3
#timeout (in seconds) when connecting to an ldap server. the default value (and most reasonable) is 5 seconds.
ldap_timeout = 5
# 是否开启自注册
self_registration = on
# token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone
#determine whether the job service should verify the ssl cert when it connects to a remote registry.
#set this flag to off when the remote registry uses a self-signed or untrusted certificate.
verify_remote_cert = on
#************************end initial properties************************
|
启动 harbor,修改完配置文件后,在的当前目录执行./install.sh
,harbor服务就会根据当期目录下的docker-compose.yml
开始下载依赖的镜像,检测并按照顺序依次启动各个服务。
启动完成后,我们访问刚设置的 hostname 即可,http://115.159.227.249/,默认是80端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射。
登录 web harbor , 输入用户名 admin,默认密码(或已修改密码)登录系统。
我们可以看到系统各个模块如下:
项目:新增/删除项目,查看镜像仓库,给项目添加成员、查看操作日志、复制项目等
日志:仓库各个镜像create、push、pull等操作日志
系统管理
- 用户管理:新增/删除用户、设置管理员等
- 复制管理:新增/删除从库目标、新建/删除/启停复制规则等
- 配置管理:认证模式、复制、邮箱设置、系统设置等
其他设置
- 用户设置:修改用户名、邮箱、名称信息
- 修改密码:修改用户密码
注意:非系统管理员用户登录,只能看到有权限的项目和日志,其他模块不可见。
我们要尝试下能不能把自己 docker 里面的镜像 push 到 harbor 的 library 里来(默认这个 library 项目是公开的,所有人都可以有读的权限,都不需要 docker login 进来,就可以拉取里面的镜像)。
注意:
为了后面留坑,我这里先 在自己的 docker.service 中添加仓库:(这是个坑,建议你先按照我说的做,不然下面可能会一直登录不上)
1
2
3
|
vim /usr/lib/systemd/system/docker .service
#里面的这行修改为:(其实就是添加 --insecure-registry 115.159.227.249 )
execstart= /usr/bin/dockerd --insecure-registry 115.159.227.249
|
添加完了后重新启动 docker:
1
|
systemctl daemon-reload && systemctl enable docker && systemctl start docker
|
启动 docker 服务:
1
|
service docker start
|
登录:(为了测试下能否登录成功)
1
2
3
4
5
|
admin登录
$ docker login 115.159.227.249
username: admin
password:
login succeeded
|
打 tag 并 push
1
2
3
4
5
6
7
8
9
10
|
docker tag ubuntu:15.10 115.159.227.249/library/ubuntu:15.10 //给我的镜像打个 tag
docker push 115.159.227.249/library/ubuntu
the push refers to a repository [115.159.227.249/library/ubuntu]
98d59071f692: pushed
af288f00b8a7: pushed
4b955941a4d0: pushed
f121afdbbd5d: pushed
15.10: digest: sha256:ec89c4a90f45f5e103860191890f48d8379e0504a2881ff706aef0768dc0321b size: 1150
|
上传完毕后,登录web harbor,选择项目 library,就可以看到我刚 push 的镜像了。
同理,你也可以测试下从 harbor pull 镜像到你的 docker 中去,这里就不继续演示了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.54tianzhisheng.cn/2017/11/26/Docker-harbor/