Docker Hub作為Docker預設官方公共映象,如果想要自己搭建私有映象,Harbor是企業級映象庫非常好的選擇。
所謂私有倉庫,也就是在本地(區域網)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以將將映象提交到私有倉庫中。這樣我們既能使用Docker來執行我們的專案映象,
也避免了商業專案暴露出去的風險。
Harbor作為一個企業級私有Registry伺服器,提供了更好的效能和安全,提升了使用者使用Registry構建和執行環境傳輸映象的效率。雖然Harbor和Registry都是私有映象倉庫的選擇,但是Harbor的企業級特性更強,因此也是更多企業級使用者的選擇。
Harbor實現了基於角色的存取控制機制,並通過專案來對映象進行組織和存取許可權的控制,也常常和K8S中的namespace結合使用。此外,Harbor還提供了圖形化的管理介面,我們可以通過瀏覽器來瀏覽,檢索當前Docker映象倉庫,管理專案和名稱空間。
有關Harbor的架構,可以參考閱讀這一篇《Harbor整體架構》一文,裡面講述了Harbor的6大核心元件構成,有興趣的朋友可以一讀。
下面列出了Harbor的搭建過程
下面就詳細的基於Registry搭建私有倉庫的步驟,首先我們可以準備兩臺伺服器,這裡我有兩臺Linux服務主機,他們的角色如下:
主機名 | 角色 | 備註 |
---|---|---|
192.168.101.20 | Harbor映象庫 | 部署Harbor,推播映象 |
192.168.101.21 | 映象使用 | 從Harbor伺服器下載映象使用 |
兩臺機器記得關了防火牆
#檢視防火牆狀態
systemctl status firewalld.service
#關閉防火牆
systemctl stop firewalld.service
#永久關閉防火牆
systemctl disable firewalld.service
(1)安裝docker
如果還沒有安裝docker,那麼請先安裝docker,已安裝則跳過。
#安裝需要的安裝包
yum install -y yum-utils
#設定映象倉庫為阿里雲的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum索引安裝包
yum makecache fast
#安裝docker
yum install docker-ce docker-ce-cli containerd.io
#啟動docker,設定docker開機啟動
systemctl start docker && systemctl enable docker
驗證:
docker --version
(2) 安裝docker-compose
這裡選擇Github源:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
驗證:
docker-compose --version
(3)下載harbor離線包
下載地址:https://github.com/goharbor/harbor/releases
這裡選擇版本為v2.5.3,下載完成後傳輸到你的伺服器上並解壓,或伺服器上直接下載,這裡伺服器上直接下載:
[root@localhost ~]# mkdir dev
[root@localhost ~]# cd dev
[root@localhost dev]# wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
解壓
[root@localhost dev]# tar zvxf harbor-offline-installer-v2.5.3.tgz
修改harbor組態檔
#進入解壓資料夾
[root@localhost dev]# cd harbor
#把組態檔harbor.yml.tmpl複製一份為harbor.yml
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml
#修改組態檔
[root@localhost harbor]# vi harbor.yml
修改harbor.yml檔案內容
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: 192.168.101.20
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
#https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# # Uncomment following will enable tls communication between all harbor components
# internal_tls:
# # set enabled to true means internal tls is enabled
# enabled: true
# # put your cert and key files on dir
# dir: /etc/harbor/tls/internal
# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
# external_url: https://reg.mydomain.com:8433
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: 123456
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: root123
# The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
max_idle_conns: 100
# The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
# Note: the default number of connections is 1024 for postgres of harbor.
max_open_conns: 900
# The default data volume
要修改的點:
hostname:改為自己的ip或域名
https的註釋掉,區域網下不需要
harbor_admin_password:設定密碼,賬號固定是admin了
[root@localhost harbor]# ./install.sh
安裝完成,輸入地址http://192.168.101.20存取,因為埠是80所以不需要輸了,如果改了別的埠,則後面帶上埠。
登入進去
到這裡harbor映象倉庫就搭好了,下面演示怎麼用映象倉庫。
專案建好了,如何推播呢,首先推播的伺服器要修改本機的組態檔並重啟docker,注意重啟docker前先重新載入組態檔。
vi /etc/docker/daemon.json
新增 "insecure-registries":[harbor地址:埠]
{
"insecure-registries":["192.168.101.20"]
}
重啟docker
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker
然後登陸docker倉庫
docker login<harbor所在伺服器ip>:<埠>
然後輸入使用者名稱密碼
[root@localhost harbor]# docker login 192.168.101.20
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
現在登陸成功了
新建一個.NET6專案,釋出,在釋出資料夾建一個Dockerfile檔案,內容為:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
COPY . .
ENTRYPOINT ["dotnet", "DoetNet6.Demo.dll"]
專案目錄為:
然後把這些檔案上傳到上面的192.168.101.20伺服器的/wwwroot資料夾下
執行 docker build -t <映象名> . 生成映象,注意後面有一個點不要忽略。
[root@localhost publish]# docker build -t dotnet6demo .
然後成功生成映象
然後把映象推到harbor倉庫
給映象打標籤
docker tag <本地映象名稱>:<版本號> <harbor地址:埠>/<harbor專案名稱>/<harbor的映象名>:<harbor版本號>
推播到harbor倉庫
docker push <harbor地址:埠>/<harbor專案名稱>/<harbor的映象名>:<harbor版本號>
[root@localhost publish]# docker tag dotnet6demo:latest 192.168.101.20/baozi/dotnet6demo:v1
[root@localhost publish]# docker push 192.168.101.20/baozi/dotnet6demo:v1
這時候我們的映象倉庫裡面就有了
現在用另一臺機器ip:192.168.101.21拉取映象執行
首先安裝docker,上面已經有了。
然後修改docker下的daemon.json設定,把habor地址填進去,上面也有了
vi /etc/docker/daemon.json
新增 "insecure-registries":[harbor地址:埠]
{
"insecure-registries":["192.168.101.20"]
}
重啟docker
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker
拉取映象
docker pull <harbor地址:埠>/<專案名稱>/<映象名>:<標籤版本>
拉取映象
docker pull 192.168.101.20/baozi/dotnet6demo:v1
![](https://img2022.cnblogs.com/blog/630011/202207/630011-20220720020937540-601697789.png)
執行映象
docker run -d --name dotnet6demo -p 5001:80 192.168.101.20/baozi/dotnet6demo:v1
-d:後臺執行
--name:docker名稱
-p:把本機的5001埠對映到docker的80埠
驗證:存取http://192.168.101.21:5001
存取成功!整個harbor的搭建,映象推播,映象拉取執行整個流程就完成了!
最後有一點要注意的是:如果專案設成私有的,拉取映象的伺服器要docker login xxx登陸harbor才能拉取成功。
github下載harbor慢的話,這裡雲盤取:https://pan.baidu.com/s/1lZX_BDZpoYtKd6u4PzdrMw?pwd=8y6c