docker/docker desktop for window環(huán)境下創(chuàng)建本地鏡像倉(cāng)庫(kù)方式
問(wèn)題現(xiàn)象
最近在研究如何在window服務(wù)器環(huán)境中創(chuàng)建docker本地鏡像倉(cāng)庫(kù),由于網(wǎng)上幾乎都是基于Linux服務(wù)器環(huán)境的,所以就能通過(guò)參考學(xué)習(xí)和實(shí)踐,來(lái)完成這個(gè)目標(biāo)。
問(wèn)題分析
通過(guò)自學(xué),發(fā)現(xiàn)了創(chuàng)建docker鏡像倉(cāng)庫(kù)的一些基本的邏輯原理,這是無(wú)論在window還是linux環(huán)境下,都肯定是一樣的。
注意:docker中直接下載后的鏡像是存放在本地docker庫(kù)中,而不是本機(jī)私有鏡像倉(cāng)庫(kù)的!
區(qū)別
本地docker庫(kù):是安裝docker后,docker服務(wù)中自帶的庫(kù)。
本機(jī)私有鏡像倉(cāng)庫(kù):是在docker服務(wù)中,啟動(dòng) registry 容器,從而創(chuàng)建的一個(gè)用于存放鏡像的庫(kù),由于容器可以和本機(jī)端口綁定,所以也被稱為本機(jī)私有鏡像倉(cāng)庫(kù)。
配置
window,docker/docker desktop(window環(huán)境建議使用docker desktop)
步驟
1.啟動(dòng)docker desktop,打開(kāi)cmd命令窗口,輸入:
docker search registry
2.看到registry鏡像,輸入:

docker pull registry
3.查看鏡像,看到已經(jīng)下載到本地的registry鏡像
docker images #查看本地鏡像,可以看到registry鏡像

4.查看鏡像,看到已經(jīng)下載到本地的registry鏡像,下一步就是部署registry服務(wù)容器,
先在本機(jī)創(chuàng)建一個(gè)文件夾(如:E盤 下創(chuàng)建一個(gè) registry 文件夾,并設(shè)置為共享)
輸入:
docker run -d -p 5000:5000 --restart=always -v E:/registry:/var/lib/registry registry:latest
設(shè)置自重啟,綁定本機(jī)5000端口,同時(shí)映射容器中鏡像存放位置的路徑到本機(jī)路徑中。
5.查看容器,看到已經(jīng)部署好的registry容器,輸入:
docker ps #查看運(yùn)行中的容器

6.容器部署好之后,本機(jī)的鏡像倉(cāng)庫(kù)就建好了,接下來(lái)就是要添加倉(cāng)庫(kù)地址,才能實(shí)現(xiàn)連接。
在docker desktop中可以直接實(shí)現(xiàn)可視化配置,簡(jiǎn)單方便:把鏡像倉(cāng)庫(kù)地址(本機(jī)ip:5000)添加到 insecure-registries 中:


7.重啟docker desktop,通過(guò)重命名(docker tag 鏡像id 鏡像新標(biāo)簽名)創(chuàng)建一個(gè)新鏡像,注意格式,必須是(本機(jī)ip:5000/)開(kāi)頭

8.上傳鏡像到本地鏡像倉(cāng)庫(kù),輸入:
docker push
由于我事先上傳過(guò)一次,所以顯示 Layer already exists(數(shù)據(jù)已存在)

能看到 latest:digest:sha256:、、、 size:。。。(即為push成功)
下面演示一個(gè)首先上傳鏡像的結(jié)果圖例子:

9.查看本機(jī)鏡像倉(cāng)庫(kù)地址中的鏡像,驗(yàn)證鏡像是否成功上傳:
方法1:打開(kāi)瀏覽器,輸入 本機(jī)ip:5000/v2/_catalog 可以訪問(wèn)docker接口,查看鏡像信息,(該方法是最準(zhǔn)確的):

