iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Cloud Native

你累了嗎,今天來點克勞內提夫!系列 第 26

Day26 Linux 私有 Images Registry and Web UI 建制

  • 分享至 

  • xImage
  •  

Linux 私有 Images Registry and Web UI 建制

主要建置機器

MasterNode

Computer name:ubuntu-hank0
Computer IP:10.20.1.5
系統版本:Ubuntu 20.04.3 LTS
Kernel 版本:GNU/Linux 5.4.0-149-generic x86_64
Docker-CE 版本:Docker version 23.0.1, build a5ee5b1
Docker API 版本:1.42
Kubernetes 版本:v1.22.17
NVIDIA/k8s-device-plugin 版本:0.13.0
Memory:128GB
Storage:1TB SSD + 1TB HDD
Storage Mount Path:/mnt/hank0 (1TB HDD)
CPU:12th Gen Intel(R) Core(TM) i9-12900
GPU:NVIDIA GeForce RTX 3080 Ti *1

Portainer

首先要先建一個本地的私有 Docker 昌庫,在這邊我預設儲存的路徑就是 /mnt/hank0,

docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/hank0:/var/lib/registry registry:2

再來就是創建 WebUI 的相關東西,一樣預設儲存的路徑就是 /mnt/hank0,

docker run -d -p 9000:9000 --restart=always --name portainer -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/hank0:/data portainer/portainer-ce

然後打開就可以打開 WebUI ,以這台機器為例子的話,網址如下,

http://10.20.1.5:9000

一開始會是一個註冊畫面,註冊完成之後就是上圖的登入畫面,登入完成之後會到主頁面,

因為前述有說,建置一個本地的私有 Docker 昌庫,所以本地的容器/映像都會在列表裡面可以看到。

Step1 - 新增用戶

首先我們要先新增 Docker 的用戶,在主頁面的點擊「Registries」,

Step2 - 新增倉庫

接下來點擊頁面右上角的「+ Add registry」。


點選完之後會發現它需要你填入以下資訊,

Name : 你要設定的名稱
DockerHub username : 你的 Docker Hub 帳戶名稱
DockerHub access token : Step 3 操作完會得到

Step3 - 至 Docker Hub 取得 Token

首先在 Docker 登入完成後右上角可以看到 Account Settings 點擊後,

在 Security 的地方點擊右上角的 New Access Token,

會看到這個畫面,填入你創建的目的 (名稱),

假設是 test123 好了,即可獲得 Token ,然後回到 Step 2 輸入進去。

獲取 DockerHub image

新增完成用戶後,應該會像我這樣有我的帳號 ( a48446 ) ,

接下來回到 Home 頁面,畫面會長這個樣子,

點擊左邊欄位的 image ,

就可以去搜尋你要的 images 例如實驗用的 yolov7-mount:latest 這個 images 好了,

按下 Pull the image 就可以下載了。

下載完成後會在下方展示出來,如下圖這樣,

我們最後做個防呆檢查,在主機上輸入,就會看到它真的被下載到本地來了,

docker image ls

然後也可以確定看看我們當初想要映像檔下載的儲存的地點有沒有東西,這樣就完成了。

更新 image

建置的目的就是為了映像檔更新的時候可以不用重複去做相關操作,假設要更新 image 只需要,

在本地 bulid 想要的新的映像檔
docker build -t a48446/yolov7-mount:latest .

或者是將映像標記為新的版本
docker tag a48446/yolov7-mount:latest a48446/yolov7-mount:newversion

在 push 到映像檔的儲存庫就好了,

docker push a48446/yolov7-mount:latest

完成上述步驟後,就可以在 Portainer 上進行映像的更新,
在 Portainer 中 Registry 找到原本 a48446/yolov7-mount:latest 的 image ,
點擊 image 旁邊的更新按鈕,就可以選擇想要更新的版本(例如 a48446/yolov7-mount:newversion)。

Harbor

