安裝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;
...
}
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上檢視代碼片派生到我的代碼片
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
- /opt/harbor/data/registry:/storage
- ./config/registry/:/etc/registry/
environment:
- GODEBUG=netdns=cgo
- 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/
- /opt/harbor/data/database:/var/lib/mysql
env_file:
- ./config/db/env
syslog-tag: "mysql"
ui:
build:
context: ../
dockerfile: Dockerfile.ui
- ./config/ui/env
- ./config/ui/app.conf:/etc/ui/app.conf
- ./config/ui/private_key.pem:/etc/ui/private_key.pem
syslog-tag: "ui"
proxy:
image: library/nginx:1.9
- ./config/nginx:/etc/nginx
- 80:80
- 443:443
- mysql
- registry
- ui
syslog-tag: "proxy"
因為目前主機通路外網時需要設定http代理,是以,在生成ui容器時也需要設定代理,是以需要修改/opt/harbor/git/harbor/Dockerfile.ui檔案,在需要通路外網的apt-get和go get指令之前,設定代理位址:
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
&& 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
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
測試是否能夠使用test使用者登入:
docker login -u test -p 1q2w3e4r \
-e [email protected] 42.62.x.x
本文轉自aaron428 51CTO部落格,原文連結:http://blog.51cto.com/aaronsa/2061543,如需轉載請自行聯系原作者