方法2:直接打開(kāi) 本機(jī)的 E:\registry\docker\registry\v2\repositories 文件路徑,因?yàn)樗戌R像都會(huì)存放在這個(gè)目錄下,可以看見(jiàn)里面有個(gè)registry文件夾,這個(gè)文件夾就是剛才push的鏡像數(shù)據(jù)文件:
注意:這里建議新手不要用registry鏡像來(lái)測(cè)試,因?yàn)檫@個(gè)鏡像的名字容易和路徑中的registry混淆,概念不同,需區(qū)別開(kāi)來(lái)。

進(jìn)入該文件可以看到以下信息,則表示push成功:

10.刪除本機(jī)鏡像倉(cāng)庫(kù)中的鏡像,一開(kāi)始我想到在本機(jī)文件夾中直接刪除的方法,但是有弊端:
打開(kāi)本機(jī)的 E:\registry\docker\registry\v2\repositories 文件路徑,刪除這個(gè) registry文件夾;
同理再打開(kāi) E:\registry\docker\registry\v2\blobs 文件路徑,刪除 sha256文件夾:


再用方法1驗(yàn)證:

看上去似乎刪除成功,但是事實(shí)并不是,因?yàn)楫?dāng)我們?cè)賞ush一次的時(shí)候會(huì)發(fā)現(xiàn)本機(jī)私有鏡像庫(kù)中已經(jīng)存在了,由此可知?jiǎng)h除并沒(méi)有成功:

于是我想到最直接的方法就是去到容器中,查看具體的鏡像庫(kù)存放位置中,到底還存在鏡像不,結(jié)果發(fā)現(xiàn)了神奇的事情:




當(dāng)我通過(guò) ls 命令 和 cd 命令 一步步探索到 registry容器中的 /var/lib/registry/docker/registry/v2/repositories 路徑時(shí),發(fā)現(xiàn)了利用上面方法刪除的鏡像,依舊完好無(wú)損的存在于此處;也就是說(shuō)刪除無(wú)效;
于是我又去看了 registry容器的配置文件:


看不出所以然,通過(guò)上網(wǎng)查閱資料得知:這是因?yàn)?strong>
registry容器的delete功能默認(rèn)是不啟動(dòng)的,
我覺(jué)得禁止刪除功能,應(yīng)該是為了安全因素的考慮吧。
但在好奇心的驅(qū)使下,我又去查閱資料,發(fā)現(xiàn)網(wǎng)上提供了一種修改配置文件的方法,可以啟動(dòng)刪除功能,如下:

這里我就不實(shí)踐了,網(wǎng)上還提供了另一種更安全的方法:
就是來(lái)到registry容器中的 /var/lib/registry/docker/registry/v2/repositories 路徑,直接刪除掉你想要?jiǎng)h除的鏡像即可:



或者更簡(jiǎn)單的是
1.直接在cmd執(zhí)行以下命令:
docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<鏡像名>
通過(guò) ls命令 查看,發(fā)現(xiàn)文件夾下已經(jīng)空,即刪除成功,可執(zhí)行 exit命令 退出容器:(疑問(wèn):不需要?jiǎng)h除blobs下的文件嗎?猜測(cè)這個(gè)blobs也許是臨時(shí)數(shù)據(jù))

2.然后還需要執(zhí)行垃圾回收操作:
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
結(jié)果反饋:

看到這個(gè)反饋中的3個(gè)0,總感覺(jué)這次可能沒(méi)有刪除成功。
然后我再push,發(fā)現(xiàn)還是存在,然而在多次實(shí)踐后,卻發(fā)現(xiàn)偶爾有一次是成功的:


所以我推測(cè),是因?yàn)檫@個(gè)垃圾回收操作一般是不會(huì)立刻執(zhí)行的,可能是需要一段時(shí)間后才能保證真正清除掉緩存數(shù)據(jù),這個(gè)垃圾回收機(jī)制可能和blobs這個(gè)文件夾有關(guān)系。
驗(yàn)證:
于是我再刪除鏡像文件之后,等了10幾分鐘后,再去執(zhí)行這個(gè)垃圾回收操作,發(fā)現(xiàn)有了新的反饋:

