.NET遇上Docker - Harbor的安裝與基本使用
Harbor是一個開源企業(yè)級Docker注冊中心,可以用于搭建私有的Docker Image倉庫。可以實現(xiàn)權(quán)限控制等。
安裝Harbor
首先,需要安裝Docker和Docker Compose,參考其它文章。
Harbor 0.5.0需要:
- Docker 1.10
- Docker Compose 1.6.0
- Python 2.7或更高版本(且不是系統(tǒng)自帶的Python解釋器)
Docker與Docker Compose安裝可以參考這篇文章。
本文中選擇將Harbor的密碼存儲在MySQL中,Harbor使用的MySQL是安裝包中集成的MySQL的Docker鏡像,所以如果系統(tǒng)沒有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
關(guān)于配置文件幾個需要修改的地方:
hostname:WebUI的訪問地址,可以是IP或域名(但不要使用127.0.0.1或localhost,這將導(dǎo)致無法外部訪問)ui_url_protocol:http(默認)或https(需要配置SSL的Nginx)email_config:郵件相關(guān)配置,郵件配置用于密碼重置等場景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(關(guān)閉注冊,只能管理員添加用戶)。此項僅在auth_mode為db_auth時起作用。use_compressed_js:啟用js壓縮合并,默認為onmax_job_workers:最大鏡像復(fù)制作業(yè)并行數(shù),默認為3token_expiration:token過期時間,默認30分鐘verify_remote_cert:驗證遠程注冊中心的證書,默認為on,當(dāng)遠程注冊中心不適用SSL或使用自簽名證書時,設(shè)置為off。customize_crt:是否是自簽名證書,on(自簽名證書,需要設(shè)置crt_config一些列選項的值)或off(使用證書頒發(fā)機構(gòu)的證書)crt_config:使用自簽名證書時的一些配置項
注意:關(guān)于hostname配置,如果使用IP,請確保80端口沒有被占用,否則會因為80端口被占用而導(dǎo)致安裝后Harbor服務(wù)啟動失敗。
下面是一個配置文件的配置示例:
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存儲在本地文件系統(tǒng),其它可選的位置包括S3,OpenStack Swift等。
這個配置在common/templates/registry/config.yml中的storage一節(jié)來配置。
執(zhí)行安裝
修改好上述配置后,就可以執(zhí)行安裝了
./install.sh
如果使用在線安裝文件,需要等待image下載完成。
注意:如果主機上的80端口已經(jīng)被占用,則使用IP安裝會失敗,請給主機分配域名,并使用域名作為hostname來訪問。如果想修改默認的80端口,見修改端口號一節(jié)
安裝完成后,訪問hostname配置的域名或IP即可進入Harbor的管理頁面。
第一次使用配置文件中harbor_admin_password中的默認管理員密碼,并修改密碼。
修改端口號
對于http發(fā)布方式,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
對于第一次安裝,直接修改完所有配置文件后執(zhí)行install.sh就可以了。
停止/啟動Harbor
sudo docker-compose stop
sudo docker-compose start
卸載Harbor
執(zhí)行如下步驟徹底刪除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拉取鏡像或著發(fā)布鏡像到Harbor,第一步都是登錄Harbor這個注冊中心。
docker login ip:port
按照前文的安裝方式,即http安裝,這個命令默認都會報錯。因為Docker默認要求注冊中心以https方式工作。
命令中的端口號也不能省略,因為默認會連接https的443端口
為了讓Docker可以連接到http協(xié)議的注冊中心,需要做以下修改:
- 對于Docker for Windows
直接在Settings窗口Deamon選項中Insecure registries中輸入Harbor的服務(wù)地址即可,如圖:

- 對于Linux上的Docker
網(wǎng)絡(luò)中普遍留傳的方法如下:
修改/etc/default/docker這個配置文件,增加如下內(nèi)容:
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 192.168.9.18"
樓主實測此方法對于新版Docker不可行,主要是根部不存在/etc/default/docker這個配置文件。
經(jīng)過一番尋找,對于CentOS7以上的Docker可以使用這種方法(實測可行):
修改文件/usr/lib/systemd/system/docker.service將其中的行:
ExecStart=/usr/bin/dockerd
替換為:
ExecStart=/usr/bin/dockerd --insecure-registry my-docker-registry.com:80
然后執(zhí)行如下命令,重新加載配置并重啟docker服務(wù):
systemctl daemon-reload
systemctl restart docker
最后執(zhí)行如下命令,驗證docker的啟動參數(shù)是否為我們所要:
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安裝目錄下執(zhí)行。(docker-compose命令都需要在doker-compose.yml所在目錄中執(zhí)行))
對于Windows,在應(yīng)用更改后,Docker for Windows會自動要求重啟。
對于Linux,執(zhí)行下列命令:
docker-compose stop
service docker restart
docker-compose start
推送image到Harbor,注意,首先需要用tag命令建立源image與目標image的關(guān)聯(lián)
docker tag image:tag ip:port/harbor-project-name/image:tag
docker push ip:port/harbor-project-name/image:tag
ProjectAdmin及Developer兩個組的用戶有權(quán)限push,其它組用戶只可以pull
從遠程拉取image
docker pull ip:port/harbor-project-name/image:tag
關(guān)于Docker的使用可見此文檔
其它
- 當(dāng)Harbor無法工作時,首先考慮使用
sudo docker-compose ps查看所有container是否正常運行 - Harbor使用rsyslog記錄日志,如果遇到問題可以查看
/var/log/harbor目錄中的日志文件來尋找原因 - 如果使用配置文件中的密碼登錄后,無法修改admin的密碼(報錯為修改密碼失敗),可以先創(chuàng)建一個用戶,然后就可以成功修改admin的密碼了。
- Harbor的數(shù)據(jù)存儲于/data/目錄下,卸載或重新安裝Harbor都不會影響這個目錄的數(shù)據(jù)

浙公網(wǎng)安備 33010602011771號