Docker容器實(shí)戰(zhàn)之鏡像倉(cāng)庫(kù)
一. 鏡像倉(cāng)庫(kù)
Registry是Docker公司的一項(xiàng)創(chuàng)新,它提供了存放鏡像的倉(cāng)庫(kù)服務(wù)。在構(gòu)建好鏡像后,我們通常會(huì)將鏡像上傳到Registry服務(wù)器上進(jìn)行保存。這樣可以保證不會(huì)因本機(jī)故障而導(dǎo)致鏡像丟失,同時(shí),其他機(jī)器也能很方便地通過(guò)網(wǎng)絡(luò)方式下載。
Docker Hub即為Docker官方的Registry服務(wù)器,它的訪問(wèn)地址為 https://hub.docker.com 。我們總是習(xí)慣將Registry稱為倉(cāng)庫(kù),但事實(shí)上兩者并不完全等同。它們之間的關(guān)系如下圖所示,在Registry中可以有多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)存儲(chǔ)同名的鏡像,而鏡像之間通過(guò)Tag進(jìn)行版本區(qū)分。

Docker客戶端默認(rèn)使用Docker Hub拉取鏡像,在Docker Hub上有著數(shù)量眾多的倉(cāng)庫(kù),其中就有Docker官方提供的公共倉(cāng)庫(kù)。在官方倉(cāng)庫(kù)中存儲(chǔ)了海量的應(yīng)用鏡像,這些鏡像都是經(jīng)過(guò)官方的篩選和審查,具有較高的安全性,應(yīng)該作為生產(chǎn)使用的首選項(xiàng)。Docker Hub具有與GitHub相同的概念,Stars代表著鏡像受歡迎程度,通常優(yōu)先下載Stars數(shù)量多的鏡像。

除了使用官方倉(cāng)庫(kù),我們也可以在Docker Hub上面創(chuàng)建自己的個(gè)人倉(cāng)庫(kù),用于存放定制化的鏡像。
操作方法如下:
1. 賬號(hào)注冊(cè)
新用戶需要使用自己的郵箱地址注冊(cè)賬號(hào),點(diǎn)擊Register按鍵后開始注冊(cè)。

2. 創(chuàng)建倉(cāng)庫(kù)
使用賬號(hào)登錄系統(tǒng)后,我們就可以來(lái)創(chuàng)建自己的倉(cāng)庫(kù)。倉(cāng)庫(kù)分為兩類,一類為公共倉(cāng)庫(kù),一類為私有倉(cāng)庫(kù) ,公共倉(cāng)庫(kù)屬于開放性倉(cāng)庫(kù),用戶不需要任何驗(yàn)證即可下載鏡像,而私有倉(cāng)庫(kù)需要具有相關(guān)權(quán)限的賬號(hào)才能下載。免費(fèi)用戶目前在Docker Hub只能創(chuàng)建一個(gè)私有倉(cāng)庫(kù),公共倉(cāng)庫(kù)則沒有限制。
選擇“Repositories“菜單,然后點(diǎn)擊”Create Repository”創(chuàng)建用戶,此處創(chuàng)建一個(gè)公共倉(cāng)庫(kù),名稱為myapp,前面部分為我們的在Dcoker Hub的專屬名稱空間。

點(diǎn)擊“Create” 創(chuàng)建完成后,我們可以來(lái)試著上傳鏡像了。

