centos7搭建Docker私有庫及刪除庫內鏡像

来源:https://www.cnblogs.com/xiaoxiaozhou/archive/2019/07/19/11213769.html
-Advertisement-
Play Games

環境準備系統: 主機兩台,分別是docker私有庫伺服器(IP 192.168.121.121)和用戶開發機(IP 192.168.121.122),開發機從私有庫伺服器拉取鏡像。 1、配置軟體源並安裝安裝docker兩台主機安裝docker 2、搭建私有鏡像倉庫登陸私有庫伺服器 創建docker管 ...


環境準備
系統:

cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

 

主機兩台,分別是docker私有庫伺服器(IP 192.168.121.121)和用戶開發機(IP 192.168.121.122),開發機從私有庫伺服器拉取鏡像。

 


 

1、配置軟體源並安裝安裝docker
兩台主機安裝docker

yum install docker-ce

 

2、搭建私有鏡像倉庫
登陸私有庫伺服器

創建docker管理賬戶並設置密碼

useradd dkuser
passwd dkuser

把賬戶加入docker組,這一步是為了可以使用普通賬戶管理docker,而不用使用sudo命令

usermod -G docker dkuser

為賬戶配置sudo許可權

visudo

添加下麵一行
dkuser ALL=(ALL) NOPASSWD:ALL

 

切換賬戶

su dkuser

啟動docker服務

sudo systemctl start docker

 

可以通過官方提供的registry鏡像來搭建本地的私有倉庫,所以拉取官方鏡像

docker pull registry

 

創建存放鏡像和docker配置文件的目錄

sudo mkdir /data/docker

 

創建配置文件,storage配置中的delete=true配置項,是為了允許刪除鏡像。預設的鏡像是沒有這個參數

sudo vi /data/docker/config.yml
 1 version: 0.1
 2 
 3 log:
 4 fields:
 5 service: registry
 6 storage:
 7 delete:
 8 enabled: true
 9 cache:
10 blobdescriptor: inmemory
11 filesystem:
12 rootdirectory: /var/lib/registry
13 http:
14 addr: :5000
15 headers:
16 X-Content-Type-Options: [nosniff]
17 health:
18 storagedriver:
19 enabled: true
20 interval: 10s
21 threshold: 3
View Code

 

運行registry容器

docker run -d -p 5000:5000 -v /data/docker/registry:/var/lib/registry -v /data/docker/config.yml:/etc/docker/registry/config.yml --restart always --name registry registry

說明:
-d -p 5000:5000 埠映射
-v /data/docker/registry:/var/lib/registry 預設情況下,會將倉庫存放於容器內的/var/lib/registry目錄下,指定本地目錄掛載到容器
--restart always 在容器退出時總是重啟容器,主要應用在生產環境
--name registry 指定容器的名稱

查看容器

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
071105c54db3 registry "/entrypoint.sh /etc…" 3 minutes ago Up About a minute 0.0.0.0:5000->5000/tcp registry

 

3、把本地鏡像上傳到私有倉庫
在私有庫伺服器上

這裡以busybox鏡像為例,因為比較小

首先把鏡像下載到本地

docker pull busybox

 

為鏡像打標簽

docker tag busybox 192.168.121.121:5000/busybox

 

查看鏡像

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.121.121:5000/busybox latest db8ee88ad75f 7 hours ago 1.22MB
busybox latest db8ee88ad75f 7 hours ago 1.22MB

 

編輯配置文件,添加配置是為了能夠在本地上傳鏡像。

sudo vi /usr/lib/systemd/system/docker.service 

在 ExecStart=/usr/bin/dockerd 後邊添加

--insecure-registry 192.168.121.121:5000

 

重啟docker服務

sudo systemctl daemon-reload
sudo systemctl restart docker

 

推送鏡像到私有庫

docker push 192.168.121.121:5000/busybox
The push refers to repository [192.168.121.121:5000/busybox]
0d315111b484: Pushed 
latest: digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 size: 527

 

報錯解決:

docker push 192.168.121.121:5000/busybox
The push refers to repository [192.168.121.121:5000/busybox]
Get https://192.168.121.121:5000/v2/: http: server gave HTTP response to HTTPS client

 

因為Docker從1.3.X之後,與docker registry交互預設使用的是https,然而此處搭建的私有倉庫只提供http服務,所以當與私有倉庫交互時就會報上面的錯誤。為瞭解決這個問題需要在啟動docker server時增加啟動參數為預設使用http訪問

sudo vi /usr/lib/systemd/system/docker.service 

ExecStart=/usr/bin/dockerd 後邊添加

--insecure-registry 192.168.121.121:5000

 

4、開發機從私有庫載入鏡像

同樣的也需要添加配置

vi /usr/lib/systemd/system/docker.service 

ExecStart=/usr/bin/dockerd 後邊添加

--insecure-registry 192.168.121.121:5000

 

啟動docker服務

systemctl start docker

 

從私有庫載入鏡像

docker pull 192.168.121.121:5000/busybox
Using default tag: latest
latest: Pulling from busybox
ee153a04d683: Pull complete 
Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
Status: Downloaded newer image for 192.168.121.121:5000/busybox:latest

 

查看鏡像

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.121.121:5000/busybox latest db8ee88ad75f 7 hours ago 1.22MB

 

5、刪除鏡像
在私有庫伺服器上

相應的參考命令:
#查詢鏡像
curl <倉庫地址>/v2/_catalog

#查詢鏡像tag(版本)
curl <倉庫地址>/v2/<鏡像名>/tags/list

#查詢鏡像digest_hash
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET <倉庫地址>/v2/<鏡像名>/manifests/<tag>

