Docker搭建Harbor私有倉庫
一、Harbor 介紹
Docker容器應用的開發和執行離不開可靠的映象管理,雖然Docker官方也提供了公共的映象倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的Registry也是非常必要的。Harbor是由VMware公司開源的企業級的Docker Registry管理專案,它包括許可權管理(RBAC)、LDAP、日誌稽核、管理介面、自我註冊、映象複製和中文支援等功能。
二、環境、軟體準備
本次演示環境,我是在虛擬機器 Linux RedHat 7.2 上操作,以下是安裝的軟體及版本:
- Docker:version 17.09.0-ce
- Docker-compose: version 1.21.2
- Harbor: version 1.5.1
注意:Harbor的所有服務元件都是在Docker中部署的,所以官方安裝使用Docker-compose快速部署,所以我們需要安裝Docker、Docker-compose。由於Harbor是基於Docker Registry V2版本,所以就要求Docker版本不小於1.10.0,Docker-compose版本不小於1.6.0
1)Docker 安裝
阿里雲地址:https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
yum install docker-ce # 安裝社群版本
2) Docker-compose 安裝
1、下載指定版本的docker-compose (https://github.com/docker/compose/releases)
$ curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、對二進位制檔案賦可執行許可權
$ sudo chmod +x /usr/local/bin/docker-compose
3、測試下docker-compose是否安裝成功
$ docker-compose --version
三、Harbor 服務搭建
1)下載Harbor安裝檔案
從 github harbor 官網 release 頁面下載指定版本的安裝包。
1、線上安裝包
$ wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz
$ tar xvf harbor-online-installer-v1.1.2.tgz
2、離線安裝包
$ wget https://storage.googleapis.com/harbor-releases/release-1.5.0/harbor-offline-installer-v1.5.1.tgz
$ tar xvf harbor-offline-installer-v1.5.1.tgz
2)配置Harbor
解壓縮之後,目錄下回生成 harbor.conf
檔案,該檔案就是Harbor的配置檔案
## Configuration file of Harbor
# hostname設定訪問地址,可以使用ip、域名,不可以設定為127.0.0.1或localhost
hostname = 192.168.80.42
# 訪問協議,預設是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
3)啟動 Harbor
修改完配置檔案後,在的當前目錄執行 ./install.sh
,Harbor服務就會根據當期目錄下的 docker-compose.yml
開始下載依賴的映象,檢測並按照順序依次啟動各個服務,Harbor依賴的映象及啟動服務如下:
# docker images
vmware/redis-photon v1.5.1 19245c7a4f51 12 days ago 207MB
vmware/clair-photon v2.0.1-v1.5.1 e7f0ab982469 12 days ago 303MB
vmware/notary-server-photon v0.5.1-v1.5.1 611385e920c3 12 days ago 211MB
vmware/notary-signer-photon v0.5.1-v1.5.1 f9e01495db0e 12 days ago 209MB
vmware/registry-photon v2.6.2-v1.5.1 2efae6b250b1 12 days ago 198MB
vmware/nginx-photon v1.5.1 90d35cd72a68 12 days ago 135MB
vmware/harbor-log v1.5.1 67000769dfac 12 days ago 200MB
vmware/harbor-jobservice v1.5.1 3f7a7987ca5b 12 days ago 194MB
vmware/harbor-ui v1.5.1 8dbe945233a8 12 days ago 212MB
vmware/harbor-adminserver v1.5.1 a11b8eb3f9d8 12 days ago 183MB
vmware/harbor-db v1.5.1 afa780d73279 12 days ago 526MB
vmware/mariadb-photon v1.5.1 59ed57632415 12 days ago 526MB
vmware/postgresql-photon v1.5.1 41b693c0ce50 12 days ago 221MB
vmware/harbor-migrator v1.5.0 466c57ab0dc3 5 weeks ago 1.16GB
vmware/photon 1.0 4b481ecbef2a 6 weeks ago 130MB
# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/start.sh Up (health: starting)
harbor-db /usr/local/bin/docker-entr ... Up (health: starting) 3306/tcp
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up (health: starting) 127.0.0.1:1514->10514/tcp
harbor-ui /harbor/start.sh Up (health: starting)
nginx nginx -g daemon off; Up (health: starting) 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis docker-entrypoint.sh redis ... Up 6379/tcp
registry /entrypoint.sh serve /etc/ ... Up (health: starting) 5000/tcp
啟動完成後,我們訪問剛設定的 hostname 即可 http://192.168.80.42/,預設是80埠,如果埠占用,我們可以去修改docker-compose.yml檔案中,對應服務的埠對映
4) 配置並啟動Harbor之後,本地執行登入操作,報錯:
docker login 192.168.80.42
Username: admin
Password:
Error response from daemon: Get https://192.168.80.42/v1/users/: dial tcp 192.168.80.42:443: getsockopt: connection refused
這是因為 docker1.3.2 版本開始預設 docker registry 使用的是 https,我們設定 Harbor 預設 http 方式,所以當執行用 docker login、pull、push 等命令操作非 https 的 docker regsitry 的時就會報錯。解決辦法:
- 如果系統是MacOS,則可以點選“Preference”裡面的“Advanced”在“Insecure Registry”里加上192.168.80.42,重啟Docker客戶端就可以了;
- 如果系統是Ubuntu,則修改配置檔案/lib/systemd/system/docker.service,修改[Service]下ExecStart引數,增加–insecure-registry 192.168.80.42
- 如果系統是Centos或RedHat,可以修改配置 /usr/lib/systemd/system/docker.service,將 ExecStart 增加 –insecure-registry 192.168.80.42
四、部署 SSL 認證
1) 概念理解
- 簽名證書與自簽名證書
簽名證書:由權威頒發機構頒發給伺服器或者個人用於證明自己身份的東西
自簽名證書:由伺服器自己頒發給自己,用於證明自己身份的東西,非權威頒發機構釋出- openssl
openssl 是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的金鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用- KEY與CSR的區別
Key通常用來存放一個公鑰或者私鑰,並非X.509證書,編碼同樣的,可能是PEM,也可能是DER。證書自身擁有一個金鑰對(即一個公鑰和一個私鑰),由公鑰(Public Key)與私鑰(Private Key)是通過一種演算法得到,公鑰是金鑰對中公開的部分,私鑰則是非公開的部分。一般公鑰和金鑰的關係為:1,公鑰和私鑰成對出現、2,公開的金鑰叫公鑰,只有自己知道的叫私鑰、3,用公鑰加密的資料只有對應的私鑰可以解密、4,用私鑰加密的資料只有對應的公鑰可以解密、5,如果可以用公鑰解密,則必然是對應的私鑰加的密、6,如果可以用私鑰解密,則必然是對應的公鑰加的密
CSR檔案必須在申請和購買SSL證書之前建立。也就是證書申請者在申請數字證書時由CSP(加密服務提供者)在生成私鑰的同時也生成證書請求檔案,證書申請 者只要把CSR檔案提交給證書頒發機構後,證書頒發機構使用其根證書私鑰簽名就生成了證書公鑰檔案,也就是頒發給使用者的證書
2) 建立根證書
# 建立證書存放目錄
mkdir -p /data/cert && cd /data/cert
# 建立自己的CA證書(不使用第三方權威機構的CA來認證,自己充當CA的角色)
openssl genrsa -out ca.key 2048 # 生成根證書私鑰(無加密)
# 生成自簽名證書(使用已有私鑰ca.key自行簽發根證書)
openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj “/CN=Harbor-ca”
req 產生證書籤發申請命令
-x509 簽發X.509格式證書命令。X.509是最通用的一種簽名證書格式。
-new 生成證書請求
-key 指定私鑰檔案
-nodes 表示私鑰不加密
-out 輸出
-subj 指定使用者資訊
-days 有效期
3) 建立伺服器端證書
# 生成伺服器端私鑰和CSR簽名請求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr # 一路回車
# 簽發伺服器證書
echo subjectAltName = IP:192.168.80.42 > extfile.cnf
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -extfile extfile.cnf -out server.crt
x509 簽發X.509格式證書命令。
-req 表示證書輸入請求。
-days 表示有效天數
-extensions 表示按OpenSSL配置檔案v3_req項新增擴充套件。
-CA 表示CA證書,這裡為ca.crt
-CAkey 表示CA證書金鑰,這裡為ca.key
-CAcreateserial 表示建立CA證書序列號
-extfile 指定檔案
4) 修改 Harbor 的配置檔案 hardor.cfg
# 修改成 https
ui_url_protocol = https
# 認證檔案的路徑
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
5) 設定 docker 證書
# 如果如下目錄不存在,請建立,如果有域名請按此格式依次建立
mkdir -p /etc/docker/certs.d/192.168.80.42
# mkdir -p /etc/docker/certs.d/[IP2]
# mkdir -p /etc/docker/certs.d/[example1.com]
# 如果埠為443,則不需要指定。如果為自定義埠,請指定埠
# /etc/docker/certs.d/yourdomain.com:port
mkdir -p /etc/docker/certs.d/192.168.80.42
# 將 ca 根證書依次複製到上述建立的目錄中
cp ca.crt /etc/docker/certs.d/192.168.80.42
cp server.crt /etc/docker/certs.d/192.168.80.42
6) 重啟 docker 和 啟動 Harbor
# 重啟 docker
systemctl restart docker
# 啟動Harbor
./install.sh
啟動完成後,我們訪問剛設定的 hostname 即可 https://192.168.80.42/,預設是80埠,如果埠占用,我們可以去修改docker-compose.yml檔案中,對應服務的埠對映
7 ) 後臺登入
# 登入倉庫
docker login -u admin -p Harbor12345 192.168.80.42
# 登出倉庫
docker logout 192.168.80.42
注:其他伺服器如果需要訪問 Harbor 倉庫,把 /etc/docker/certs.d/192.168.80.42 資料夾複製到該主機的相同位置即可
相關文章
- Docker搭建私有倉庫Registry&HarborDocker
- Docker-------私有倉庫 Harbor 的搭建Docker
- 手把手教你搭建Docker私有倉庫HarborDocker
- Docker私有倉庫之Harbor神器Docker
- 【Harbor學習筆記】-教你快速搭建Docker私有倉庫筆記Docker
- docker 私有倉庫搭建Docker
- docker搭建私有倉庫Docker
- Docker--harbor私有倉庫部署與管理Docker
- 容器技術之Docker私有映象倉庫harborDocker
- Docker搭建私有映象倉庫Docker
- Docker入門-搭建docker私有倉庫Docker
- 部署docker-consul群集,Harbor構建Docker私有倉庫Docker
- 用Docker搭建cnpm私有倉庫以及私有倉庫的使用DockerNPM
- 程式設計師都在學的docker--搭建harbor私有倉庫與管理程式設計師Docker
- 微服務探索之路03篇-docker私有倉庫Harbor搭建+Kubernetes(k8s)部署私有倉庫的映象微服務DockerK8S
- Docker基礎-搭建本地私有倉庫Docker
- docker使用容器搭建本地私有倉庫Docker
- 使用 docker + verdaccio 搭建npm私有倉庫DockerNPM
- 搭建Harbor 映象倉庫
- 私有Docker倉庫Docker
- Docker倉庫之Harbor企業級映象倉庫的搭建與使用Docker
- docker筆記37-docker私有倉庫的搭建Docker筆記
- Docker倉庫之Registry私有映象倉庫的搭建與使用Docker
- Harbor倉庫搭建及使用
- containerd 配置使用私有映象倉庫 harborAI
- Docker建立私有倉庫Docker
- Docker信任私有倉庫Docker
- Harbor-私有映象倉庫的安裝部署
- Docker 企業級映象倉庫 Harbor 的搭建與維護Docker
- docker的企業級倉庫-harborDocker
- Docker企業級映象倉庫HarborDocker
- Docker registry私有倉庫(七)Docker
- NPM 私有倉庫的搭建NPM
- gitlab私有倉庫搭建Gitlab
- 搭建python私有倉庫Python
- Centos7安裝docker倉庫HarborCentOSDocker
- Dockerfile指令與Docker-compose容器編排-搭建docker私有倉庫Docker
- Docker 離線安裝 & 離線私有倉庫搭建總結Docker