二. 上傳鏡像
在前面構(gòu)建鏡像時(shí),我們配置了鏡像名稱,如:myapp:1.0。如果只在本機(jī)使用的話,對(duì)于名稱格式并沒有特別要求。但如果要將鏡像上傳或從倉(cāng)庫(kù)下載的話,那么必須使用如下的名稱格式 :
Registry Address/Namespace/Repository:Tag
- Registry Address:指向Registry服務(wù)器的地址 ,當(dāng)鏡像未設(shè)置該項(xiàng)時(shí),則默認(rèn)使用Docker Hub的地址。
- Namespace:Registry中唯一的空間地址,可以用于區(qū)分不同用戶或項(xiàng)目。默認(rèn)使用Docker官方的空間地址。
- Repository:倉(cāng)庫(kù)名稱,同一個(gè)應(yīng)用的鏡像倉(cāng)庫(kù)名相同,通過(guò)不同的tag來(lái)標(biāo)記。
- Tag:用于標(biāo)記不同的鏡像版本。
現(xiàn)在,我們按照上面的格式來(lái)修改前面創(chuàng)建的鏡像myapp:1.0,命令格式為:docker [image] tag +<Source_image:Tag> + <Target_image:Tag>。
$ docker tag myapp:1.0 alex990/myapp:1.0
注釋:由于Docker Hub地址為默認(rèn),故此處不需要增加,如果是其他第三方Registry,則需要在前面加上對(duì)應(yīng)的地址。
docker tag命令并不會(huì)對(duì)原有鏡像做修改,只會(huì)將新的tag 映射到該鏡像。我們可以看到,新鏡像的IMAGE ID與原鏡像的相同,證明都是屬于同一個(gè)鏡像文件。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE alex990/myapp 1.0 6c1160b01988 20 hours ago 43.2MB myapp 1.0 6c1160b01988 20 hours ago 43.2MB
運(yùn)行docker login,并按提示輸入Docker Hub注冊(cè)的賬號(hào)信息,完成驗(yàn)證。
$ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: alex990 Password: Login Succeeded
然后,我們通過(guò)docker [image] push 命令上傳鏡像到倉(cāng)庫(kù),如下:
$ docker push alex990/myapp:1.0 The push refers to repository [docker.io/alex990/myapp] 7a965a3a67a7: Mounted from linsr2018/myapp f604d2d04ecc: Mounted from linsr2018/myapp 9b999b9e5af8: Mounted from linsr2018/myapp 675233026df0: Mounted from linsr2018/myapp ddb2d7cdfff3: Mounted from linsr2018/myapp 1965cfbef2ab: Mounted from linsr2018/myapp 8d3ac3489996: Mounted from linsr2018/myapp 1.0: digest: sha256:04f75f3422e55affbdf7f14f0a2e5784d09d7774d9f7f695b412b065cdb484c3 size: 1782
上傳完成后,登錄Docker Hub可看到鏡像已存在。現(xiàn)在,我們可以到其他機(jī)器上進(jìn)行下載使用了。

到此這篇關(guān)于Docker容器實(shí)戰(zhàn)之鏡像倉(cāng)庫(kù)的文章就介紹到這了,更多相關(guān)Docker 鏡像倉(cāng)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker實(shí)踐--部署Nodejs應(yīng)用
本篇文章主要介紹了Docker實(shí)踐--部署Nodejs應(yīng)用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
docker start啟動(dòng)容器后仍然exit狀態(tài)的解決
這篇文章主要介紹了docker start啟動(dòng)容器后仍然exit狀態(tài)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
詳解Docker Compose 中可用的環(huán)境變量問(wèn)題
Compose 的多個(gè)部分在某種情況下處理環(huán)境變量。這篇文章主要介紹了Docker Compose 中可用的環(huán)境變量問(wèn)題,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式
這篇文章主要介紹了docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
Docker daemon 無(wú)法啟動(dòng): does not match with stored UUID錯(cuò)誤解決辦法
這篇文章主要介紹了Docker daemon 無(wú)法啟動(dòng): does not match with stored UUID錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11
Docker安裝配置Oracle詳細(xì)步驟記錄(以作持久化處理)
docker是一個(gè)用Go語(yǔ)言實(shí)現(xiàn)的開源項(xiàng)目,可以讓我們方便的創(chuàng)建和使用容器,下面這篇文章主要給大家介紹了關(guān)于Docker安裝配置Oracle詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下2024-03-03
Docker swarm如何通過(guò)docker-compose部署應(yīng)用
這篇文章主要介紹了Docker swarm如何通過(guò)docker-compose部署應(yīng)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Jenkins+Docker持續(xù)集成的實(shí)現(xiàn)
Jenkins是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開放易用的軟件平臺(tái),使軟件的持續(xù)集成變成可能。本文介紹了Jenkins Docker持續(xù)集成,分享給大家2021-05-05

