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
首先要先建一個本地的私有 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 ,以這台機器為例子的話,網址如下,
一開始會是一個註冊畫面,註冊完成之後就是上圖的登入畫面,登入完成之後會到主頁面,
因為前述有說,建置一個本地的私有 Docker 昌庫,所以本地的容器/映像都會在列表裡面可以看到。
首先我們要先新增 Docker 的用戶,在主頁面的點擊「Registries」,
接下來點擊頁面右上角的「+ Add registry」。
點選完之後會發現它需要你填入以下資訊,
Name : 你要設定的名稱
DockerHub username : 你的 Docker Hub 帳戶名稱
DockerHub access token : Step 3 操作完會得到
首先在 Docker 登入完成後右上角可以看到 Account Settings 點擊後,
在 Security 的地方點擊右上角的 New Access Token,
會看到這個畫面,填入你創建的目的 (名稱),
假設是 test123 好了,即可獲得 Token ,然後回到 Step 2 輸入進去。
新增完成用戶後,應該會像我這樣有我的帳號 ( a48446 ) ,
接下來回到 Home 頁面,畫面會長這個樣子,
點擊左邊欄位的 image ,
就可以去搜尋你要的 images 例如實驗用的 yolov7-mount:latest 這個 images 好了,
按下 Pull the image 就可以下載了。
下載完成後會在下方展示出來,如下圖這樣,
我們最後做個防呆檢查,在主機上輸入,就會看到它真的被下載到本地來了,
docker image ls
然後也可以確定看看我們當初想要映像檔下載的儲存的地點有沒有東西,這樣就完成了。
建置的目的就是為了映像檔更新的時候可以不用重複去做相關操作,假設要更新 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)。
首先先下載檔案,
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
當架設的時候 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
解法二是最好的做法,因為做實驗的時候這樣無論任何狀況都能成功使用。