鏡像就是一個容器的只讀模板幌缝,用來創(chuàng)建容器霎终。當(dāng)運(yùn)行容器時(shí)需要指定鏡像滞磺,如果本地沒有該鏡像,則會從Docker Registry下載莱褒。默認(rèn)查找的是Docker Hub击困。
鏡像存儲中的核心概念倉庫(Repository)是鏡像存儲的位置。Docker 注冊服務(wù)器(Registry)是倉庫存儲的位置。每個倉庫包含不同的鏡像阅茶。
比如一個鏡像名稱 ubuntu:14.04蛛枚,冒號前面的ubuntu是倉庫名,后面的14.04是TAG脸哀,不同的TAG可以對應(yīng)相同的鏡像蹦浦,TAG通常設(shè)置為鏡像的版本號。
Docker Hub 是Docker官方提供公共倉庫撞蜂,提供大量的常用鏡像盲镶,由于國內(nèi)網(wǎng)絡(luò)原因經(jīng)常連接Docker Hub會比較慢,所以我們也可以選擇一些國內(nèi)提供類似Docker Hub鏡像服務(wù)站點(diǎn)蝌诡。
我們也可以在Docker Hub上創(chuàng)建一個賬戶溉贿,用來保存所需的鏡像,但是在國內(nèi)使用實(shí)在是太慢了浦旱。這里簡單介紹下Docker中使用命令登陸Docker Hub保存鏡像的方式:
- 首先在Docker Hub注冊一個賬號:注冊鏈接
- 然后可以基于Docker Hub上現(xiàn)有的鏡像創(chuàng)建一個鏡像
- 在本地完成修改后使用docker push命令推送到Docker Hub上
采用私有倉庫管理鏡像
很多場景下都需要私有倉庫管理Docker鏡像宇色。相比Docker Hub,私有倉庫有以下優(yōu)勢:
- 節(jié)省帶寬
- 更加安全
- 便于內(nèi)部鏡像的統(tǒng)一管理
這里采用 Docker Registry 2.0 搭建一個私有倉庫。
Docker Registry 2.0 的搭建非常簡單闽寡,只需要執(zhí)行以下命令即可新建并啟動一個Docker Registry 2.0 代兵。
$ docker run -d --restart=always \
--name myregistry -p 5005:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
–restart=always 此模式容器會跟 docker daemon會隨著docker服務(wù)的重啟而自動恢復(fù)
-v /opt/data/registry:/var/lib/registry 把本地磁盤掛載到容器磁盤/var/lib/registry(默認(rèn)情況下倉庫存放鏡像于容器內(nèi)的/var/lib/registry目錄下)
–name myregistry 定義容器名
-p 5005:5000 端口映射,本地端口5005映射到容器端口5000
私有倉庫之前是部署在局域網(wǎng)的一臺電腦上爷狈,IP是192.168.10.224
在瀏覽器中輸入:http://192.168.10.224:5005/v2/ 即可查詢到私有庫是否就緒植影。
測試下登錄,由于沒有設(shè)置驗(yàn)證涎永,賬號密碼隨便輸入即可
$ docker login 192.168.10.224:5005
$ Username: daijinming
$ Password:
Error response from daemon: Get https://192.168.10.224:5005/v2/: http: server gave HTTP response to HTTPS client
這個問題可能是由于客戶端采用https思币,docker registry未采用https服務(wù)所致。一種處理方式是把客戶對地址“192.168.10.224:5005”請求改為http羡微。
解決方法:
在”/etc/docker/“目錄下谷饿,創(chuàng)建”daemon.json“文件。在文件中寫入:
{ "insecure-registries":["192.168.10.224:5005"] }
保存退出后妈倔,重啟docker博投。問題解決。
現(xiàn)在我在開發(fā)機(jī)器上將我之前構(gòu)建的Docker鏡像提交到私有鏡像庫中盯蝴。
REPOSITORY TAG IMAGE ID CREATED SIZE
djm/dotnet latest bd5095040e81 4 days ago 1.73GB
編寫推送命令
$ docker pull 192.168.10.224:5005/djm/dotnet:latest
Error response from daemon: manifest for 192.168.10.224:5005/djm/dotnet:latest not found
Docker Hub 是默認(rèn)的Docker Registry,所以djm/dotnet:latest相當(dāng)于 docker.io/djm/dotnet:latest
毅哗。因此要想將鏡像推送到私有倉庫,需要修改標(biāo)簽鏡像捧挺,命令如下
$ docker tag djm/dotnet:latest 192.168.10.224:5005/djm/dotnet:latest
修改后的本地鏡像,IMAGE ID 是一樣的虑绵。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.10.224:5005/djm/dotnet latest bd5095040e81 4 days ago 1.73GB
djm/dotnet latest bd5095040e81 4 days ago 1.73GB
推送鏡像到私有庫
$ docker push 192.168.10.224:5005/djm/dotnet:latest
The push refers to repository [192.168.10.224:5005/djm/dotnet]
a55ba602cef7: Pushed
0717f369399b: Pushing [================> ] 366.3MB/1.082GB
e48dc2fc7a30: Pushing [=======================================> ] 269.6MB/340.1MB
0ac1f6545215: Pushed
ab016c9ea8f8: Pushed
2eb1c9bfc5ea: Pushed
0b703c74a09c: Pushed
b28ef0b6fef8: Pushed
查詢私有鏡像庫中的鏡像,在瀏覽器中輸入: