天天看點

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

  • 前言
  • 一、docker-compose 安裝
    • (1)線上安裝(不推薦,我試過直接使用官方的安裝方法,下載下傳非常慢,不太建議使用線上安裝)
    • (2)離線安裝(推薦)
  • 二、Harbor 安裝
    • 下載下傳離線安裝包
    • 安裝包上傳到伺服器,我這裡安裝的路徑是:

      /home/lenjor/harbor

    • 配置HTTPS證書
      • 1. 生成證書頒發機構證書
      • 2. 生成伺服器證書
      • 3. 把證書配置到Harbor和Docker
    • 配置 harbor.yml
    • 重新開機Docker Engine
    • 運作安裝程式腳本
    • 浏覽器打開配置的 hostname 就能打開harbor的登陸頁了
    • 另外一台虛拟機使用docker login指令登陸 我們的倉庫
    • 再次登陸,推送鏡像到倉庫
    • Harbor倉庫檢視推送結果
    • 從Harbor的倉庫中拉取鏡像
  • 三、常用操作指令

前言

Harbor官方文檔: https://docs.docker.com/compose/install/

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

如圖所示,harbor 需要依賴docker,docker-compose,openssl, 本文将介紹這些内容的安裝和配置

一、docker-compose 安裝

Harbor依賴于

docker-compose

,是以要先安裝

docker-compose

docker-compose官方文檔: https://docs.docker.com/compose/install/

(1)線上安裝(不推薦,我試過直接使用官方的安裝方法,下載下傳非常慢,不太建議使用線上安裝)

# 線上下載下傳最新的穩定版docker-compose,建議打開官方文檔直接拷貝官方的連結,不然就自己去GitHub看一下最新的docker-compose的版本,替換一下
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Apply executable permissions to the binary:
$ sudo chmod +x /usr/local/bin/docker-compose

# 建立軟連結
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 測試是否安裝成功,輸出版本資訊則代表安裝成功
$ docker-compose --version

           

(2)離線安裝(推薦)

docker-compose Github位址: https://github.com/docker/compose/releases

選擇下載下傳

docker-compose-Linux-x86_64

版本

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

把下載下傳好的安裝包上傳到伺服器,進入上傳的安裝包目錄,然後執行操作

# 先進入上傳的docker-compose安裝包目錄,然後執行如下指令将其移動到 `/usr/local/bin`,并改名為“docker-compose”。
$ sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

# 添加可執行權限
$ sudo chmod +x /usr/local/bin/docker-compose

# 建立軟連結
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 測試是否安裝成功,輸出版本資訊則代表安裝成功
$ docker-compose --version
           

二、Harbor 安裝

Harbor官方文檔: https://docs.docker.com/compose/install/

官方的文檔提供兩種安裝形式:線上下載下傳安裝和離線安裝,線上安裝因為國内網絡不是特别好,這裡推薦使用離線安裝的形式

下載下傳離線安裝包

Harbor Github 位址:https://github.com/goharbor/harbor/releases

選擇對應的安裝包下載下傳

harbor-offline-installer-{version}.tgz

,

{version}

為版本号

安裝包上傳到伺服器,我這裡安裝的路徑是:

/home/lenjor/harbor

# 進入安裝的路徑,解壓安裝包
$ tar -xvf harbor-offline-installer-v2.2.0-rc1.tgz
# 複制一份配置檔案模闆 harbor.yml.tmpl , 并命名為 harbor.yml
$ sudo cp harbor.yml.tmpl harbor.yml
           

解壓以後将看到以下的檔案,我這裡的已經完成了配置檔案的複制操作

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

配置HTTPS證書

官方操作說明文檔位址:https://goharbor.io/docs/2.0.0/install-config/configure-https/

1. 生成證書頒發機構證書

# 生成CA憑證私鑰
$ openssl genrsa -out ca.key 4096
# 生成CA憑證,記得以下的所有指令,都要替換成自己的域名,或者ip位址
$ openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt
           

2. 生成伺服器證書

# 1)生成私鑰
$ openssl genrsa -out yourdomain.com.key 4096
# 2)生成證書簽名請求(CSR)
$ openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr

# 3)生成一個x509 v3擴充檔案,這裡有個坑,如果是域名配置的,就直接把授信域名配置到下面的清單

## 這個是域名的方式的指令,把授信的域名加到清單裡
$ cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF


## 這個是IP的方式,直接把後面的域名清單删掉,添加上自己的IP位址(注意 IP: 是有用的,不能删)
$ cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.56.105


# 4)為你的Harbor主機生成證書
$ openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt
           

3. 把證書配置到Harbor和Docker

