一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

容器鏡像倉庫的搭建、使用和維護 | 運維進階

 yi321yi 2020-07-27
在容器云環(huán)境中如何有效地保存、管理和分發(fā)所創(chuàng)建的鏡像呢?本文以docker registry為例搭建一個簡單的私有鏡像倉庫,并介紹如何獲取基礎鏡像并推送應用鏡像到私有鏡像倉庫,以及其它常見的鏡像操作和運維管理。
如果你想進一步學習企業(yè)級鏡像倉庫的選型和構(gòu)建及運維管理,可關(guān)注本文后附。

分享者:王志昌,某知名互聯(lián)網(wǎng)企業(yè)資深工程師。主要是負責paas平臺建設,容器云的運維,較為擅長云計算以及容器技術(shù)。

1 容器鏡像OCI規(guī)范與鏡像倉庫

容器鏡像是分層結(jié)構(gòu),如下圖所示,都遵循開放容器計劃Open Container Initiative(OCI)的規(guī)范(請參考https://github.com/opencontainers/image-spec),使在不同的容器運行時環(huán)境中構(gòu)建的容器鏡像可以自由地分發(fā)到其它的容器運行時,如,containerd、cri-o、podman,在其中正常運行,而不會有兼容性的問題。


容器鏡像倉庫做為企業(yè)的應用系統(tǒng)容器的資產(chǎn)倉庫,同樣需要兼容OCI的規(guī)范,無論容器鏡像來自公共鏡像倉庫、Dockerfile構(gòu)建、自源代碼到鏡像Source to image(S2I)構(gòu)建,都能夠正確地存儲、管理和分發(fā),保證從容器運行時環(huán)境上傳與下載的容器鏡像一致。在容器鏡像倉庫中,鏡像文件也是按照分層結(jié)構(gòu)單獨存儲,并通過依賴關(guān)系組合成一體。

2 最簡的私有鏡像倉庫的搭建、使用和維護

2.1 公共鏡像倉庫

公有鏡像倉庫,全互聯(lián)網(wǎng)都可以訪問, 常見的如下表:

公共鏡像倉庫,你可以搜索到有用的鏡像并拉取下來,也可以上傳自己的鏡像管理并分享給其他人。

2.2 私有鏡像倉庫

公共鏡像倉庫是托管并在互聯(lián)網(wǎng)開放的服務,適合用于分享交流,但并不適合企業(yè)使用,上傳和下載都受限于網(wǎng)速,并且經(jīng)常會出現(xiàn)各種不確定的狀況導致失敗,鏡像的管理也受限于托管服務。因此,企業(yè)需要自己的私有鏡像倉庫,做到自主可控。

2.2.1 使用Docker Registry搭建簡易私有鏡像倉庫

首先需要一臺安裝好Linux (以下都以CentOS 8.2 minimal安裝為例)主機,建議配置4C8G或以上,且有獨立的500G以上的數(shù)據(jù)盤存儲鏡像文件。

假設IP為10.231.238.238, HOSTNAME為registry.,數(shù)據(jù)盤掛載在/data

運行如下命令安裝:

yum install -y bash-completion curl wget httpd-tools bind-utils podmandocker-distribution

其中, docker-distribution是Docker Registry鏡像倉庫,podman是容器運行時,其它是工具。

生成密鑰和自簽證書:

openssl req -newkey rsa:2048 -nodes -keyout reg.key -x509 -days 365 -out reg.crt -subj '/C=CN/O=Twt/OU=Ops/CN=registry.'cp reg.crt /etc/pki/ca-trust/source/anchorsupdate-ca-trust extract

注意,由于是自簽證書,所有要使用鏡像倉庫的機器都需要配置證書的信任,或者在podman命令中通過--tls-verify=false忽略證書校驗。

生成登錄用戶的用戶名和密碼的文件:

htpasswd -cBb htpasswd twttest123

用戶名為twt,密碼為test123,密碼使用bcrypt算法

編輯/etc/docker-distribution/registry/config.yaml文件,添加或修改如下內(nèi)容:

storage:   ...   filesystem:      rootdirectory: /data/registryhttp:addr: :443   tls:      certificate: /data/certs/reg.crt      key: /data/certs/reg.keyauth:   htpasswd:      realm: basic-realm      path: /data/auth/htpasswd

配置防火墻開放https端口:

firewall-cmd --permanent --add-service=httpsfirewall-cmd --reload

啟動Docker Registry,并配置自動啟動:

systemctl enable docker-distributionsystemctl start docker-distribution

通過如下命令檢查registry是否運行正常

curl -s -k -u twt:test123https://registry./v2/_catalog

如果返回{'repositories':[]}則表示我們搭建成功

2.2.2 使用podman運行私有鏡像倉庫

使用podman的好處是無須用root用戶或啟動系統(tǒng)守護進程,任意用戶都可以方便地使用容器運行時。

用root用戶配置防火墻開放5000端口:

firewall-cmd --permanent --add-port=5000/tcpfirewall-cmd --reload

下載Docker Registry鏡像:

podman pull docker.io/library/registry:2

運行Docker Registry容器:

podman run -d --name private-registry -p 5000:5000 --restart=always \-v /data/registry:/var/lib/registry:z \-e REGISTRY_STORAGE_DELETE_ENABLED=true \-v /data/certs:/certs:z \-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.crt \-e REGISTRY_HTTP_TLS_KEY=/certs/reg.key \-v /data/auth:/auth:z \-e REGISTRY_AUTH=htpasswd \-e REGISTRY_AUTH_HTPASSWD_REALM='Basic Realm' \-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \docker.io/library/registry:2

生成密鑰、證書、用戶密碼文件等,請參考2.2.1中的步驟。

2.3 私有鏡像倉庫的使用

2.3.1 推送鏡像

  • 從docker hub上拉取nginx鏡像, 版本1.16.1

podmanpull nginx:1.16.1

  • 把nginx:1.16.1重新打tag為私有鏡像倉庫中的命名

podman images

podman tag docker.io/library/nginx:1.16.1 registry.:5000/library/nginx:1.16.1

  • 推送鏡像到私有倉庫

podman login -u twt -p test123 registry.:5000

podmanpush registry.:5000/library/nginx:1.16.1

  • 檢查nginx鏡像是否已經(jīng)推送到私有鏡像倉庫

curl -s -k -u twt:test123 https://registry.:5000/v2/_catalog

curl -s -k -u twt:test123https://registry.:5000/v2/library/nginx/tags/list

如果分別返回

{'repositories':['library/nginx']}

{'name':'library/nginx','tags':['1.16.1']}

則表示推送成功

使用du命令,檢查私有鏡像倉庫目前使用磁盤大小

du -sh /data/registry/

52M/data/registry/

由于Docker Registry使用文件目錄保存鏡像文件,在本機的bash下也可以通過find命令查看鏡像倉庫中的鏡像:

find /data/registry -print | \

grep 'v2/repositories' | \

grep 'current' | \

grep -v 'link' | \

sed -e 's/\/_manifests\/tags\//:/' | \

sed -e 's/\/current//' | \

sed -e 's/^.*repositories\///' | \

sort

library/nginx:1.16.1

2.3.2 下載鏡像

下載鏡像前,先刪除本地的鏡像

podman rmi docker.io/library/nginx:1.16.1

podman rmi registry.:5000/library/nginx:1.16.1

podman images

下載鏡像并查看本地鏡像

podman login -u twt -p test123 registry.:5000

podman pullregistry.:5000/library/nginx:1.16.1

podman images

2.4 私有鏡像倉庫的維護

2.4.1 刪除具體鏡像

以上面私有倉庫的鏡像registry.:5000/library/nginx:1.16.1為例,如何將其從私有鏡像倉庫中刪除?只需要如下兩步

  • 首先是獲取這個鏡像的manifest元數(shù)據(jù),并從鏡像倉庫中刪除元數(shù)據(jù)

curl -k -u twt:test123 --head --silent -H 'Accept: application/vnd.docker.distribution.manifest.v2 json' -X GET https://registry.:5000/v2/library/nginx/manifests/1.16.1 | grep docker-content-digest | awk '{print ($2)}'

sha256:02bab24df17e31f2795d0ac42c404d4de1312a4a745c8c46b10665cc6ad6faa2

  • 然后,將元數(shù)據(jù)從鏡像倉庫中刪除, 返回202則表示刪除成功

curl -v -k -u twt:test123 -X DELETE

https://registry.:5000/v2/library/nginx/manifests/sha256:02bab24df17e31f2795d0ac42c404d4de1312a4a745c8c46b10665cc6ad6faa2

  • 檢查下是否刪除成功

curl -s -k -u twt:test123https://registry.:5000/v2/library/nginx/tags/list

{'name':'library/nginx','tags':null}

  • 最后,刪除這個鏡像相關(guān)聯(lián)的blob文件

可以看到,有6個blob被清理掉

  • 再次查看registry占用磁盤空間, 已經(jīng)從52M降低到128K

du -sh /data/registry/

128K /data/registry/

2.4.2 自動清理私有鏡像倉庫的過期鏡像

隨著應用越來越多,鏡像倉庫中包含的鏡像和版本也越來越多,特別是測試環(huán)境,構(gòu)建次數(shù)非常多鏡像版本也非常多,如何做到自動清理過期的鏡像呢?

比如

  • 只保留每個鏡像的最近10個版本?

  • 只保留最近1個月內(nèi)的鏡像版本?

  • ...

可以參考 https://github.com/burnettk/delete-docker-registry-image

或者https://github.com/andrey-pohilko/registry-cli/blob/master/registry.py

覺得本文有用,請轉(zhuǎn)發(fā)、點贊或點擊“在看”,讓更多同行看到

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美一区二区日韩一区二区| 中文字幕五月婷婷免费| 风韵人妻丰满熟妇老熟女av| 日韩高清毛片免费观看| 91后入中出内射在线| 久久精品色妇熟妇丰满人妻91| 国产一二三区不卡视频| 日本午夜免费福利视频| 免费精品一区二区三区| 国产成人精品一区二三区在线观看| 国产色第一区不卡高清| 国产精品色热综合在线| 日韩18一区二区三区| 日韩在线视频精品视频| 国产精品尹人香蕉综合网| 日韩人妻中文字幕精品| 欧美自拍系列精品在线| 激情三级在线观看视频| 99久久国产综合精品二区 | 国产高清在线不卡一区| 久久国产亚洲精品赲碰热| 日韩无套内射免费精品| 日本东京热加勒比一区二区| 成人免费高清在线一区二区| 日本在线不卡高清欧美| 中文字幕一区二区免费| 日本精品中文字幕人妻| 一区二区三区亚洲国产| 欧美不卡高清一区二区三区| 国产又粗又长又大高潮视频 | 蜜桃av人妻精品一区二区三区| 国产偷拍精品在线视频| 丰满少妇被猛烈撞击在线视频| 亚洲黄片在线免费小视频| 东京不热免费观看日本| 亚洲天堂有码中文字幕视频| 国产视频一区二区三区四区| 国产成人一区二区三区久久| 国产又大又黄又粗的黄色| 日本特黄特色大片免费观看| 99精品人妻少妇一区二区人人妻|