Docker Registry搭建與使用詳解
有時候使用 Docker Hub 這樣的公共倉庫可能不方便,用戶可以創(chuàng)建一個本地倉庫供私人使用。
簡介
概念
Docker Registry 是一個無狀態(tài),高度可擴(kuò)展的服務(wù)器端應(yīng)用程序,它存儲并允許您分發(fā)Docker映像。
為什么使用
如果要執(zhí)行以下操作,則應(yīng)使用注冊表:
- 嚴(yán)格控制圖像的存儲位置
- 完全擁有您的圖像分發(fā)管道
- 像存儲和分發(fā)緊密集成到您的內(nèi)部開發(fā)工作流程中
Docker Registry搭建
啟動注冊表
docker run -d -p 5000:5000 --name registry registry:2
這將使用官方的 registry 鏡像來啟動私有倉庫。
默認(rèn)情況下,倉庫會被創(chuàng)建在容器的 /var/lib/registry 目錄下。
你可以通過 -v 參數(shù)來將鏡像文件存放在本地的指定路徑。
例如下面的例子將上傳的鏡像放到本地的 /usr/local/registry 目錄。
$ docker run -d \
-p 5000:5000 \
-v /usr/local/registry:/var/lib/registry \
registry如圖:

在私有倉庫上傳、搜索、下載鏡像
創(chuàng)建好私有倉庫之后,就可以使用 docker tag 來標(biāo)記一個鏡像,然后推送它到倉庫。例如私有倉庫地址為 127.0.0.1:5000
先在本機(jī)查看已有的鏡像
docker image ls
鏡像標(biāo)記
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]。

鏡像上傳
docker push 127.0.0.1:5000/鏡像文件
用 curl 查看倉庫中的鏡像。

這里可以看到 {“repositories”:[“test”]},表明鏡像已經(jīng)被成功上傳了。
使用Registry
接下來我們將本地的鏡像刪除掉,在從Registry下載
刪除
docker rmi 127.0.0.1:5000/test:v1.0

下載
通過上面的刪除我們本地已經(jīng)沒有了127.0.0.1:5000/test

Registry Web UI
來自大佬搭建過程,驗(yàn)證可用
搜索鏡像
docker search dockerfly
下載鏡像
根據(jù)鏡像使用排名(一般情況下拉取使用率最高的鏡像名),我這里使用的是阿里云鏡像地址
docker pull registry.cn-hangzhou.aliyuncs.com/voovan/dockerfly:20170227
打tag
查看鏡像是否拉取成功(鏡像名太長,打了tag)
docker tag registry.cn-hangzhou.aliyuncs.com/voovan/dockerfly:20170227 dockerfly
啟動鏡像(鏡像-容器-運(yùn)行)
docker run --name dockerfly --restart=always -d -v /var/run/docker.sock:/var/run/docker.sock -p 2735:2735 -p 28083:28083 dockerfly
瀏覽器訪問 http://dockerserviceip:28083
這是就可以看到我們所以鏡像的狀態(tài)

注意事項(xiàng)
如果你不想使用 127.0.0.1:5000 作為倉庫地址,比如想讓本網(wǎng)段的其他主機(jī)也能把鏡像推送到私有倉庫。你就得把例如 192.168.100.100:5000 這樣的內(nèi)網(wǎng)地址作為私有倉庫地址,這時你會發(fā)現(xiàn)無法成功推送鏡像。
這是因?yàn)?Docker 默認(rèn)不允許非 HTTPS 方式推送鏡像。我們可以通過 Docker 的配置選項(xiàng)來取消這個限制,或者查看下一節(jié)配置能夠通過 HTTPS 訪問的私有倉庫
Ubuntu 14.04, Debian 7 Wheezy
對于使用 upstart 的系統(tǒng)而言,編輯 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中增加如下內(nèi)容:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registries=192.168.199.100:5000"
重新啟動服務(wù)。
$ sudo service docker restart
Ubuntu 16.04+, Debian 8+, centos 7
對于使用 systemd 的系統(tǒng),請在 /etc/docker/daemon.json 中寫入如下內(nèi)容(如果文件不存在請新建該文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}注意:該文件必須符合 json 規(guī)范,否則 Docker 將不能啟動
其他
對于 Docker for Windows 、 Docker for Mac 在設(shè)置中編輯 daemon.json 增加和上邊一樣的字符串即可。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker啟動RabbitMQ實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者的詳細(xì)過程
這篇文章主要介紹了Docker啟動RabbitMQ,實(shí)現(xiàn)生產(chǎn)者與消費(fèi)者,通過Docker拉取鏡像并啟動RabbitMQ,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
docker映射端口穿透內(nèi)置防火墻的實(shí)現(xiàn)
在使用Docker部署項(xiàng)目時,即使未開啟CentOS7的Firewalld防火墻,端口仍可被外網(wǎng)訪問,這是因?yàn)镈ocker在安裝后會接管iptables,并自動添加規(guī)則以放行指定端口,解決方法包括依賴外置防火墻放行端口、指定端口監(jiān)聽地址為本機(jī)、禁用Docker的iptables規(guī)則修改2024-10-10
深入理解Docker Load和Docker Import的區(qū)別詳解
Docker是一個流行的容器化平臺,提供了豐富的命令和功能,其中docker load和docker import是兩個常用的命令,用于加載Docker鏡像,這篇文章主要給大家介紹了關(guān)于Docker Load和Docker Import區(qū)別的相關(guān)資料,需要的朋友可以參考下2024-03-03
Docker容器互相連接三種實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Docker容器互連三種實(shí)現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
Docker執(zhí)行(進(jìn)入)鏡像實(shí)踐
本文介紹了如何使用Docker命令查看、安裝、刪除鏡像,以及如何運(yùn)行鏡像并設(shè)置自動重啟,還詳細(xì)介紹了如何進(jìn)入Docker容器并進(jìn)行一些常見操作,如設(shè)置MySQL事務(wù)超時時間,最后,文章鼓勵大家參考并支持腳本之家2025-12-12

