使用harbor配置私倉

來源:互聯網
上載者:User

標籤:docker harbor

安裝harbor之前,需要安裝好Python,Docker,DockerCompose。Python需要2.7以上的版本,Docker需要1.10以上的版本;Docker Compose 需要1.6.0以上的版本。

 

一:安裝Docker Compose

https://docs.docker.com/compose/install/中介紹的各種安裝方法,只有使用pip的方式才能安裝成功。

使用pip安裝,因為docker-compose的依賴包可能會與原有python環境的系統包衝突,因此文檔中建議使用virtualenv。

首先安裝virtualenv:


pip install virtualenv  


然後為安裝docker-compose建立虛擬環境:

mkdir -p /opt/testvenv  

cd /opt/testvenv  

virtualenv venv  


啟用虛擬環境,安裝docker-compose:

source venv/bin/activate  

pip install docker-compose  


安裝好的docker-compose在目錄/opt/testvenv/venv/bin下,建立軟連結:

ln -s /opt/testvenv/venv/bin/docker-compose /usr/local/bin/docker-compose  

這樣便安裝好了docker-compose。

 

二:安裝harbor

1:使用源碼安裝,通過git下載源碼:

mkdir -p /opt/harbor/git  

cd /opt/harbor/git  

git clone https://github.com/vmware/harbor  


 

2:配置harbor

在安裝harbor之前,需要修改/opt/harbor/git/harbor/Deploy/harbor.cfg中的配置參數,然後執行prepare指令碼來產生harbor所有容器的設定檔,最後運行docker compose啟動harbor。

在檔案harbor.cfg中,需要配置的參數如下:

hostname:私人倉庫的主機名稱。可以是IP地址,也可以是網域名稱。這裡配置成192.168.1.104;

ui_url_protocol:使用者訪問私倉時使用的協議,預設時http,這裡配置成https;

harbor_admin_password:harbor的管理員賬戶密碼,預設密碼是Harbor12345,使用者名稱是admin;

其他配置參數可以參考:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

 

3:配置https訪問

使用者訪問harbor預設的協議是http,但是registry目前預設支援https訪問,如果使用http,需要在訪問私倉的主機上,修改docker的設定檔,增加--insecure-registry選項。

要配置https訪問,首先產生認證:

mkdir -p /opt/harbor/cert/  

openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout \  

 /opt/harbor/cert/domain.key -out /opt/harbor/cert/domain.crt  

  

...    

Country Name (2 letter code) [XX]:    

State or Province Name (full name) []:    

Locality Name (eg, city) [Default City]:    

Organization Name (eg, company) [Default Company Ltd]:    

Organizational Unit Name (eg, section) []:    

Common Name (eg, your name or your server‘s hostname) []:192.168.1.104  

Email Address []:    


 

然後將產生的認證複製到nginx容器的特定目錄下:

cp /opt/harbor/cert/domain.crt /opt/harbor/git/harbor/Deploy/config/nginx/cert/  

cp /opt/harbor/cert/domain.key /opt/harbor/git/harbor/Deploy/config/nginx/cert/  


 

然後修改/opt/harbor/git/harbor/Deploy/config/nginx目錄下的設定檔:

mv nginx.conf  nginx.conf.bak  

cp nginx.https.conf nginx.conf  


 

修改nginx.conf檔案內容:

server {  

  listen 443 ssl;  

  server_name 192.168.1.104;  

  

  # SSL  

  ssl_certificate /etc/nginx/cert/domain.crt;  

  ssl_certificate_key /etc/nginx/cert/domain.key;  

  ...  

}  

server {  

    listen 80;  

    server_name 192.168.1.104;  

    ...  

}  


 

4:產生修改harbor容器的設定檔:

cd /opt/harbor/git/harbor/Deploy  

./prepare   


 

運行prepare之後,需要修改/opt/harbor/git/harbor/Deploy/docker-compose.yml檔案中,容器的資料卷目錄,首先建立資料卷目錄:

[cpp] view plain copy 在CODE上查看代碼片派生到My Code片

mkdir -p /opt/harbor/data  

mkdir -p /opt/harbor/data/registry  

mkdir -p /opt/harbor/data/log  

mkdir -p /opt/harbor/data/database  


然後修改docker-compose.yml檔案內容:

version: ‘2‘  

services:  

  log:  

    build: ./log/  

    volumes:  

      - /opt/harbor/data/log/:/var/log/docker/  

    ports:  

      - 1514:514  

  registry:  

    image: library/registry:2.4.0  

    volumes:  

      - /opt/harbor/data/registry:/storage  

      - ./config/registry/:/etc/registry/  

    environment:  

      - GODEBUG=netdns=cgo  

    ports:  

      - 5001:5001  

    command:  

      ["serve", "/etc/registry/config.yml"]  

    depends_on:  

      - log  

    logging:  

      driver: "syslog"  

      options:    

        syslog-address: "tcp://127.0.0.1:1514"  

        syslog-tag: "registry"  

  mysql:  

    build: ./db/  

    volumes:  

      - /opt/harbor/data/database:/var/lib/mysql  

    env_file:  

      - ./config/db/env  

    depends_on:  

      - log  

    logging:  

      driver: "syslog"  

      options:    

        syslog-address: "tcp://127.0.0.1:1514"  

        syslog-tag: "mysql"  

  ui:  

    build:  

      context: ../  

      dockerfile: Dockerfile.ui  

    env_file:  

      - ./config/ui/env  

    volumes:  

      - ./config/ui/app.conf:/etc/ui/app.conf  

      - ./config/ui/private_key.pem:/etc/ui/private_key.pem  

    depends_on:  

      - log  

    logging:  

      driver: "syslog"  

      options:    

        syslog-address: "tcp://127.0.0.1:1514"  

        syslog-tag: "ui"  

  proxy:  

    image: library/nginx:1.9  

    volumes:  

      - ./config/nginx:/etc/nginx  

    ports:  

      - 80:80  

      - 443:443  

    depends_on:  

      - mysql  

      - registry  

      - ui  

      - log  

    logging:  

      driver: "syslog"  

      options:    

        syslog-address: "tcp://127.0.0.1:1514"  

        syslog-tag: "proxy"  


 