感覺(jué)有希望了,然而當(dāng)我再次去push的時(shí)候,依舊是說(shuō)已存在:

百般嘗試之后,我突然想到了傳說(shuō)中那個(gè)能解決99%問(wèn)題的方法:重啟。
于是我在執(zhí)行垃圾回收操作命令之后,執(zhí)行了 restart命令,重啟后再push,發(fā)現(xiàn)可以了,多次嘗試都可以成功刪除,至此終于解決了這個(gè)刪除鏡像的問(wèn)題:

總結(jié):
- 沒(méi)事就還是不要?jiǎng)h鏡像吧,太折騰了。
- 刪除步驟為:
10.2.1:打開(kāi)本機(jī) E:\registry\docker\registry\v2\repositories 文件路徑,刪除你想要?jiǎng)h除的鏡像文件。


10.2.2:cmd中,執(zhí)行垃圾回收操作命令:
docker exec b0533d3f7f8e bin/registry garbage-collect /etc/docker/registry/config.yml

10.2.3:重啟 registry容器
docker restart registry容器的id

10.2.4:再次push上傳本地docker庫(kù)鏡像
docker push 192.168.2.120:5000/minio

11.服務(wù)器間的鏡像倉(cāng)庫(kù)地址訪問(wèn):
如:A服務(wù)器(本機(jī))地址:192.168.2.120:5000
B服務(wù)器地址:192.168.2.220:5000
要在 A 中訪問(wèn) B 鏡像倉(cāng)庫(kù)地址,實(shí)現(xiàn)從B的倉(cāng)庫(kù)中拉取鏡像:
11.1 首先要在本機(jī)(A)的docker配置中,添加(B)鏡像倉(cāng)庫(kù)地址:

11.2 然后 啟動(dòng)/重啟 本機(jī)(A)的docker desktop。
11.3 事先在B服務(wù)器上創(chuàng)建好B的鏡像倉(cāng)庫(kù),并創(chuàng)建以 B的ip:5000/ 開(kāi)頭的鏡像,并push到b的鏡像倉(cāng)庫(kù)地址中:


11.4 在本機(jī)(A)中打開(kāi)瀏覽器查看 B 的鏡像庫(kù)中的信息,可以看到B庫(kù)中只有一個(gè)剛剛push的minio鏡像,同時(shí)說(shuō)明訪問(wèn)成功:

11.5 在本機(jī)(A)中拉取 B庫(kù)鏡像,輸入:
docker pull
下載中:

下載完成:

注意:這里是下載到本機(jī)(A)的docker倉(cāng)庫(kù),如果需要存放在本機(jī)私有鏡像倉(cāng)庫(kù),就需要和上面相同的方法,創(chuàng)建新的鏡像并push即可,如下:


總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker一鍵部署springcloud項(xiàng)目的方法
本文主要介紹了Docker一鍵部署springcloud項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
docker安裝并持久化postgresql數(shù)據(jù)庫(kù)的操作步驟
這篇文章主要介紹了docker安裝并持久化postgresql數(shù)據(jù)庫(kù)的操作步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Docker部署Java應(yīng)用程序的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署Java應(yīng)用程序的實(shí)現(xiàn)步驟,通過(guò)將Java應(yīng)用程序打包成一個(gè)Docker鏡像,可以實(shí)現(xiàn)快速部署、資源隔離和靈活擴(kuò)展,感興趣的可以了解一下2024-03-03
docker for windonws之Windows 10 家庭中文版安裝cl
這篇文章主要介紹了docker for windonws之Windows 10 家庭中文版安裝clickhouse 22.3版本及配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
3分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器
幻獸帕魯已經(jīng)正式開(kāi)服,目前在線人數(shù)已經(jīng)超過(guò)7W+,很多玩家想自己創(chuàng)建服務(wù)器和朋友一起聯(lián)機(jī)游玩,本文主要介紹了3分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

