日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用Harbor構(gòu)建私有Docker鏡像倉庫

簡介

創(chuàng)新互聯(lián)一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計,全網(wǎng)營銷推廣到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價值,為企業(yè)制作有用的創(chuàng)意設(shè)計體驗。核心團(tuán)隊擁有超過十年以上行業(yè)經(jīng)驗,涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)眉山聯(lián)通機(jī)房、重慶APP開發(fā)、手機(jī)移動建站、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)整合營銷。

Harbor是VMware公司最近開源的企業(yè)級Docker Registry項目, 項目地址為https://github.com/vmware/harbor 其目標(biāo)是幫助用戶迅速搭建一個企業(yè)級的Docker registry服務(wù)。它以Docker公司開源的registry為基礎(chǔ),提供了管理UI, 基于角色的訪問控制(Role Based Access Control),AD/LDAP集成、以及審計日志(Audit logging) 等企業(yè)用戶需求的功能,同時還原生支持中文。Harbor的每個組件都是以Docker容器的形式構(gòu)建的,使用Docker Compose來對它進(jìn)行部署。用于部署Harbor的Docker Compose模板位于 /Deployer/docker-compose.yml,由5個容器組成:

  • Proxy: 由Nginx 服務(wù)器構(gòu)成的反向代理。
  • Registry:由Docker官方的開源registry 鏡像構(gòu)成的容器實例。
  • UI: 即架構(gòu)中的core services, 構(gòu)成此容器的代碼是Harbor項目的主體。
  • Mysql: 由官方MySql鏡像構(gòu)成的數(shù)據(jù)庫容器。
  • Log: 運行著rsyslogd的容器,通過log-driver的形式收集其他容器的日志。

這幾個容器通過Docker link的形式連接在一起,在容器之間通過容器名字互相訪問。對終端用戶而言,只需要暴露proxy (即Nginx)的服務(wù)端口。

快速部署方法

