1. 程式人生 > >【轉】配置harbor映象倉庫(HTTP與HTTPS)

【轉】配置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. 訪問頁面

http://ip

使用者名稱密碼就是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[我使用的時候這個不生效,重啟之後就可以了]):