Docker 自建私有Registry 私有倉庫


說明

記錄搭建 docker 私有倉庫步驟

介紹

docker鏡像可以托管到dockerhub中,跟代碼庫托管到github是一個道理。但如果我們不想把docker鏡像公開放到dockerhub中,只想在部門或團隊內部共享docker鏡像,能不能項gitlab一樣在搭建私有的倉庫呢?答案是肯定的,docker也支持將鏡像存到私有倉庫。下面將驗證docker原生的倉庫和開源的私用倉庫,並分析其特點。

原理

Docker模型的核心部分是有效的利用分層鏡像機制,鏡像可以通過分層來進行繼承,基於基礎鏡像,可以制作各種具體的應用鏡像。不同的Docker容器可以共享一些基礎的文件系統層,同時再加上自己獨有的改動層,大大提高了存儲的效率。由於最終鏡像最終是以tar.gz的方式靜態存儲在服務器端,這種存儲適用於對象存儲而不是塊存儲。

一次docker pull (即用戶從客戶端向倉庫拉鏡像),發生的交互

  1. 客戶端向索引請求ubuntu鏡像下載地址
  2. 索引回復:ubuntu所在倉庫A、 ubuntu鏡像的校驗碼(Checksum)和所有層的Token
  3. 客戶端向倉庫A請求 ubuntu的所有層(倉庫A負責存儲ubuntu,以及它所依賴的層)
  4. 倉庫A向索引發起請求,驗證用戶Token的合法性
  5. 索引返回這次請求是否合法
  6. 客戶端從倉庫下載所有的層,倉庫從后端存儲中獲取實際的文件數據,返給客戶端

搭建

本次直接使用yum安裝 docker-registry

[root@registory ~]# yum install docker-registry -y
[root@registory ~]# rpm -ql docker-distribution         # 查看安裝包詳細信息
/etc/docker-distribution/registry/config.yml            # 配置文件
/usr/bin/registry                                       # 啟動明命令
/usr/lib/systemd/system/docker-distribution.service     # 服務啟動腳本
/usr/share/doc/docker-distribution-2.6.2
/usr/share/doc/docker-distribution-2.6.2/AUTHORS
/usr/share/doc/docker-distribution-2.6.2/CONTRIBUTING.md
/usr/share/doc/docker-distribution-2.6.2/LICENSE
/usr/share/doc/docker-distribution-2.6.2/MAINTAINERS
/usr/share/doc/docker-distribution-2.6.2/README.md
/var/lib/registry                                       # Docker 鏡像存放的目錄

查看配置文件

[root@registory ~]# cat /etc/docker-distribution/registry/config.yml 
version: 0.1
log:
  fields:
    service: registry               # 服務名稱
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry    # 鏡像存放目錄,可以根據情況修改
http:
    addr: :5000                     # 端口,這里需要根據實際情況來修改為 80 或者 443

這里先不進行修改,簡便安裝使用。

啟動

[root@registory ~]# systemctl start docker-distribution
[root@registory ~]# ps aux|grep registry
root     20843  0.0  0.8 307476 17476 ?        Ssl  13:31   0:00 /usr/bin/registry serve /etc/docker-distribution/registry/config.yml

上傳和下載鏡像測試

測試上傳鏡像

注意: 默認情況下,docker使用的是https方式上傳和下載,本次是用的是5000端口,所以需要手動配置一下

[root@registory ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://0tb09e4d.mirror.aliyuncs.com"],     # 鏡像加速
  "insecure-registries": ["registry.kubernetes:5000"]               # 這里列表中可配置多個
}

說明:上述中的registry.kubernetes手動寫了hosts文件,所以需要注意,在需要使用該registry的機器上,都需要能解析。

[root@registory ~]# grep registry /etc/hosts
192.168.1.120 registry registry.kubernetes

然后隨意上傳一個打包好的鏡像

[root@registory registry]# docker push registry.kubernetes:5000/myweb:v0.3-6
The push refers to repository [registry.kubernetes:5000/myweb]
cc7d034b0d81: Pushed 
b9a751a05ed2: Pushed 
076c58d2644f: Pushed 
b2cbae4b8c15: Pushed 
5ac9a5170bf2: Pushed 
a464c54f93a9: Pushed 
v0.3-6: digest: sha256:016196f127de6b4b726f0ea466216567903ad8c4820cf37b62559ea78d7f2ec3 size: 1567

測試下載鏡像

也需要手動配置hosts解析和docker的配置文件修改

[root@node03 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://0tb09e4d.mirror.aliyuncs.com"],     # 鏡像加速
  "insecure-registries": ["registry.kubernetes:5000"]               # 這里列表中可配置多個
}
[root@node03 ~]# grep registry /etc/hosts
192.168.1.120 registry registry.kubernetes

操作查看

[root@node03 ~]# docker image pull registry.kubernetes:5000/myweb:v0.3-6
v0.3-6: Pulling from myweb
bdf0201b3a05: Pull complete 
3d0a573c81ed: Pull complete 
8129faeb2eb6: Pull complete 
3dc99f571daf: Pull complete 
c77cad417662: Pull complete 
f8733d9c3f79: Pull complete 
Digest: sha256:016196f127de6b4b726f0ea466216567903ad8c4820cf37b62559ea78d7f2ec3
Status: Downloaded newer image for registry.kubernetes:5000/myweb:v0.3-6
registry.kubernetes:5000/myweb:v0.3-6
[root@node03 ~]# docker image ls
REPOSITORY                                                       TAG                  IMAGE ID            CREATED             SIZE
registry.kubernetes:5000/myweb                                   v0.3-6               63478b4469e1        21 hours ago        16MB


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM