===============================================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