因為當前主機訪問外網時需要設定http代理,因此,在產生ui容器時也需要設定代理,因此需要修改/opt/harbor/git/harbor/Dockerfile.ui檔案,在需要訪問外網的apt-get和go get命令之前,設定Proxy 位址:

FROM golang:1.6.2  

  

MAINTAINER [email protected]  

  

RUN export https_proxy=http://192.168.1.22:1888 \  

    && export http_proxy=http://192.168.1.22:8000 \  

    && apt-get update \  

    && apt-get install -y libldap2-dev \  

    && rm -r /var/lib/apt/lists/*  

  

COPY . /go/src/github.com/vmware/harbor  

#golang.org is blocked in China  

COPY ./vendor/golang.org /go/src/golang.org   

WORKDIR /go/src/github.com/vmware/harbor/ui  

  

RUN export https_proxy=http://192.168.1.22:1888 \  

    && export http_proxy=http://192.168.1.22:8000 \  

    && go get -d github.com/docker/distribution \  

    && go get -d github.com/docker/libtrust \  

    && go get -d github.com/go-sql-driver/mysql \  

    && go build -v -a -o /go/bin/harbor_ui  

  

ENV MYSQL_USR root \  

    MYSQL_PWD root \  

    REGISTRY_URL localhost:5000  

  

COPY views /go/bin/views  

COPY static /go/bin/static  

COPY favicon.ico /go/bin/favicon.ico  

  

RUN chmod u+x /go/bin/harbor_ui \  

    && sed -i ‘s/TLS_CACERT/#TLS_CAERT/g‘ /etc/ldap/ldap.conf \  

    && sed -i ‘$a\TLS_REQCERT allow‘ /etc/ldap/ldap.conf  

  

WORKDIR /go/bin/  

ENTRYPOINT ["/go/bin/harbor_ui"]  

  

EXPOSE 80  


 

5:啟動  停止harbor

cd /opt/harbor/git/harbor/Deploy  

docker-compose up -d  


注意不要執行./prepare

docker-compose stop

docker-compose rm -f

docker-compose up -d


6、登入

docker login -u admin -p Harbor12345 -e [email protected] 10.10.16.194


7、對接LDAP認證


Harbor支援兩種認證方式,預設為本機存放區,即帳號資訊儲存在mysql下,上文已經具體介紹。接下來介紹另外一種認證方式LDAP,只需要修改設定檔即可。需要提供ldap url以及ldap basedn參數,並且設定auth_mode為ldap_auth。


快速部署LDAP服務

為了測試方便,我們使用Docker啟動一個LDAP伺服器,啟動指令碼如下:


!/bin/bash


NAME=ldap_server

docker rm -f $NAME 2>/dev/null

docker run --env LDAP_ORGANISATION="Unitedstack Inc." \

--env LDAP_DOMAIN="ustack.com" \

--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


建立新使用者,首先需要定義ldif檔案,new_user.ldif:

dn: uid=test,dc=ustack,dc=com

uid: test

cn: test

sn: 3

objectClass: top

objectClass: posixAccount

objectClass: inetOrgPerson

loginShell: /bin/bash

homeDirectory: /home/test

uidNumber: 1001

gidNumber: 1001

userPassword: 1q2w3e4r

mail: [email protected]

gecos: test


通過以下指令碼建立新使用者,其中ldap_server為LDAP服務容器名稱。

docker cp new_user.ldif ldap_server:/

docker exec ldap_server ldapadd -x \

-D "cn=admin,dc=ustack,dc=com" \

-w admin_password \

-f /new_user.ldif -ZZ


查看使用者是否建立成功:

docker exec ldap_server ldapsearch -x -h localhost \

-b dc=ustack,dc=com -D "cn=admin,dc=ustack,dc=com" \

-w admin_password

檢查test使用者是否存在,若存在,則說明建立成功,否則需要使用docker logs查看日誌。


配置Harbor使用LDAP認證

修改harbor.cfg檔案關於LDAP配置項,如下:

auth_mode = ldap_auth

ldap_url = ldap://42.62.x.x

ldap_basedn = uid=%s,dc=ustack,dc=com


然後重新部署Harbor:

./prepare

docker-compose stop

docker-compose rm -f

docker-compose up -d


測試是否能夠使用test使用者登入:

docker login -u test -p 1q2w3e4r \

-e [email protected] 42.62.x.x

本文出自 “我的營運時光” 部落格,請務必保留此出處http://aaronsa.blog.51cto.com/5157083/1834599

使用harbor配置私倉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.