Docker Registry是Dockers鏡像的存儲和管理中心蛉拙,在一個離線或沒有外網(wǎng)網(wǎng)絡的環(huán)境下使用大量docker鏡像,需要提供一個鏡像倉庫時需要怎么操作比較合適呢?
Registry可以通過push的方式上傳鏡像到倉庫中蚕断,默認將上傳的鏡像數(shù)據(jù)保存在/var/lib/registry目錄。那么在離線時我們可以將regsitry本身的鏡像save成tar包入挣,將/var/lib/registry數(shù)據(jù)目錄也打包成tar包亿乳,然后在目標機器上通過volume的形式掛載運行即可提供服務。
具體的實現(xiàn)步驟如下:
前置說明:
擬定有兩臺已經(jīng)安裝了Docker的機器A和B径筏,A機器所在網(wǎng)絡能夠訪問公網(wǎng)葛假,B機器所在網(wǎng)絡不能訪問公網(wǎng)。
這樣為了模擬了部分企業(yè)網(wǎng)絡隔離的場景滋恬。
A機器準備數(shù)據(jù)
下載docker registry鏡像
在有A機器上下載registry的docker鏡像
docker pull docker.io/registry
可以直接在docker hub的官網(wǎng)下載最新版本聊训,也可以使用國內(nèi)的提供的免費的鏡像倉庫。例如
docker pull hub.c.163.com/library/registry:latest
創(chuàng)建docker鏡像存儲目錄
在A機器上創(chuàng)建一個保存docker鏡像overlay的本地目錄
mkdir -p /data/registry-data
添加http訪問權限
修改文件/etc/docker/daemon.json
恢氯,之后就可以使用http的方式registry带斑,默認是使用https的方式訪問。
{
"insecure-registries":["127.0.0.1:5000"],
"log-driver": "json-file",
"log-opt": {
"max-size": "100m",
"max-file": "5"
}
}
這里主要添加insecure-registries
配置即可勋拟,另外的兩條是對docker log的限制勋磕。
有多條時配置時,可以使用逗號,
分隔多個敢靡。
重啟docker服務
修改完/etc/docker/daemon.json后朋凉,需要重啟docker服務才能使配置生效。
systemctl restart docker
其他的系統(tǒng)分別使用不同的方法重啟醋安。
例如:
centos6/redhat6
service docker restart
或者部分環(huán)境可以使用如下方法重啟服務
/etc/init.d/docker restart
運行registry服務
在A機器上運行registry服務并將/data/registry-data目錄掛載到容器內(nèi)/var/lib/registry目錄中
docker run
-d --name=registry \
-v /registry-data:/var/lib/registry \
-p 5000:5000 docker.io/registry
修改本地鏡像tag
docker鏡像上傳時需要指定倉庫名稱和鏡像名稱
docker tag docker.io/centos 127.0.0.1:5000/centos
這里的例子將鏡像的倉庫名稱寫成127.0.0.1:5000
,也可以根據(jù)環(huán)境信息配置墓毒,建議使用域名的方式管理鏡像吓揪。
上傳鏡像到本地的registry倉庫中
在A機器上將需要的鏡像都push到該registry中,
docker push 127.0.0.1:5000/centos
這里只提供了一個centos的鏡像下載和上傳的方法所计,類推可以將需要的鏡像都上傳到本地registry中柠辞。
打包registry鏡像
在A機器上打包registry鏡像
docker save -o registry.tar docker.io/registry
由于B 機器上可能沒有registry倉庫本身的鏡像,這里可以將registry的鏡像save成tar包主胧。
打包/data/registry-data目錄
在A機器上打包/data/registry-data目錄
tar czvf registry-images-data.tar.gz /data/registry-data
移動數(shù)據(jù)
將registry.tar 和 registry-images-data.tar.gz 兩個文件復制到B機器上叭首。
復制的方法可以有多種 习勤,比如scp/ftp/U盤/等方式;
建議在復制前先使用md5sum/sha256計算一個校驗值焙格,在目標機器再次校驗一次图毕,確保文件在傳輸過程中沒有異常。
B 機器建立離線registry
修改B機器上docker配置文件添加http訪問權限
修改文件/etc/docker/daemon.json
眷唉,之后就可以使用http的方式registry予颤,默認是使用https的方式訪問。
{
"insecure-registries":["127.0.0.1:5000"],
"log-driver": "json-file",
"log-opt": {
"max-size": "100m",
"max-file": "5"
}
}
這里主要添加insecure-registries
配置即可冬阳,另外的兩條是對docker log的限制蛤虐。
有多條時配置時肝陪,可以使用逗號,
分隔多個。
重啟docker服務
修改完/etc/docker/daemon.json后饲常,需要重啟docker服務才能使配置生效不皆。
systemctl restart docker
其他的系統(tǒng)分別使用不同的方法重啟熊楼。
例如:
centos6/redhat6
service docker restart
或者部分環(huán)境可以使用如下方法重啟服務
/etc/init.d/docker restart
導入registry鏡像
在B機器上導入registry的鏡像
docker load -i registry.tar
鏡像registry的鏡像導入到本地的docker中
解壓鏡像數(shù)據(jù)
在B機器上解壓鏡像數(shù)據(jù)
tar xf registry-images-data.tar.gz -C /data/registry-data
這里的路徑建議配置一致鲫骗,如果路徑不一致可能導致啟動的registry無法找到正確的數(shù)據(jù)目錄。
運行registry容器
在B機器上運行registry
docker run \
-d --name=registry \
-v /data/registry-data:/var/lib/registry \
-p 5000:5000 docker.io/registry
驗證使用
在B機器所在 網(wǎng)絡中枕磁,根據(jù)要求修改tag术吝,通過docker pull
的方式從該registry中下載鏡像使用排苍。例如:
docker pull 127.0.0.1:5000/centos