自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Harbor構(gòu)建私有Docker鏡像倉庫

開發(fā) 開發(fā)工具
AD/LDAP集成、以及審計日志(Audit logging) 等企業(yè)用戶需求的功能,同時還原生支持中文。Harbor的每個組件都是以Docker容器的形式構(gòu)建的,使用Docker Compose來對它進行部署。

簡介

Harbor是VMware公司最近開源的企業(yè)級Docker Registry項目, 項目地址為https://github.com/vmware/harbor 其目標是幫助用戶迅速搭建一個企業(yè)級的Docker registry服務(wù)。它以Docker公司開源的registry為基礎(chǔ),提供了管理UI, 基于角色的訪問控制(Role Based Access Control),AD/LDAP集成、以及審計日志(Audit logging) 等企業(yè)用戶需求的功能,同時還原生支持中文。Harbor的每個組件都是以Docker容器的形式構(gòu)建的,使用Docker Compose來對它進行部署。用于部署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/`目錄下完成,因此若無特別說明,工作目錄都在該目錄下。

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

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

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

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

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

  1. docker-compose up -d 

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

使用harbor

Web UI

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

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

docker client

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

由于我們配置認證服務(wù)使用的是http,Docker認為是不安全的,要使用我們部署的鏡像倉庫,需要配置本地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 

然后為該鏡像打上新的標簽,標簽格式為:Harbor地址/項目名/鏡像名稱:鏡像標簽,如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.

其基本工作原理是,當用戶pull一個鏡像時,若鏡像在mirror 服務(wù)器存在,則直接從mirror服務(wù)器拉取,否則若不存在該鏡像,則由mirror server自動代理往dockerhub(可配置)中拉取鏡像,并緩存到mirror服務(wù)器中,當客戶再次拉取這個鏡像時,直接從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由于引進了認證功能,因此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認證

Harbor支持兩種認證方式,默認為本地存儲,即賬號信息存儲在mysql下,上文已經(jīng)具體介紹。接下來介紹另外一種認證方式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@example.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認證

修改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@example.com 42.62.x.x 

查看結(jié)果。

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

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2024-01-22 09:12:51

2022-07-11 07:37:55

HarborContainerd

2020-08-07 17:03:24

私有鏡像倉庫

2022-09-16 10:19:36

HarborContainerd

2020-09-18 07:59:44

GitLabCI

2019-08-18 23:46:52

私有云容器鏡像倉庫

2023-03-30 07:35:55

2024-02-20 08:08:43

2024-05-15 11:09:30

2021-08-23 08:30:30

Docker BuildKit 架構(gòu)

2022-12-08 19:27:38

2022-09-15 10:03:42

Jaeger分布式追蹤系統(tǒng)

2023-02-13 23:52:18

2021-05-10 08:58:09

Harbor架構(gòu)Registry 服務(wù)

2021-10-20 07:18:51

Harbor鏡像項目

2019-10-16 10:08:58

DockerLinuxWindows

2017-11-07 06:28:11

2020-11-12 07:51:05

DockerSpring Boot應(yīng)用

2017-11-13 17:17:11

Docker鏡像Go

2022-09-06 10:39:38

Docker鏡像構(gòu)建
點贊
收藏

51CTO技術(shù)棧公眾號