天天看點

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

  本文給大家介紹下Docker中的常用的鏡像私服倉庫,DockerHub,阿裡雲倉庫和Harbor鏡像私服倉庫。

1 Docker hub

官網位址:hub.docker.com

(1)在docker機器上登入

docker login

(2)輸入使用者名和密碼

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

(3)docker push q279583842q/tomcat-ip

[注意鏡像名稱要和docker id一緻,不然push不成功]

(4)給image重命名,并删除掉原來的

docker tag tomcat-ip q279583842q/tomcat-ip

docker rmi -f tomcat-ip

(5)再次推送,重新整理hub.docker.com背景,發現成功

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

(6)别人下載下傳,并且運作

docker pull q279583842q/tomcat-ip

docker run -d --name user01 -p 6661:8080 q279583842q/tomcat-ip

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

服務上傳和下載下傳比較耗時

2 阿裡雲Docker Registry

倉庫位址:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

登入阿裡雲,進入到鏡像服務,建立命名空間

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

建立鏡像倉庫

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

将鏡像推送到阿裡雲鏡像倉庫

$ docker login --username=dpb2****83842 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/deng66/dpb-tomcat:[鏡像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/deng66/dpb-tomcat:[鏡像版本号]      
雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

我們pull鏡像的步驟

$ docker pull registry.cn-hangzhou.aliyuncs.com/deng66/dpb-tomcat:[鏡像版本号]      

3 私服Harbor

3.1 Harbor簡介

Docker容器應用的開發和運作離不開可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署我們私有環境内的Registry也是非常必要的。Harbor是由VMware公司開源的企業級的Docker Registry管理項目,它包括權限管理(RBAC)、LDAP、日志稽核、管理界面、自我注冊、鏡像複制和中文支援等功能。

3.2 功能介紹

元件 功能
harbor-adminserver 配置管理中心
harbor-db Mysql資料庫
harbor-jobservice 負責鏡像複制
harbor-log 記錄記錄檔
harbor-ui Web管理頁面和API
nginx 前端代理,負責前端頁面和鏡像上傳/下載下傳轉發
redis 會話
registry 鏡像存儲

4.3.3 Harbor安裝

官網安裝教程:https://goharbor.io/docs/2.3.0/install-config/

首先需要下載下傳對于的安裝檔案:https://github.com/goharbor/harbor/releases

因為比較大,從官網下載下傳很慢,是以會在附近中直接給大家提供,使用最新的2.3.3版本

1> 上傳解壓安裝檔案

cd      
雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

2>修改配置檔案

把 harbor.yml.tmpl 修改為 harbor.yml 檔案

hostname: 192.168.56.15
http:
 port: 80
https:
  port: 443
  certificate: /data/cert/192.168.56.15.crt 
  private_key: /data/cert/192.168.56.15.key
external_url: https://192.168.56.15
harbor_admin_password: Harbor12345
database:
  password: root123
  max_idle_conns: 50
  max_open_conns: 100
data_volume: /data/harbor
clair:
  updaters_interval: 12
jobservice:
  max_job_workers: 10
notification:
  webhook_job_max_retry: 10
chart:
  absolute_url: disabled
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /data/harbor/logs
_version: 1.10.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    -      

3>.harbor配置 https 通路

參考文檔:

​​https://goharbor.io/docs/1.10/install-config/configure-https/​​

​​https://goharbor.io/docs/1.10/install-config/troubleshoot-installation/#https​​

預設情況下,Harbor不附帶證書。可以在沒有安全性的情況下部署Harbor,以便您可以通過HTTP連接配接到它。但是,隻有在沒有外部網絡連接配接的空白測試或開發環境中,才可以使用HTTP。在沒有空隙的環境中使用HTTP會使您遭受中間人攻擊。在生産環境中,請始終使用HTTPS。如果啟用Content Trust with Notary來正确簽名所有圖像,則必須使用HTTPS。

要配置HTTPS,必須建立SSL證書。您可以使用由受信任的第三方CA簽名的證書,也可以使用自簽名證書

生成證書頒發機構證書

在生産環境中,您應該從CA獲得證書。在測試或開發環境中,您可以生成自己的CA。要生成CA憑證,請運作以下指令。

生成CA憑證私鑰。

openssl genrsa -out ca.key 4096      

生成CA憑證

調整​

​-subj​

​​選項中的值以反映您的組織。如果使用FQDN連接配接Harbor主機,則必須将其指定為通用名稱(​

​CN​

​)屬性。

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.od.com" \
 -key ca.key \      

如果是ip通路, 将 ​

​harbor.od.com​

​ 改成 ip位址

生成伺服器證書

證書通常包含一個​

​.crt​

​​檔案和一個​

​.key​

​檔案

生成私鑰

openssl genrsa -out harbor.od.com.key 4096      

生成證書簽名請求(CSR)

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.od.com" \
    -key harbor.od.com.key \      

如果是ip通路, 将 ​

​harbor.od.com​

​ 改成 ip位址

生成一個x509 v3擴充檔案

無論您使用FQDN還是IP位址連接配接到Harbor主機,都必須建立此檔案,以便可以為您的Harbor主機生成符合主題備用名稱(SAN)和x509 v3的證書擴充要求。替換​

​DNS​

​條目以反映您的域

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=harbor.od.com
DNS.2=harbor.od.com
DNS.3=harbor.od.com
EOF      
  • 如果是ip通路
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.56.15
EOF      

使用該​

​v3.ext​

​檔案為您的Harbor主機生成證書

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in harbor.od.com.csr \      

如果是ip通路, 将 ​

​harbor.od.com​

​ 改成 ip位址

提供證書給Harbor和Docker

生成後​

​ca.crt​

​​,​

​harbor.od.com.crt​

​​和​

​harbor.od.com.key​

​​檔案,必須将它們提供給​

​Harbor​

​​和​

​docker​

​,重新配置它們

将伺服器證書和密鑰複制到Harbor主機上的​

​/data/cert/​

​檔案夾中

mkdir -p /data/cert/
cp harbor.od.com.crt /data/cert/
cp      

轉換​

​harbor.od.com.crt​

​​為​

​harbor.od.com.cert​

​,供Docker使用

openssl x509 -inform PEM -in harbor.od.com.crt -out harbor.od.com.cert      

将伺服器證書,密鑰和CA檔案複制到Harbor主機上的Docker證書檔案夾中。您必須首先建立适當的檔案夾

mkdir -p /etc/docker/certs.d/harbor.od.com/
cp harbor.od.com.cert /etc/docker/certs.d/harbor.od.com/
cp harbor.od.com.key /etc/docker/certs.d/harbor.od.com/
cp      

如果将預設​

​nginx​

​​端口443 映射到其他端口,請建立檔案夾​

​/etc/docker/certs.d/yourdomain.com:port​

​​或​

​/etc/docker/certs.d/harbor_IP:port​

重新啟動Docker Engine

systemctl restart docker      

證書目錄結構

/etc/docker/certs.d/
└── harbor.od.com
    ├── ca.crt
    ├── harbor.od.com.cert
    └── harbor.od.com.key      

Harbor将​

​nginx​

​​執行個體用作所有服務的反向代理。您可以使用​

​prepare​

​​腳本來配置​

​nginx​

​為使用HTTPS

./prepare      

初始化服務

sh      
雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)
雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

停止并删除服務

docker-compose down -v      

重新開機服務

docker-compose up -d      

連接配接驗證

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

docker登入

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

3.4 Harbor部署應用

上傳鏡像到Harbor服務中

在Web服務中建立項目和使用者

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

建立使用者

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

然後項目配置設定使用者

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

推送鏡像到Harbor倉庫中

docker tag redis:latest 192.68.56.10/dpb/redis-dpb:1.0
docker push 192.168.56.10/dpb/redis-dpb:1.0      
雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

在Web項目中可以看到上傳的鏡像

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

從Harbor鏡像倉庫拉取鏡像

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)

執行拉取指令

雲原生時代必須具備的核心技能之Docker進階篇(Harbor-鏡像私服)