Harbor企業級私服Docker映象倉庫搭建及應用

2022-07-20 12:00:53

一、簡介

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