Docker系列-5.分發映象
Docker系列-5.分發映象
映象的管理分為手工分發和docker-hub或者Registry倉庫兩種方式
手工分發映象
使用docker save
和docker load
可以在沒有Registry的情況下實現image的線下分發和遷移
[root@localhost ~]# docker save ubuntu:latest -o ubuntu:tatest.tar [root@localhost ~]# docker save ubuntu:latest | gzip > ubuntu:tatest.tgz [root@localhost ~]# ls -lh -rw-------. 1 root root 73M Aug 2 12:58 ubuntu:tatest.tar -rw-r--r--. 1 root root 27M Aug 2 12:59 ubuntu:tatest.tgz [root@localhost ~]# docker save redis:4.0.14_man | gzip > redis:4.0.14_man.tgz [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu update 3c7832c9920b 3 hours ago 96.4MB ubuntu latest 1e4467b07108 9 days ago 73.9MB httpd latest 9d2a0c6e5b57 10 days ago 166MB nginx latest 8cf1bfb43ff5 11 days ago 132MB centos latest 831691599b88 6 weeks ago 215MB hello-world latest bf756fb1ae65 7 months ago 13.3kB [root@localhost ~]# docker load -i redis:4.0.14_man.tgz 4014348e492a: Loading layer [==================================================>] 173.8MB/173.8MB f3aafaca0eb9: Loading layer [==================================================>] 7.69MB/7.69MB d0549792a5c2: Loading layer [==================================================>] 103.1MB/103.1MB bc8ef3880d58: Loading layer [==================================================>] 3.584kB/3.584kB Loaded image: redis:4.0.14_man
簡易Registry映象倉庫
Registry用於儲存 Docker 映象,包括映象的層次結構和元資料,利用它可以方便的實現映象的下載、上傳與修改。一般來說倉庫有Docker Hub主倉庫、公有云Registry,私有云Registry。
公有云Registry
Docker Hub是預設的Docker Registry。 Docker Hub 允許任何人線上託管自己的映象。
另外可以在/etc/docker/daemon.json
中加入更多的其他的國內Registry映象,一般公有云的Registry都是可以支援匿名Pull出鏡像的。
自建私有Registry
docker-registry歷經2代,registry1是python語言寫的,而現在registry2版本即docker-distribution更加安全和快速,並且是用go語言寫的,docker1.6及其以上版本已經不再支援老的Registry。
兩種方式安裝和部署Registry,第一種是用傳統的yum方式,安裝後通過systemctl來管理倉庫服務。
1 使用 yum 安裝docker-distribution
[root@localhost ~]# yum info docker-distribution Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.huaweicloud.com Available Packages Name : docker-distribution Arch : x86_64 Version : 2.6.2 Release : 2.git48294d9.el7 Size : 3.5 M Repo : extras/7/x86_64 Summary : Docker toolset to pack, ship, store, and deliver content URL : https://github.com/docker/distribution License : ASL 2.0 Description : Docker toolset to pack, ship, store, and deliver content [root@localhost ~]# yum install -y docker-distribution Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.huaweicloud.com Resolving Dependencies --> Running transaction check ---> Package docker-distribution.x86_64 0:2.6.2-2.git48294d9.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ==================================================================================================================================================== Package Arch Version Repository Size ==================================================================================================================================================== Installing: docker-distribution x86_64 2.6.2-2.git48294d9.el7 extras 3.5 M Transaction Summary ==================================================================================================================================================== Install 1 Package Total download size: 3.5 M Installed size: 12 M Downloading packages: docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm | 3.5 MB 00:00:01 Running transaction check Running transaction test Transaction test succeeded Running transaction Warning: RPMDB altered outside of yum. Installing : docker-distribution-2.6.2-2.git48294d9.el7.x86_64 1/1 Verifying : docker-distribution-2.6.2-2.git48294d9.el7.x86_64 1/1 Installed: docker-distribution.x86_64 0:2.6.2-2.git48294d9.el7 Complete!
2 以容器方式安裝registry
[root@localhost ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
cbdbe7a5bc2a: Pull complete
47112e65547d: Pull complete
46bcb632e506: Pull complete
c1cc712bcecd: Pull complete
3db6272dcbfa: Pull complete
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:latest
企業級Registry映象倉庫
企業級映象倉庫方案
常見的幾種docker registry企業級實現,包括官方的registry、Harbor,Quay Enterprise以及 Nexus等。
相對於企業級Registry映象倉庫,簡易的Registry沒有考慮的因素有:
-
缺少UI使用者介面
-
缺少角色的許可權控制、使用者管理、許可權管控、行為審計等安全功能
-
無法和企業的統一登入或者LDAP對接
-
缺少對映象的漏洞掃描等安全防護
-
缺少對映象檔案生命週期維護功能
-
缺少映象其它映象倉庫的能力
-
缺少高效的映象檔案分發能力,如,使用BT協議進行分發
-
缺少映象倉庫的執行時監控
-
缺少企業級的服務支援,如, bug fix、安全漏洞補丁的通知、產品升級等
-
不適合大規模容器叢集的使用,特別是跨地域的在多個數據中心進行映象的同步
Harbor
Harbor是VMware公司開源的企業級雲原生Registry專案, 由中國研發團隊開源,包含在vmware tanzu產品中,用來儲存、簽名並掃描儲存工件,能夠提供諸如使用者管理,訪問控制,活動審計,和節點間的複製等一系列高階功能,可以讓你迅速的搭建自己的私有映象倉庫。Harbor只能通過docker的方式進行部署,但是Harbor的開源版本並沒有與Kubernetes進行深度整合;不能執行在K8S平臺上。
Quay Enterprise
Quay.io是第一個使用私有儲存庫的託管映象倉庫。CoreOS於2014年收購了Quay,以推出首個企業級的映象倉庫。2018年CoreOS被Red Hat收購之後,Red Hat也將Quay Enterprise產品開源並持續提供企業級的支援服務。
Quay Enterprise 也是最早支援 OCI 規範的企業級映象倉庫,與 Kubernetes 整合為 Operator 提供良好的支援,並提供以下的特性:
-
異地複製
-
高可用性和可擴充套件性
-
安全掃描
-
自動構建觸發器
-
時間機器image回滾(基於build版本的回退)
-
細粒度的訪問控制
-
詳細的日誌和審計
-
自動連續垃圾收集,無需停機
-
與多個儲存後端整合 (如 ceph 等)
-
支援多種身份提供商:LDAP,OAuth,OpenStack Keystone等。
-
加密的CLI密碼
-
洪流分佈
-
容器和應用程式註冊
-
與Quay.io保持一致的UI和程式碼庫
Nexus3
在企業中Nexus最初是給 Java用的,大家把一些工具包放入Nexus中,後來慢慢發展,可以作為眾多軟體pipy、yum的倉庫,最新版本 Nexus3.x
全面支援 Docker 的私有映象。所以使用 Nexus3.x
一個軟體來統一管理 Docker
, Maven
, Yum
, PyPI
也是一個明智的選擇。Nexus支援傳統和容器兩種方式部署。
總結
它們之間的各方面對比如下表所示:
對比項 | Harbor | Quay | Nexus |
---|---|---|---|
語言 | Golang | Python | Java |
部署方式 | docker容器 | docker容器 | docker容器+傳統方式 |
使用者管理 | 支援 DB、LDAP 和 OIDC | 支援 LDAP、Keystone、OIDC、Google 和 GitHub | 支援與外部LDAP/AD |
機器人賬號 | 支援 | 支援 | 支援 |
許可權管理 | 支援 | 支援 | 支援 |
圖形使用者介面 | 支援 | 支援 | 支援 |
使用文件 | 非常全面 | 較少 | 待定 |
映象安全掃描 | 支援 | 支援 | 可整合Clair |
映象可信 | 支援 | 支援 | 待定 |
映象清理 | 支援 | 支援 | 支援 |
審計日誌 | 支援 | 支援 | 待定 |
Helm 管理 | 支援 | 支援 | 支援 |
多倉庫管理 | 支援 | 不支援 | 支援多種不同型別倉庫管理 |
映象同步 | 支援 | 不支援 | 支援Proxy代理到另一個映象庫 |
程式碼倉庫整合 | 不支援 | 支援 | 支援 |
映象構建 | 不支援 | 支援 | 不支援 |
映象下載 | 不支援 | 支援 | 支援 |
通知 | 支援 Webhook | 支援站內信、Webhook、Email、Slack 等 | 支援 |