===============================================html
2018/4/16_第2次修改 ccb_warlocknode
更新说明:python
2018/4/16:在4.3中增长后台启动容器以实现harbor开机自启的内容;nginx
===============================================git
最近一直在用docker容器相关的东西,常常须要使用迁移镜像,在没有私有的镜像仓库前,须要到docker hub上建立用户还要设置镜像加速。github
因而先用registry搭建了一个仓库,可是使用的时候发现下面的几个问题:web
1.没有界面(这个不排除个人使用方法不对,我只能用url看镜像的信息);docker
2.配置以后是http的,在json配置后只能使用1个私有库(若是私有库有多个的状况下得来回改配置文件,太麻烦);数据库
由于存在上面2个问题,使得我不得不查找更合理的镜像仓库,因为以前看《京东基础架构建设之路》时看到jdos 2.0的持续集成时使用harbor做为镜像仓库,因而尝试部署了harbor发现其功能确实能知足目前对镜像仓库的需求。json
1、基础设置
1.1 安装vim、wget
yum install -y vim wget
1.2 卸载home、扩大root
若是考虑镜像仓库是给研发团队使用,须要配置较大容量的,由于centos安装是默认只给root目录配置50G的空间。
能够根据我以前的笔记(http://www.cnblogs.com/straycats/p/7769105.html),扩大root空间。
1.3 关闭防火墙
内部镜像库使用,为了部署方便直接关了防火墙。
systemctl stop firewalld
systemctl disable firewalld
1.4 增长域名解析
ps.因为基于https的harbor须要使用域名,故本次部署的harbor域名为bakreg.cn
# 修改host文件
vim /etc/hosts
# 修改下面的内容,wq保存。
127.0.0.1 localhost bakreg.cn localhost4 localhost4.localdomain4
1.5 设置主机名
# 这里将主机名设置和内部域名同样。
hostnamectl --static set-hostname bakreg.cn
1.6 重启OS
reboot
2、安装docker、docker-compose
因为Harbor是基于Docker Registry V2版本,因此就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。
2.1 安装docker
yum install -y docker
2.2 设置docker镜像加速
墙的缘故,访问docker hub不够稳定,故须要设置镜像加速器来解决这个问题。
这里使用的是阿里云的镜像加速器。登陆阿里云后,访问https://cr.console.aliyun.com/#/accelerator
2.3 启动、开机启动docker
systemctl start docker
systemctl enable docker
2.4 安装epel
yum install -y epel-release
2.5 安装pip
yum install -y python-pip
2.6 安装docker-compose
pip install docker-compose
2.7 查看版本
docker --version
docker-compose --version
3、添加CA证书
ps.若是须要搭建基于https的harbor须要添加ca证书,若是搭建的是基于http能够跳过该步骤。
# 建立目录/root/cert/
mkdir -p /root/cert/
# 进入目录/root/cert/
cd /root/cert/
# 生成证书请求文件csr(域名bakreg.cn自行修改)
openssl req -nodes -subj "/CN=bakreg.cn" -newkey rsa:2048 -keyout bakreg.cn.key -out bakreg.cn.csr
# 生成有效期10年的CA证书crt
openssl x509 -req -days 3650 -in bakreg.cn.csr -signkey bakreg.cn.key -out bakreg.cn.crt
# 获取CA私钥srl
openssl x509 -req -in bakreg.cn.csr -CA bakreg.cn.crt -CAkey bakreg.cn.key -CAcreateserial -out bakreg.cn.crt -days 10000
4、部署harbor
4.1 获取安装包
官方(https://github.com/vmware/harbor/releases)提供了2种部署包(在线、离线),我选了在线安装包(配了docker加速的状况下,在线包下载镜像的时间要比离线包快不少)。
# 下载在线安装包(下载地址根据官网自行选择,我部署的时候最新是1.4.0)
cd
wget https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-online-installer-v1.4.0.tgz
# 解压
tar xvf harbor-online-installer-v1.4.0.tgz
4.2 修改配置文件
# 编辑harbor.cfg
vim /root/harbor/harbor.cfg
# /root/harbor/harbor.cfg文件是Harbor的配置文件,下面列一些可能会修改的项(下面的配置是基于https的harbor,由于https配置后只要在客户机添加证书和域名解析,能够链接多个镜像仓库;若是是http,daemon.json里配置后只能链接一个本身的私有仓库)。
## Configuration file of Harbor # hostname设置访问地址。可使用ip、域名、主机名,不能够设置为127.0.0.1或localhost。(若是部署的是备份库,填写ip而不是域名,不然会致使仓库管理链接失败,host没法识别缘由不明) hostname = bakreg.cn # 访问协议。默认是http,若是搭建https的仓库就改成https。 ui_url_protocol = https # 可选的https证书配置地址 ssl_cert = /root/cert/bakreg.cn.crt ssl_cert_key = /root/cert/bakreg.cn.key # 用于在复制策略中加密或解密远程注册表的密码的密钥路径。secretkey_path不须要修改。若是必须修改它,你须要在/root/harbor/docker-compose.yml中手动调整路径,由于它们是硬编码。 secretkey_path = /data # 邮件设置,发送重置密码邮件时使用 # email_identity做为用户名 email_identity = email_server = 邮箱的smtp服务器域名 email_server_port = 25 email_username = email_password = email_from = email_ssl = false email_insecure = false # 管理员admin的登陆密码。默认是Harbor12345 harbor_admin_password = Harbor12345 # 认证方式。默认是db_auth,支持多种认证方式,如数据库认证(db_auth)、LADP(ldap_auth)。 auth_mode = db_auth # LDAP认证时配置项(这项能够登陆后配置也能够)。 ldap_url = # LDAP URL ldap_searchdn = # LDAP 搜索DN ldap_search_pwd = # LDAP 搜索DN的密码 ldap_basedn = # LDAP 基础DN ldap_filter = # LDAP 过滤器 ldap_uid = # LDAP 用户uid的属性 ldap_scope = 2 ldap_timeout = 5 # 是否开启注册。on开启,off关闭。 self_registration = off # Token有效时间。默认30分钟。 token_expiration = 30 # 标记用户建立项目权限控制。默认是everyone(容许全部人建立),也能够设置为adminonly(只能管理员才能建立) project_creation_restriction = everyone
4.3 harbor启动、开机启动
cd /root/harbor
./install.sh
因为使用了docker-compose,可使用后台启动的方式来实现harbor的开机启动功能。
cd /root/harbor
# 中止容器
docker-compose stop
# 后台启动容器
docker-compose up -d
5、登陆
因为服务部署在192.168.3.1,能够根据IP直接访问。
http访问web:http://192.168.3.1
https访问web:https://192.168.3.1
使用管理员(admin)登陆(没有修改harbor_admin_password的话,密码是Harbor12345)。
6、向基于http的harbor上传下载镜像
6.1 客户机配置
Docker从1.3.X以后,与docker registry交互默认使用的是https,然而harbor只提供http服务。为了解决这个问题须要在启动docker时增长启动参数为默认使用http访问。
这里提供2种可行的操做。
1)修改daemon.json
# 编辑daemon.json
vim /etc/docker/daemon.json
# 添加下面的内容,wq保存。
{ "insecure-registries":["192.168.3.1"] }
# 重启docker
systemctl restart docker
2)修改docker.service
# 编辑docker.service
vim /usr/lib/systemd/system/docker.service
# 添加下面的内容,wq保存。
在“ExecStart=”中添加
--insecure-registry 192.168.3.1 \
# 从新载入systemd
systemctl daemon-reload
# 重启docker
systemctl restart docker
6.2 上传下载镜像
# docker登陆harbor
docker login 192.168.3.1
# 标记镜像nginx:v1为192.168.3.1/你的用户名/nginx:v1
docker tag nginx:v1 192.168.3.1/你的用户名/nginx:v1
# 推送镜像到harbor
docker push 192.168.3.1/你的用户名/nginx:v1
# 拉取镜像
docker pull 192.168.3.1/你的用户名/nginx:v1
# docker退出登陆harbor
docker logout 192.168.3.1
7、向基于https的harbor上传下载镜像
7.1 客户机配置
因为经过openssl建立的是不可信的,直接拉取或登陆时会报“x509: certificate signed by unknown authority”,故须要让客户机信任该证书。
将192.168.3.1中的/root/cert/bakreg.cn.crt迁移到客户机的/root目录中。
# 将bakreg.cn的证书追加到客户机的证书库中
cat /root/bakreg.cn.crt >>/etc/pki/tls/certs/ca-bundle.crt
# 重启docker
systemctl restart docker
# 修改客户机的hosts
vim /etc/hosts
# 增长下面的内容,wq保存。
192.168.3.1 bakreg.cn
7.2 上传下载镜像
# docker登陆harbor
docker login bakreg.cn
# 标记镜像nginx:v1为bakreg.cn/你的用户名/nginx:v1
docker tag nginx:v1 bakreg.cn/你的用户名/nginx:v1
# 推送镜像到harbor
docker push bakreg.cn/你的用户名/nginx:v1
# 拉取镜像
docker pull bakreg.cn/你的用户名/nginx:v1
# docker退出登陆harbor
docker logout bakreg.cn
参考资料:
1. http://blog.csdn.net/aixiaoyang168/article/details/73549898
2. https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
3. http://www.bubuko.com/infodetail-1524567.html
4. https://github.com/vmware/harbor/issues/2208
5. http://blog.51cto.com/aaronsa/1897891
6. https://github.com/vmware/harbor/blob/master/docs/configure_https.md