Docker容器應用的開發和運行離不開可靠的鏡像管理,雖然docker官方提供了公共的鏡像倉庫(Docker Hub),可是從安全和效率等方面考慮,部署咱們私有環境內的Registry也是很是必要的。Harbor是由VMware公司開源的企業級的Docker Registry管理項目,它包括權限管理(RBAC)、LDAP、日誌審覈、界面管理、自我註冊、鏡像複製和中文支持等功能。python
環境、軟件準備:mysql
系統:Centos 7.3nginx
Docker:version 1.12.6git
Docker-compose:version 1.14.0github
Harbor:version 1.1.2sql
注意:Harbor的全部服務組件都是在Docker中部署,因此官方安裝使用Docker-compose快速部署,因此咱們須要安裝Docker、Docker-compose。因爲Harbor是基於Docker Registry V2版本,因此就要求Docker版本不小於1.10.0,Docker-compose版本不小於1.6.0。docker
安裝 docker:數據庫
# yum install docker
安裝 Docker-compose:安全
# curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose # chmod +x /usr/bin/docker-compose # docker-compose --version docker-compose version 1.14.0, build c7bdf9e
下載Harbor安裝包:dom
## 在線安裝包 # wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz # tar zxvf harbor-offline-installer-v1.1.2.tgz ## 離線安裝包 # wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz # tar zxvf harbor-online-installer-v1.1.2.tgz
配置Harbor:
# cd harbor # vi harbor.conf ## Configuration file of Harbor # hostname設置訪問地址,可使用ip、域名,不能夠設置爲127.0.0.1或localhost hostname = 172.30.90.250 # 訪問協議,默認是http,也能夠設置https,若是設置https,則nginx ssl須要設置on ui_url_protocol = http # mysql數據庫root用戶默認密碼root123,實際使用時修改下 db_password = root123 max_job_workers = 3 customize_crt = on ssl_cert = /data/cert/server.crt ssl_cert_key = /data/cert/server.key secretkey_path = /data admiral_url = NA # 郵件設置,發送重置密碼郵件時使用 email_identity = email_server = smtp.mydomain.com email_server_port = 25 email_username = sample_admin@mydomain.com email_password = abc email_from = admin <sample_admin@mydomain.com> email_ssl = false # 啓動Harbor後,管理員UI登陸的密碼,默認是Harbor12345 harbor_admin_password = Harbor12345 # 認證方式,這裏支持多種認證方式,如LADP、本次存儲、數據庫認證。默認是db_auth,mysql數據庫認證 auth_mode = db_auth # LDAP認證時配置項 ldap_url = ldaps://ldap.mydomain.com #ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com #ldap_search_pwd = password ldap_basedn = ou=people,dc=mydomain,dc=com #ldap_filter = (objectClass=person) ldap_uid = uid ldap_scope = 3 ldap_timeout = 5 # 是否開啓自注冊 self_registration = on # Token有效時間,默認30分鐘 token_expiration = 30 # 用戶建立項目權限控制,默認是everyone(全部人),也能夠設置爲adminonly(只能管理員) project_creation_restriction = everyone verify_remote_cert = on
修改完配置文件後,在當前目錄執行./install.sh,Harbor服務就會根據當前目錄下的docker-compose.yml開始下載依賴的鏡像,檢測並按照順序依次啓動各個服務,Harbor依賴的鏡像及啓動服務以下:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE vmware/harbor-jobservice v1.1.2 ac332f9bd31c 5 weeks ago 162.9 MB vmware/harbor-ui v1.1.2 803897be484a 5 weeks ago 182.9 MB vmware/harbor-adminserver v1.1.2 360b214594e7 5 weeks ago 141.6 MB vmware/harbor-db v1.1.2 6f71ee20fe0c 5 weeks ago 328.5 MB vmware/registry 2.6.1-photon 0f6c96580032 9 weeks ago 150.3 MB vmware/harbor-notary-db mariadb-10.1.10 64ed814665c6 3 months ago 324.1 MB vmware/nginx 1.11.5-patched 8ddadb143133 3 months ago 199.2 MB vmware/notary-photon signer-0.5.0 b1eda7d10640 3 months ago 155.7 MB vmware/notary-photon server-0.5.0 6e2646682e3c 4 months ago 156.9 MB vmware/harbor-log v1.1.2 9c46a7b5e517 5 months ago 192.4 MB photon 1.0 e6e4e4a2ba1b 12 months ago 127.5 MB # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db8143feb3ed vmware/nginx:1.11.5-patched "nginx -g 'daemon off" 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx 2e06132afd03 vmware/harbor-jobservice:v1.1.2 "/harbor/harbor_jobse" 4 hours ago Up 4 hours harbor-jobservice b7a9985f7ef1 vmware/harbor-ui:v1.1.2 "/harbor/harbor_ui" 4 hours ago Up 4 hours harbor-ui 47662679ceb6 vmware/registry:2.6.1-photon "/entrypoint.sh serve" 4 hours ago Up 4 hours 5000/tcp registry 1b04ab83f582 vmware/harbor-db:v1.1.2 "docker-entrypoint.sh" 4 hours ago Up 4 hours 3306/tcp harbor-db 12d96d4fc166 vmware/harbor-adminserver:v1.1.2 "/harbor/harbor_admin" 4 hours ago Up 4 hours harbor-adminserver deb00fef5f97 vmware/harbor-log:v1.1.2 "/bin/sh -c 'crond &&" 4 hours ago Up 4 hours 127.0.0.1:1514->514/tcp harbor-log
啓動完成後,咱們訪問剛設置的hostname便可:http://172.30.90.250,默認是80端口,若是端口占用,咱們能夠去修改docker-compose.yml文件中,對應服務的端口映射。
登陸Web Harbor
輸入用戶名admin,默認密碼(或已修改密碼)登陸系統。
咱們能夠看到系統各個模塊以下:
項目:新增/刪除項目,查看鏡像倉庫,給項目添加成員、查看操做日誌、複製項目等
日誌:倉庫各個鏡像create、push、pull等操做日誌
系統管理:
用戶管理:新增/刪除用戶、設置管理員等
複製管理:新增/刪除從庫目標、新建/刪除/啓停複製規則等
配置管理:認證模式、複製、郵箱設置、系統設置等
其餘設置:
用戶設置:修改用戶名、郵箱、名稱信息
修改密碼:修改用戶密碼
注意:非系統管理員用戶登陸,只能看到有權限的項目和日誌,其餘模塊不可見。
新建項目
咱們新建一個名稱爲bourbon的項目,設置不公開。注意:當項目設爲公開後,任何人都有此項目下鏡像的讀權限。命令行用戶不須要「docker login」就能夠拉取此項目下的鏡像。
新建項目完畢後,咱們就能夠用admin帳戶提交本地鏡像到Harbor倉庫了。例如咱們提交本地nginx鏡像:
# docker login 172.30.90.250 Username: admin Password: Login Succeeded # docker tag nginx 172.30.90.250/bourbon/nginx:latest # docker images REPOSITORY TAG IMAGE ID CREATED SIZE 172.30.90.250/bourbon/nginx latest e4e6d42c70b3 8 days ago 107.5 MB docker.io/nginx latest e4e6d42c70b3 8 days ago 107.5 MB # docker push 172.30.90.250/bourbon/nginx The push refers to a repository [172.30.90.250/bourbon/nginx] 473c450db44d: Pushed 57842ac5be45: Pushed 54522c622682: Pushed latest: digest: sha256:423210a5903e9683d2bc8436ed06343ad5955c1aec71a04e1d45bd70b0d68460 size: 948
上傳完畢後,登陸Web Harbor,選擇項目,項目名稱bourbon,就能夠查看剛纔傳的nginx image了。
建立用戶並不是配權限
咱們剛一直是用admin操做,實際應用中咱們使用每一個人本身的帳戶登陸。因此就須要新建用戶,同時爲了讓用戶有權限操做已經建立的項目,還必須將該用戶添加到該項目成員中。
建立用戶名爲tshan的測試用戶,點擊系統管理-》用戶管理-》建立用戶,輸入用戶名、郵箱、密碼等信息。
將tshan用戶添加到bourbon項目成員中,點擊項目-》bourbon-》成員-》新建成員,填寫姓名,選擇角色。
如今咱們使用tshan帳戶本地模擬操做pull剛上傳的nginx鏡像。
# docker rmi -f 172.30.90.250/bourbon/nginx Untagged: 172.30.90.250/bourbon/nginx:latest Untagged: 172.30.90.250/bourbon/nginx@sha256:423210a5903e9683d2bc8436ed06343ad5955c1aec71a04e1d45bd70b0d68460 # docker logout 172.30.90.250 Remove login credentials for 172.30.90.250 # docker login 172.30.90.250 Username: tshan Password: Login Succeeded # docker pull 172.30.90.250/bourbon/nginx:latest Trying to pull repository 172.30.90.250/bourbon/nginx ... latest: Pulling from 172.30.90.250/bourbon/nginx Digest: sha256:423210a5903e9683d2bc8436ed06343ad5955c1aec71a04e1d45bd70b0d68460
1.配置並啓動Harbor後,本地執行登陸操做,報錯:
# docker login 172.30.90.250 Username: admin Password: Error response from daemon: Get https://172.30.90.250/v1/users/: dial tcp 172.30.90.250:443: getsockopt: connection refused
這是由於docker1.3.2版本開始默認docker registry使用https,這裏Harbor默認設置的http的方式,因此當執行用docker login、pull、push等命令操做非https的docker registry的時候就會報錯。
能夠修改配置/etc/sysconfig/docker, 將OPTIONS增長--insecure-registry 172.30.90.250。
2.管理Harbor
若是須要修改Harbor的配置文件harbor.cfg,由於Harbor是基於docker-compose服務編排的,咱們可使用docker-compose命令重啓Harbor。
不修改配置文件,重啓Harbor命令:
# docker-compose start | stop | restart