docker 搭建私人倉庫有下面幾種方式:
- 1、docker hub 官方私人鏡像倉庫
- 2、本地私有倉庫
官方私人鏡像倉庫搭建很簡單 (就是需要有魔法,否則就異步到第二種方法吧),只需要 login、pull、tag、push 幾種命令就完事了。而本地私人鏡像倉庫則比較麻煩一點而且只能存儲在本地不能公開。
下面我們就來簡單的介紹一下怎麼搭建自己的私人倉庫吧!
官方鏡像倉庫#
首先,我們需要在 docker hub 這裡申請註冊一個帳號並登錄,同時也要在 Docker Desktop 中進行登錄。完成登錄以後,我們首先在命令行中使用命令進行登錄
docker login
出現 Login Succeeded 就代表登錄成功了!
注:你的身份驗證憑證將被存儲在本地目錄的 .dockercfg 文件中
接著我們查看一下本地鏡像,可以看到這裡有一個 nginx
,待會兒就拿這個進行測試吧!
docker images
首先對鏡像打上 tag
,也就是重命名。
注:重命名格式需要 用戶名 / 鏡像名:版本號
docker tag nginx codegetters/nginx:1.0.0
檢查一下看看是否成功打上了 tag
到了這裡我們就完成了大部分的工作了,只需要 push
到自己的帳號中就好了。
注:push 的鏡像名要寫全包括最後的版本號,否則就會失敗
docker push codegetters/nginx:1.0.0
完成以後我們就可以刪除本地鏡像了,不過刪除不是我們的重點就不過多展示了。我們接著進入 docker hub 並登錄自己的帳號。點擊 Repositories 就可以看到我們的倉庫中已經有了 nginx
了
到了這裡我們就算完成了,如果想要從自己的倉庫中拉下來就執行下面的命令即可
docker pull codegetters/nginx:1.0.0
本地私有倉庫#
為什麼使用私用倉庫?
公司的項目一般不予許我們上傳到 Docker Hub 這類的公共倉庫中,所有學會創建一個私有倉庫也是非常必要的。雖然 hub.docker 上可以保存鏡像,但是網速相對較慢,在內部環境中搭建一個私有的公共倉庫是個更好的方案。
官方提供了 docker hub 來作為一個公開的集中倉庫。然而,本地訪問 Docker Hub 速度往往很慢,並且很多時候需要一個本地的私有倉庫只供網內使用。
registry 就是管理 docker 鏡像的服務。接下來的操作也是主要使用 registry 這個鏡像進行,
首先我們先拉取 registry
鏡像
docker pull registry
接著讓 registry
跑起來並且將鏡像的 /var/lib/registry
掛載到我們的本地 E:\software_cache\docker
這個目錄中,同時將本地的 5000 端口映射到鏡像中
docker run -d -p 5000:5000 -v E:\software_cache\docker:/var/lib/registry --restart=always registry
運行成功後可以訪問 ip:5000/v2
如果是下圖的狀態就算運行成功了。
訪問 ip:5000/v2/_catalog
查看鏡像倉庫情況,這裡的空數組表明還沒有上傳任何鏡像
接下來我們打開 docker desktop 打開設置,將自己的 ip:5000
添加到下面的數組中 (沒有的話需要自己添加) 以此允許本地推送鏡像,如果是 Linux
的話,則需要找到 /etc/docker/daemon.json
(沒有需要自己創建)
"insecure-registries": [
"http://xxx.xxx.xxx.xxx:5000"
],
完成設置以後,我們就可以安按照上面的操作流程了。先對鏡像打上 tag 並檢查一下
注:重命名格式需要 用戶名 / 鏡像名:版本號
docker tag nginx xxx.xxx.xxx.xxx:5000/nginx:1.0.0
docker images
完成 tag
後就將鏡像推送到我們的本地倉庫了
注:push 的鏡像名要寫全包括最後的版本號,否則就會失敗
docker push xxx.xxx.xxx.xxx:5000/nginx:1.0.0
這個時候我們訪問剛才的頁面,就顯示了剛才推送的鏡像 - nginx
當然,我們也可以使用命令也可以進行查看是否成功推送
curl http://xxx.xxx.xxx.xxx:5000/v2/_catalog
也可以使用這個命令來訪問本地倉庫的 tag
列表
curl http://xxx.xxx.xxx.xxx:5000/v2/_catalog | python -m json.tool
我們來運行一下 registry
中的鏡像看看是否運行能夠運行成功。這裡我是將本地的 80
端口映射到 nginx 中的 80
端口了
docker run -d -p 80:80 --name nginx xxx.xxx.xxx.xxx:5000/nginx:1.0.0
我們訪問一下本地 ip:80
出現了 nginx
頁面就表明搭建成功了!
使用 Harbor 管理倉庫#
什麼是 Harbor?
harbor 是一個由 vm 公司開源的企業級容器鏡像倉庫,有以下功能:
管理用戶界面
基於角色的訪問控制
LDAP/AD 集成及日誌審計等基本運維操作
Harbor 的三種安裝方式 (這裡我就選擇 離線安裝了):
- 在線安裝:從 Docker Hub 下載 Harbor 相關鏡像,因此安裝軟件包非常小
- 離線安裝:安裝包包含部署的相關鏡像,因此安裝包比較大
- OVA 安裝程序(第三方):當用戶具有 vCenter 環境時,使用此安裝程序,在部署 OVA 後啟動 Harbor
前置準備:下載 Harbor online 安裝包 中的 harbor-offline-installer-vx.x.x.tgz到本地進行解壓縮,然後將 harbor.yml.tmpl
文件複製並重命名為 harbor.yml
,接著使用文本編輯器打開並修改 hostname
為本地 ip 地址。如果說你不使用 https
進行訪問 (一般都是內網使用),那就將相關的配置都給註釋掉。只註釋關於 https 的內容就好了,其他內容最好不要動。
然後打開命令行進入這個目錄中,使用 docker 加載本地鏡像
docker load -i harbor.v2.10.1.tar.gz
加載完成後我們檢查一下已經成功加載了 Harbor 本地鏡像了
使用 ./prepare
預處理一些文件,初始化文件
接下來執行 install.sh
就正式開始安裝了