Harbor是一個開源企業級Docker注冊中心,可以用於搭建私有的Docker Image倉庫。可以實現權限控制等。
安裝Harbor
首先,需要安裝Docker和Docker Compose,參考其它文章。
Harbor 0.5.0需要:
- Docker 1.10
- Docker Compose 1.6.0
- Python 2.7或更高版本(且不是系統自帶的Python解釋器)
Docker與Docker Compose安裝可以參考這篇文章。
本文中選擇將Harbor的密碼存儲在MySQL中,Harbor使用的MySQL是安裝包中集成的MySQL的Docker鏡像,所以如果系統沒有MySQL也不需要事先安裝
獲取Harbor安裝程序
tar xvf harbor-online-installer-<version>.tgz #在線安裝文件
tar xvf harbor-offline-installer-<version>.tgz #離線安裝文件
首先要確定Harbor安裝位置並切換到那個文件夾下,如/usr/local:
cd /usr/local
修改配置
下載解壓完后,需要先修改配置然后才能開始安裝:
cd harbor
nano harbor.cfg
關於配置文件幾個需要修改的地方:
hostname
:WebUI的訪問地址,可以是IP或域名(但不要使用127.0.0.1或localhost,這將導致無法外部訪問)ui_url_protocol
:http(默認)或https(需要配置SSL的Nginx)email_config
:郵件相關配置,郵件配置用於密碼重置等場景harbor_admin_password
:用於第一次登錄WebUI時的密碼,一次有效。默認用戶名為adminauth_mode
:驗證方式,db_auth(本地MySOL存儲密碼)或ldap_auth(LDAP)ldap_config
:auth_mode為LDAP時,配置ldapdb_password
:auth_mode為db_auth時,這個項配置本地MySQL root賬號的密碼self_registration
:是否允許用戶注冊,on(開放注冊)或off(關閉注冊,只能管理員添加用戶)。此項僅在auth_mode為db_auth時起作用。use_compressed_js
:啟用js壓縮合並,默認為onmax_job_workers
:最大鏡像復制作業並行數,默認為3token_expiration
:token過期時間,默認30分鍾verify_remote_cert
:驗證遠程注冊中心的證書,默認為on,當遠程注冊中心不適用SSL或使用自簽名證書時,設置為off。customize_crt
:是否是自簽名證書,on(自簽名證書,需要設置crt_config一些列選項的值)或off(使用證書頒發機構的證書)crt_config
:使用自簽名證書時的一些配置項
注意:關於hostname配置,如果使用IP,請確保80端口沒有被占用,否則會因為80端口被占用而導致安裝后Harbor服務啟動失敗。
下面是一個配置文件的配置示例:
hostname = 192.168.1.100
ui_url_protocol = http
email_identity =
email_server = smtp.xxxxxx.com
email_server_port = 465
email_username = reg@mritd.me
email_password = xxxxxx
email_from = docker <reg@mritd.me>
email_ssl = true
harbor_admin_password = Harbor12345
auth_mode = db_auth
ldap_url = ldaps://ldap.mydomain.com
# ldap_searchdn =
# ldap_search_pwd =
ldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com
# ldap_filter =
ldap_uid = uid
ldap_scope = 3
db_password = root123
self_registration = off
use_compressed_js = on
max_job_workers = 3
token_expiration = 30
verify_remote_cert=off
customize_crt = off
# crt_country = CN
# crt_state = State
# crt_location = CN
# crt_organization = mritd
# crt_organizationalunit = mritd
# crt_commonname = mritd.me
# crt_email = reg.mritd.me
示例配置文件中,沒有被注釋的配置項即使在用不到的情況下也不能注釋。
配置存儲(可選)
Harbor默認將image存儲在本地文件系統,其它可選的位置包括S3,OpenStack Swift等。
這個配置在common/templates/registry/config.yml
中的storage
一節來配置。
執行安裝
修改好上述配置后,就可以執行安裝了
./install.sh
如果使用在線安裝文件,需要等待image下載完成。
注意:如果主機上的80端口已經被占用,則使用IP安裝會失敗,請給主機分配域名,並使用域名作為hostname來訪問。如果想修改默認的80端口,見修改端口號一節
安裝完成后,訪問hostname配置的域名或IP即可進入Harbor的管理頁面。
第一次使用配置文件中harbor_admin_password
中的默認管理員密碼,並修改密碼。
修改端口號
對於http發布方式,Harbor默認使用80端口,需要修改端口按照如下方法:
修改docker-compose.yml中nginx的配置,將80:80
的第一個80
改為自定義的端口號。
修改common/templates/registry/config.yml,在auth
部分$ui_url
后面加上自定義的端口號
修改完成后,運行下面的命令重新配置Harbor
sudo docker-compose down
sudo install.sh
對於第一次安裝,直接修改完所有配置文件后執行install.sh就可以了。
停止/啟動Harbor
sudo docker-compose stop
sudo docker-compose start
卸載Harbor
執行如下步驟徹底刪除Harbor,以便重新安裝:
sudo docker-compose down
rm -rf /data/database
rm -rf /data/registry
修改Harbor配置
首先刪除container,修改配置,然后運行install.sh重新啟動container,命令如下:
sudo docker-compose down
vim harbor.cfg
sudo install.sh
基本使用
無論是從Harbor拉取鏡像或着發布鏡像到Harbor,第一步都是登錄Harbor這個注冊中心。
docker login ip:port
按照前文的安裝方式,即http安裝,這個命令默認都會報錯。因為Docker默認要求注冊中心以https方式工作。
命令中的端口號也不能省略,因為默認會連接https的443端口
為了讓Docker可以連接到http協議的注冊中心,需要做以下修改:
- 對於Docker for Windows
直接在Settings窗口Deamon選項中Insecure registries中輸入Harbor的服務地址即可,如圖:
- 對於Linux上的Docker
網絡中普遍留傳的方法如下:
修改/etc/default/docker
這個配置文件,增加如下內容:
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 192.168.9.18"
樓主實測此方法對於新版Docker不可行,主要是根部不存在/etc/default/docker
這個配置文件。
經過一番尋找,對於CentOS7以上的Docker可以使用這種方法(實測可行):
修改文件/usr/lib/systemd/system/docker.service
將其中的行:
ExecStart=/usr/bin/dockerd
替換為:
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:80
然后執行如下命令,重新加載配置並重啟docker服務:
systemctl daemon-reload
systemctl restart docker
最后執行如下命令,驗證docker的啟動參數是否為我們所要:
ps -ef | grep docker
對於Ubuntu16.04方法類似(未親測),修改如下配置文件:
/lib/systemd/system/docker.service
,替換其中的
#ExecStart=/usr/bin/dockerd -H fd://
為
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:5000 -H fd://
並安裝上面介紹的方式重啟docker即可。
修改以后先把docker compose停掉,然后重啟Docker。(需要在Harbor安裝目錄下執行。(docker-compose命令都需要在doker-compose.yml所在目錄中執行))
對於Windows,在應用更改后,Docker for Windows會自動要求重啟。
對於Linux,執行下列命令:
docker-compose stop
service docker restart
docker-compose start
推送image到Harbor,注意,首先需要用tag命令建立源image與目標image的關聯
docker tag image:tag ip:port/harbor-project-name/image:tag
docker push ip:port/harbor-project-name/image:tag
ProjectAdmin及Developer兩個組的用戶有權限push,其它組用戶只可以pull
從遠程拉取image
docker pull ip:port/harbor-project-name/image:tag
關於Docker的使用可見此文檔
其它
- 當Harbor無法工作時,首先考慮使用
sudo docker-compose ps
查看所有container是否正常運行 - Harbor使用rsyslog記錄日志,如果遇到問題可以查看
/var/log/harbor
目錄中的日志文件來尋找原因 - 如果使用配置文件中的密碼登錄后,無法修改admin的密碼(報錯為修改密碼失敗),可以先創建一個用戶,然后就可以成功修改admin的密碼了。
- Harbor的數據存儲於/data/目錄下,卸載或重新安裝Harbor都不會影響這個目錄的數據