一、簡介 Docker Hub作為Docker預設官方公共鏡像,如果想要自己搭建私有鏡像,Harbor是企業級鏡像庫非常好的選擇。 所謂私有倉庫,也就是在本地(區域網)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以將將鏡像提交到私有倉庫中。這樣我們既能使用Docker來運行我們的項目鏡像, 也避 ...
一、簡介
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
二、搭建企業級鏡像倉庫
2.1 一些準備工作
(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了
2.2執行安裝
[root@localhost harbor]# ./install.sh
安裝完成,輸入地址http://192.168.101.20訪問,因為埠是80所以不需要輸了,如果改了別的埠,則後面帶上埠。
登錄進去
到這裡harbor鏡像倉庫就搭好了,下麵演示怎麼用鏡像倉庫。
三、harbor鏡像倉庫使用
3.1新建項目
3.2登陸docker倉庫
項目建好了,如何推送呢,首先推送的伺服器要修改本機的配置文件並重啟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
現在登陸成功了
3.3新建.NET6項目生成鏡像推到docker倉庫
新建一個.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
這時候我們的鏡像倉庫裡面就有了
3.4拉取docker鏡像運行
現在用另一臺機器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