#刪除鏡像API
curl -I -X DELETE "<倉庫地址>/v2/<鏡像名>/manifests/<鏡像digest_hash>"


在伺服器執行下麵命令
查詢鏡像

curl -XGET http://192.168.121.121:5000/v2/_catalog
{"repositories":["busybox"]}

 

查詢鏡像tag

curl http://192.168.121.121:5000/v2/busybox/tags/list
{"name":"busybox","tags":["latest"]}

 

查詢鏡像digest_hash,刪除命令裡邊要填寫的 鏡像digest_hash 就是 查詢結果裡邊 Docker-Content-Digest: 後邊的內容

curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET http://192.168.121.121:5000/v2/busybox/manifests/latest
HTTP/1.1 200 OK
Content-Length: 527
Content-Type: application/vnd.docker.distribution.manifest.v2+json
Docker-Content-Digest: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
Docker-Distribution-Api-Version: registry/2.0
Etag: "sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649"
X-Content-Type-Options: nosniff
Date: Fri, 19 Jul 2019 06:09:44 GMT

 

刪除私有庫鏡像

curl -I -XDELETE http://192.168.121.121:5000/v2/busybox/manifests/sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
HTTP/1.1 202 Accepted
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Fri, 19 Jul 2019 06:10:56 GMT
Content-Length: 0

 

查看鏡像信息可以看到鏡像的標簽顯示為空 null

curl http://192.168.121.121:5000/v2/busybox/tags/list
{"name":"busybox","tags":null}

 

這裡雖然刪除了,但是實際上硬碟地址還沒有釋放,是因為docker刪除p_w_picpath只是刪除的p_w_picpath的元數據信息。層數據並沒有刪除。現在進入registry中進行垃圾回收。

進入registry容器

docker exec -it 071105c54db3 /bin/sh
/ # cd /var/lib/registry/

 

查看鏡像大小

/var/lib/registry # du -sch
756.0K .
756.0K total

 

執行回收命令

/var/lib/registry # registry garbage-collect /etc/docker/registry/config.yml 
busybox

0 blobs marked, 3 blobs and 0 manifests eligible for deletion
blob eligible for deletion: sha256:895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/89/895ab622e92e18d6b461d671081757af7dbaa3b00e3e28e12505af7817f73649 go.version=go1.11.2 instance.id=7c37e39d-6ad1-4139-b9d1-592a900b0902 service=registry
blob eligible for deletion: sha256:db8ee88ad75f6bdc74663f4992a185e2722fa29573abcc1a19186cc5ec09dceb
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/db/db8ee88ad75f6bdc74663f4992a185e2722fa29573abcc1a19186cc5ec09dceb go.version=go1.11.2 instance.id=7c37e39d-6ad1-4139-b9d1-592a900b0902 service=registry
blob eligible for deletion: sha256:ee153a04d6837058642958836062f20badf39f558be3e6c7c7773ef7d8301d90
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/ee/ee153a04d6837058642958836062f20badf39f558be3e6c7c7773ef7d8301d90 go.version=go1.11.2 instance.id=7c37e39d-6ad1-4139-b9d1-592a900b0902 service=registry

 

再次查詢,發現回收資源執行成功

/var/lib/registry # du -sch
0 .
0 total

 

參考:

https://www.cnblogs.com/Tempted/p/7768694.html
https://blog.csdn.net/jiangeeq/article/details/81056055
https://www.cnblogs.com/HwyStudy/p/10483163.html
https://blog.51cto.com/302876016/1966816


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (視頻)Windows平臺下的IIS進行負載均衡。IIS中的這種實現方式成為APR,所謂的“Web Fram”,就是將應用程式部署到多台伺服器,從而達到分擔流量的作用。 ...
  • .NET Core 提供的發佈應用程式選項 self-contained 是共用應用程式的好方法,因為應用程式的發佈目錄包含所有組件、運行時和框架。您只需要告訴使用者應用程式的入口 exe 文件,就可以使程式運行起來,而不必擔心目標電腦上是否存在.NET Core 運行時和應用框架。目前 .NET ...
  • 本來計劃是五篇文章的,每章發個半小時隨便翻翻就能懂,但是第一篇發了之後,我發現.NET環境下很多人對IoC和DI都很排斥,搞得評論區異常熱鬧。 同一個東西,在Java下和在.NET下能有這麼大的差異,也是挺有意思的一件事情。 所以我就把剩下四篇內容精簡再精簡,合成一篇了,權當是寫給自己的一個備忘記錄... ...
  • public void FreshDateTime() { string strWeek = string.Empty; #region 格式化星期 switch (DateTime.Now.DayOfWeek) { case DayOfWeek.Sunday: strWeek = "星期日"; b ...
  • SSM框架- S-Spring S-Spring mvc M-mybatis 就需要以下幾個配置文件,放在resources文件夾下麵: db.properties 放的是資料庫連接池的配置文件,有資料庫jdbc的連接信息: mybatis-config.xml 放置的是mybatis相關的配置文件 ...
  • Ubuntu Dock 為應用程式啟用最小化操作,立即生效。 pip3 ipython3 ...
  • 問題描述: xshell遠程連接伺服器連接不上,如下圖所示: 故障排除: Port 22# Use these options to restrict which interfaces/protocols sshd will bind to#ListenAddress ::#ListenAddres ...
  • LinuxShell腳本——選擇結構 摘要:本文主要學習了Shell腳本中的選擇結構。 if-else語句 基本語法 最簡單的用法就是只使用if語句,它的語法格式為: 如果將if和then寫在一行,則需要在then前面添加“;”: 如果有兩個分支,就可以使用if-else語句,它的格式為: Shel ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...