建置開始

首先先下載檔案,
wget https://github.com/goharbor/harbor/releases/download/v2.8.1/harbor-offline-installer-v2.8.1.tgz

之後解壓縮,
tar xvf harbor-offline-installer-v2.8.1.tgz

之後 cd 到該資料夾,
cd harbor

然後創建一個 harbor.yml 檔案,要注意 hostname 必須改成主機 ip / Domain ,
harbor_admin_password 密碼也記得更改成自己要的

# Configuration file of Harbor

hostname: 10.0.0.129

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https:
#   port: 443
#   certificate: /your/certificate/path
#   private_key: /your/private/key/path

harbor_admin_password: ubuntu

# Harbor DB configuration
database:
  password: root123
  max_idle_conns: 100
  max_open_conns: 900
  conn_max_lifetime: 5m
  conn_max_idle_time: 0

# The default data volume
data_volume: /data

trivy:
  ignore_unfixed: false
  skip_update: false
  offline_scan: false
  security_check: vuln
  insecure: false


jobservice:
  # Maximum number of job workers in job service
  max_job_workers: 10
  # The jobLogger sweeper duration (ignored if `jobLogger` is `stdout`)
  logger_sweeper_duration: 1 #days

notification:
  # Maximum retry count for webhook job
  webhook_job_max_retry: 3
  # HTTP client timeout for webhook job
  webhook_job_http_client_timeout: 3 #seconds

# Log configurations
log:
  # options are debug, info, warning, error, fatal
  level: info
  # configs for logs in local storage
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor

#This attribute is for migrator to detect the version of the .cfg file, DO NOT MODIFY!
_version: 2.8.0

proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy

upload_purging:
  enabled: true
  age: 168h
  interval: 24h
  dryrun: false

cache:
  enabled: false
  expire_hours: 24

再執行安裝程序,到此安裝就結束了。

bash install.sh

新增映像檔

首先先登入,

主頁面應該會是長這樣,點選 library 進去,

然後就可以在 Command Line 下指令,例如

docker tag yolov7:v3 10.0.0.129/library/repository:1
docker push 10.0.0.129/library/repository:1

執行完之後,就會直接出現在畫面裡面了,可以點選紅框處的 Pull 下載,
點選 Pull 按鈕會給你這個指令,

docker pull 10.0.0.129/library/repository:1

可能遇上的 Bug

當架設的時候 ip 不是 Domain 也沒有安全憑證時,會出現這個狀況,

Error response from daemon: Get https://xxx.xxx.xxx.xxx/v2/: dial tcp xxx.xxx.xxx.xxx:443: connect: connection refused

解法一

Step1 - 修改 Docker 的 daemon

vim /etc/docker/daemon.json

把內容加上下面這行

{
"insecure-registries" : ["harbor-domain.com:5000", "0.0.0.0"]
}

Step2 - 找到 Docker Service 並修改

找 Docker Service 的指令,
find / -name docker.service -type f

然後 sudo vim 去修改,

vim /usr/lib/systemd/system/docker.service

將裡面的 Documentation=http://docs.docker.io 改成這樣。

Step3 - 重啟

sudo systemctl daemon-reload && sudo systemctl restart docker

但此做法只能在單機 Pull / Push ,別台機器拉不到 images。

解法二

很簡單,直接用 Domain 並且記得加上安全憑證,
這樣做法方便的原因是,可以透過內網/外網傳輸

透過內網
harbor.yml 裡面的

hostname : 10.0.0.129
透過內網
harbor.yml 裡面的

hostname : ubuntu129.nutc-imac.com

解法二是最好的做法,因為做實驗的時候這樣無論任何狀況都能成功使用。


上一篇
Day25 ubuntu 安裝 Nvidia Cuda / Cudnn 相關筆記
下一篇
Day27 Linux 安裝 Docker/kubenetes 安裝
系列文
你累了嗎,今天來點克勞內提夫!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言