# 将伺服器證書和密鑰複制到Harbor主機上的certficates檔案夾中, 需要先建立檔案夾
$ mkdir /data/cert/ 
$ cp yourdomain.com.crt /data/cert/
$ cp yourdomain.com.key /data/cert/


# 轉換yourdomain.com.crt為yourdomain.com.cert,供Docker使用
$ openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

# 将伺服器證書,密鑰和CA檔案複制到Harbor主機上的Docker證書檔案夾中。 敲黑闆重點!!必須首先建立适當的檔案夾。
$ mkdir -p /etc/docker/certs.d/yourdomain.com/
$ cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
$ cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
$ cp ca.crt /etc/docker/certs.d/yourdomain.com/
           

配置 harbor.yml

官方文檔位址: https://goharbor.io/docs/2.0.0/install-config/configure-yml-file/

# 配置 hostname
hostname: harbor.lenjor.com

# 打開https注釋,配置證書位址,如果是按照官方文檔操作的,證書就在 /data/cert/ 目錄下
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/cert/harbor.lenjor.com.crt
  private_key: /data/cert/harbor.lenjor.com.key


# 修改Harbor admin賬号的登陸密碼
harbor_admin_password: Lenjor123.

# 修改Mysql資料庫密碼
database:
  # The password for the root user of Harbor DB. Change this before any production use.
  password: Lenjor123.


           

重新開機Docker Engine

systemctl restart docker
           

運作安裝程式腳本

# 執行 .prepare 腳本
$ ./prepare

# 執行安裝腳本
$ ./install.sh
           

浏覽器打開配置的 hostname 就能打開harbor的登陸頁了

網頁提示的不安全,是因為沒有安裝證書,把之前生成的

ca.crt

這證書安裝到浏覽器,添加信任即可,但是Chrome檢測到簽發的時間過長也會提示不安全,暫時忽略吧

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

輸入登陸密碼登陸,然後建立一個新的項目,我這裡建立的是 k8s 項目

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

檢視一下倉庫指令,拷貝一下标記tag的指令,在另外一台機器打一個鏡像tag

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令
# 對hello-world的鏡像打一個tag
$ docker tag hello-world:latest harbor.lenjor.com/k8s/k8s-hello-world:v1.0
           

另外一台虛拟機使用docker login指令登陸 我們的倉庫

# 登陸docker,這裡換成自己harbor配置的hostname (ip,或者域名),輸入賬号和密碼登陸
$ docker login harbor.lenjor.com
           
Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

這裡會因為證書沒有不是受信任的證書,提示報錯,解決方法是

# 編輯docker配置檔案
$ vi /etc/docker/daemon.json

# 在json檔案中加入自己的域名或者ip,添加倉庫授信
{  
   "insecure-registries":["私庫位址/域名"]
}

# 儲存退出以後重新開機docker再登陸就不會報錯了
$ systemctl daemon-reload
$ systemctl restart docker
           

再次登陸,推送鏡像到倉庫

# 登陸docker,這裡換成自己harbor配置的hostname (ip,或者域名),輸入賬号和密碼登陸
$ docker login harbor.lenjor.com

# 從harbor倉庫的指令頁拷貝一下推送指令,然後修改成自己要推送的鏡像,如我剛剛打了一個 k8s-hello-world:v1.0 鏡像
$ docker push harbor.lenjor.com/k8s/k8s-hello-world:v1.0
           
Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

Harbor倉庫檢視推送結果

可以看到,我們的倉庫已經是有我們剛剛推送上去的鏡像了

Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

從Harbor的倉庫中拉取鏡像

# 先把本地的hello-world鏡像删除
$ docker rmi harbor.lenjor.com/k8s/k8s-hello-world:v1.0
# 檢視删除是否成功
$ docker images

# 從私有倉庫拉取鏡像
$ docker pull harbor.lenjor.com/k8s/k8s-hello-world:v1.0
           
Kubernetes DevOps環境搭建(三):安裝私有鏡像倉庫Harbor前言一、docker-compose 安裝二、Harbor 安裝三、常用操作指令

三、常用操作指令

# 停止harbor,在harbor的安裝目錄執行
$ sudo docker-compose stop

# 啟動harbor,在harbor的安裝目錄執行
$ sudo docker-compose start

# 重新配置harbor,在harbor的安裝目錄執行
$ sudo docker-compose down -v
$ vim harbor.yml
$ sudo prepare
$ sudo docker-compose up -d

# 删除Harbor的容器,同時将鏡像資料和Harbor的資料庫檔案保留在檔案系統中:
$ sudo docker-compose down -v

# 删除Harbor的資料庫和鏡像資料以進行重新安裝:
$ rm -r /data/database
$ rm -r /data/registry