【轉】配置harbor映象倉庫(HTTP與HTTPS)
依賴環境:
Python 2.7或以上
Docker 1.10或以上
Docker Compose 1.6.0或以上
1. 安裝pip
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
easy_install-2.7 pip
2. 安裝docker-compose
pip install docker-compose
docker-compose --version
3. 安裝harbor
3.1下載harbor安裝包
連結地址: https://github.com/vmware/harbor/releases
網速快的話可以下載線上或者離線包來安裝
我下載太慢,上傳到網盤上一個harbor的離線安裝包:https://pan.baidu.com/s/1bpUaGbl
3.2解壓
tar xvf harbor-offline-installer-v1.1.1.tgz
3.3修改配置檔案harbor.cfg
cd harbor
vi harbor.cfg
如果只想能夠執行起來的話,只需要修改hostname即可,改成你機器的ip;
看一下harbour_admin_password的預設值是多少,這個是你一會兒登入網頁時的使用者名稱admin對應的密碼;
至於ldap和email可以不用配置,若是報錯,直接把相關引數註釋掉即可;
3.4修改docker-compose.yml檔案【配置HTTP,若需要配置HTTPS,則不需要配置這步】
新增ports埠,為了使用http快速訪問
vi docker-compose.yml(注意空格)
registry:
networks:
- harbor
ports:
- 5000:5000
4. 執行./prepare
初始化common資料夾中的配置檔案,若是修改了common中的配置檔案,直接重啟即可,不能執行該命令
5. 執行./install.sh
6. 檢視容器
docke-compose ps
其它命令(修改配置檔案後最好把容器刪除再建立):
docker-compose up -d ###後臺啟動,如果容器不存在根據映象自動建立
docker-compose down -v ###停止容器並刪除容器
docker-compose start ###啟動容器,容器不存在就無法啟動,不會自動建立映象
docker-compose stop ###停止容器
docker-compose logs ###檢視日誌(harbor日誌存放地址 /var/logs/harbor)
7. 訪問頁面
使用者名稱密碼就是harbor.cfg檔案中使用者admin和其對應的密碼
頁面操作挺簡單,就不詳細介紹了,有個遷移的功能挺不錯的
8. 配置docker啟動檔案來使用harbor
因為我前面取巧使用的對映埠5000來使用http,所以我們需要在docker的啟動檔案上新增非安全模式來連線倉庫;
Centos7系統:vi /etc/sysconfig/docker
在OPTIONS的引數中新增–insecure-registry ip:5000
如:OPTIONS=’–selinux-enabled–insecure-registry 192.168.x.x:5000’
或者vi /etc/docker/daemon.json
以json串的形式新增該鍵值對
重啟docker
systemctl daemon-reload
Systemctl restart docker
9. 使用harbor倉庫;
說明:push時需要先登入,pull就不需要了
docker login -u admin -p admin 192.168.101.92:5000
給映象打標籤:
docker tag centos:latest 192.168.x.x:5000/library/centos:latest
上傳映象:
docker push192.168.x.x:5000/library/centos:latest
下載映象:
docker pull192.168.x.x:5000/library/centos:latest
11.配置mirror
網上提這個的挺少,看到一篇部落格http://blog.csdn.net/project_harbor/article/details/51261934,但我並沒有配出來,想使用的可以試試
參考:https://www.jianshu.com/p/2ebadd9a323d
http://blog.csdn.net/Tech_Salon/article/details/70214267
後補充:
最近因為專案上線的問題,不可能把所有機器的docker訪問都改為非安全性的,所以只好配置了一下HTTPS,記錄一下;
配置HTTPS訪問
宣告:我機器ip為192.168.101.85
1.1.建立CA證書發行站點(注意commonName為192.168.101.85)
openssl req -newkey rsa:4096 -nodes -sha256 -keyoutca.key -x509 -days 365 -out ca.crt
一直回車,直至出來commonName,輸入你的主機ip
1.2.建立CA證書生成請求(注意commonName為192.168.101.85)
openssl req -newkey rsa:4096 -nodes -sha256 -keyout192.168.101.85.key -out 192.168.101.85.csr
一直回車,直至出來commonName,輸入你的主機ip
1.3.建立CA站點檔案目錄
demoCA是OpenSSL的證書儲存依賴目錄,建立在與上面的ca.crt的同級目錄下。
mkdir demoCA
cd demoCA
touch index.txt
echo ‘01’ > serial
cd …
1.4.生成CA客戶端證書
echosubjectAltName = IP:192.168.101.85 > extfile.cnf
opensslca -in 192.168.101.85.csr -out 192.168.101.85.crt -cert ca.crt -keyfile ca.key\
-extfileextfile.cnf -outdir .
若報錯:
Check that the request matches thesignature
Signature ok
The mandatory stateOrProvinceName fieldwas missing
該錯誤的解決辦法:
把/etc/pki/tls/openssl.cnf中大約86 87的行
請使用vi把如下內容
stateOrProvinceName= match
organizationName= match
改為:
stateOrProvinceName= optional
organizationName= optional
3.2.在客戶端部署證書
將ca.crt 複製到 docker 客戶端的 /etc/docker/certs.d/yourdomain.com(registry伺服器的IP)。
#獲取ca.crt檔案,如果目錄不存在,則需要預先手動建立之。
sudo scp [email protected]:~/docker/ca.crt/etc/docker/certs.d/192.168.101.85/
注意:
每一個客戶端都需要複製上面的ca.crt到Docker相應目錄,然後重啟Docker。
瀏覽器需要新增“訪問例外”,根據提示進行操作。
2.3.harbor.cfg修改
主要修改以下幾個地方:
#配置Harbor服務的主機IP地址或主機名,注意要與CA證書的完全一致。
#hostname = reg.mydomain.com
hostname = 192.168.101.85
配置Harbor使用https
#ui_url_protocol = http
ui_url_protocol = https
#改為上面生成的CA客戶端證書,注意路徑一致,可使用命令pwd
獲得。
#ssl_cert = /path/to/server.crt
ssl_cert = /home/supermap/docker/192.168.101.85.crt
#ssl_cert_key = /path/to/server.key
ssl_cert_key =/home/supermap/docker/192.168.101.85.key
然後按照上面的方法啟動執行就OK了;
java使用http或其他方式連線時:
引數介紹:
映象倉庫地址:
證書資訊:/etc/docker/certs.d/192.168.101.85(具體檢視上面的生成客戶端證書)
token:(harbor/common/config/registry/config.yml中的ui模組中有對應資訊ISSUER與Service)
ISSUER:harbor-token-issuer
Service:harbor-registry
Private Key(harbor/common/config/ui/private_key.pem[我使用的時候這個不生效,重啟之後就可以了]):