Harbor使用Docker-compose部署,后續(xù)所有的配置以及部署均在$HARBOR_HOME/Deploy/`目錄下完成,因此若無特別說明,工作目錄都在該目錄下。

首先需要進(jìn)行簡單的配置,配置文件為harbor.cfg,配置項如下:

  • hostname:hostname為外部可訪問的地址,即bind addr,通常設(shè)置為本地公有IP,若內(nèi)部使用DNS,可設(shè)置為主機(jī)名。
  • auth_mode:Harbor支持兩種認(rèn)證方式,默認(rèn)為本地存儲,即賬號信息存儲在mysql下,本文先使用本地存儲方式,另外一種認(rèn)證方式LDAP將在后續(xù)章節(jié)單獨介紹。

設(shè)置完畢后,配置文件為:

 
 
 
 
  1. hostname = 42.62.x.x
  2. ui_url_protocol = http
  3. #email_server = smtp.mydomain.com
  4. #email_server_port = 25
  5. #email_username = sample_admin@mydomain.com
  6. #email_password = abc
  7. #email_from = admin 
  8. ##The password of Harbor admin, change this before any production use.
  9. harbor_admin_password= admin
  10. ##By default the auth mode is db_auth, i.e. the credentials are stored in a local database.
  11. #Set it to ldap_auth if you want to verify a user credentials against an LDAP server.
  12. auth_mode = ldap_auth
  13. #The password for the root user of mysql db, change this before any production use.
  14. db_password = root123
  15. #Switch for self-registration feature
  16. self_registration = on

運行./prepare腳本更新配置。完成配置后,就可以使用docker-compose快速部署harbor:

 
 
 
 
  1. docker-compose up -d

安裝完成后,訪問Web UI,地址:http://bind_addr,即配置的hostname地址,端口為80。如圖:

使用harbor

Web UI

安裝完成后,打開Web UI,點擊登錄,默認(rèn)賬戶admin/Harbor12345,登錄成功后進(jìn)入項目管理界面:

用戶可以點擊“我的項目”進(jìn)行項目管理,比如新建項目、用戶以及權(quán)限管理等。點擊項目名稱,進(jìn)入該項目下的鏡像管理界面,可以查看、檢索鏡像。

docker client

以上是UI界面的使用,接下來介紹如何使用docker client進(jìn)行鏡像的管理,由于harbor只支持Registry V2 API,因此Docker client版本必須>= 1.6.0。

由于我們配置認(rèn)證服務(wù)使用的是http,Docker認(rèn)為是不安全的,要使用我們部署的鏡像倉庫,需要配置本地docker,修改配置文件(/etc/default/docker)為:

 
 
 
 
  1. DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 42.62.x.x"

其中42.62.x.x是我們部署Harbor的地址,即hostname配置項值。配置完后需要重啟docker服務(wù)。

驗證能否登錄:

 
 
 
 
  1. docker login 42.62.x.x
  2. # docker login -u admin -p Harbor12345 -e test@gmail.com 42.62.x.x

登錄成功后顯示如下:

接下來我們上傳一個鏡像,以ubuntu鏡像為例,首先從docker hub拉取ubuntu鏡像:

 
 
 
 
  1. docker pull ubuntu:14.04

然后為該鏡像打上新的標(biāo)簽,標(biāo)簽格式為:Harbor地址/項目名/鏡像名稱:鏡像標(biāo)簽,如42.62.x.x/library/ubuntu:14.04:

 
 
 
 
  1. docker tag ubuntu:14.04 42.62.x.x/library/ubuntu:14.04

push我們的鏡像到harbor倉庫中:

 
 
 
 
  1. docker push ubuntu:14.04 42.62.x.x/library/ubuntu:14.04

push成功后,我們就可以從harbor倉庫中使用docker pull拉取我們的鏡像了,注意如果是私有項目,必須先使用docker login登錄:

 
 
 
 
  1. docker pull 42.62.x.x/library/ubuntu:14.04

使用harbor作為mirror registry

Mirror Registry簡介

Mirror是Docker Registry的一種特殊類型,它起到了類似代理服務(wù)器的緩存角色,在用戶和Docker Hub之間做Image的緩存。 官方定義為:

Such a registry is provided by a third-party hosting infrastructure but is targeted at their customers only. Some mechanism ensures that public images are pulled from a sponsor registry to the mirror registry, to make sure that the customers of the third-party provider can docker pull those images locally.

其基本工作原理是,當(dāng)用戶pull一個鏡像時,若鏡像在mirror 服務(wù)器存在,則直接從mirror服務(wù)器拉取,否則若不存在該鏡像,則由mirror server自動代理往dockerhub(可配置)中拉取鏡像,并緩存到mirror服務(wù)器中,當(dāng)客戶再次拉取這個鏡像時,直接從mirror server中拉取,不需要再次從dockerhub中拉取。

注意Mirror跟Private Registry有本質(zhì)區(qū)別

Private Registry是開發(fā)者或者企業(yè)自建的Image存儲庫,通常用來保存企業(yè)內(nèi)部的Docker Image,用于內(nèi)部開發(fā)流程和產(chǎn)品的發(fā)布、版本控制。Mirror是一種代理中轉(zhuǎn)服務(wù),我們提供的Mirror服務(wù),直接對接Docker Hub的官方Registry,Docker Hub上有數(shù)以十萬計的各類Docker Image。在使用Private Registry時,需要在Docker Pull,或Dockerfile中直接鍵入Private Registry的地址,通常這樣會導(dǎo)致跟Private Registry的綁定,缺少靈活性。

原理如圖:

Harbor目前不支持pull cache功能,已提交issue #120。不過我們只需要手動修改下配置即可完成,具體配置可參考官方Registry as a pull through cache.

我們在運行./prepare之前修改config/registry/config.yml文件,追加以下配置:

 
 
 
 
  1. proxy: 
  2. remoteurl: https://registry-1.docker.io

如果需要訪問私有倉庫,需要填寫dockerhub的用戶名和密碼:

 
 
 
 
  1. proxy:
  2.   remoteurl: https://registry-1.docker.io
  3.   username: [username]
  4.   password: [password]

然后重新啟動harbor服務(wù):

 
 
 
 
  1. # 注意不要執(zhí)行./prepare
  2. docker-compose stop
  3. docker-compose rm -f
  4. docker-compose up -d

除了設(shè)置harbor(或者registry),還需要配置本地docker服務(wù),指定--registry-mirror參數(shù),修改docker配置文件(/etc/default/docker):

 
 
 
 
  1. DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://42.62.x.x --insecure-registry 42.62.x.x"

注意替換42.62.x.x為你的registry地址。

注意:修改了docker配置文件,必須重啟docker服務(wù)才能生效。

harbor由于引進(jìn)了認(rèn)證功能,因此push操作時,必須保證project存在,比如push krystism/ffmpeg,必須保證harbor創(chuàng)建了krystism project,否則會失敗。為了能夠正常push/pull dockerhub的官方鏡像,務(wù)必創(chuàng)建library project,如圖:

假設(shè)本地不存在python鏡像:

 
 
 
 
  1. docker pull python # pull from dockerhub
  2. docker rmi python # remove the image
  3. docker pull python # yes, it will pull from harbor now

我們***次pull python后,harbor發(fā)現(xiàn)不存在該鏡像,于是自己作為代理往dockerhub里拉取,拉取后保存到本地,可以通過WebUI查看??蛻舳嗽俅卫ython鏡像時,由于harbor已經(jīng)存在該鏡像,因此不需要再往dockerhub拉取,速度大幅度提高!

對接LDAP認(rèn)證

Harbor支持兩種認(rèn)證方式,默認(rèn)為本地存儲,即賬號信息存儲在mysql下,上文已經(jīng)具體介紹。接下來介紹另外一種認(rèn)證方式LDAP,只需要修改配置文件即可。需要提供ldap url以及l(fā)dap basedn參數(shù),并且設(shè)置auth_mode為ldap_auth。

快速部署LDAP服務(wù)

為了測試方便,我們使用docker啟動一個LDAP服務(wù)器,啟動腳本如下:

 
 
 
 
  1. #!/bin/bash
  2. NAME=ldap_server
  3. docker rm -f $NAME 2>/dev/null
  4. docker run --env LDAP_ORGANISATION="Unitedstack Inc." --env LDAP_DOMAIN="ustack.com" \
  5.  --env LDAP_ADMIN_PASSWORD="admin_password" -v `pwd`/containers/openldap/data:/var/lib/ldap -v `pwd`/containers/openldap/slapd.d:/etc/ldap/slapd.d --detach --name $NAME  osixia/openldap:1.1.2

創(chuàng)建新用戶,首先需要定義ldif文件,new_user.ldif:

 
 
 
 
  1. dn: uid=test,dc=ustack,dc=com
  2. uid: test
  3. cn: test
  4. sn: 3
  5. objectClass: top
  6. objectClass: posixAccount
  7. objectClass: inetOrgPerson
  8. loginShell: /bin/bash
  9. homeDirectory: /home/test
  10. uidNumber: 1001
  11. gidNumber: 1001
  12. userPassword: 1q2w3e4r
  13. mail: test@cdxwcx.com
  14. gecos: test

通過以下腳本創(chuàng)建新用戶,其中l(wèi)dap_server為LDAP服務(wù)容器名稱。

 
 
 
 
  1. docker cp new_user.ldif ldap_server:/ 
  2. docker exec ldap_server ldapadd -x -D "cn=admin,dc=ustack,dc=com" -w admin_password -f /new_user.ldif -ZZ

查看用戶是否創(chuàng)建成功:

 
 
 
 
  1. docker exec ldap_server ldapsearch -x -h localhost -b dc=ustack,dc=com -D "cn=admin,dc=ustack,dc=com" -w admin_password

檢查test用戶是否存在,若存在,則說明創(chuàng)建成功,否則需要使用docker logs查看日志。

配置harbor使用LDAP認(rèn)證

修改harbor.cfg文件關(guān)于LDAP配置項,如下:

 
 
 
 
  1. auth_mode = ldap_auth
  2. ldap_url = ldap://42.62.x.x
  3. ldap_basedn = uid=%s,dc=ustack,dc=com

然后重新部署harbor:

 
 
 
 
  1. ./prepare
  2. docker-compose stop
  3. docker-compose rm -f
  4. docker-compose up -d

測試是否能夠使用test用戶登錄:

 
 
 
 
  1. docker login -u test -p 1q2w3e4r -e test@cdxwcx.com 42.62.x.x

查看結(jié)果。

【本文是專欄作者“付廣平”的原創(chuàng)文章,如需轉(zhuǎn)載請通過獲得聯(lián)系】


當(dāng)前文章:使用Harbor構(gòu)建私有Docker鏡像倉庫
標(biāo)題鏈接:http://www.5511xx.com/article/cohgihe.html