溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

DockerHub私有倉庫創(chuàng)建

發(fā)布時(shí)間:2020-07-15 18:56:44 來源:網(wǎng)絡(luò) 閱讀:1372 作者:Night和Drink 欄目:云計(jì)算

Docker倉庫實(shí)際上提供兩方面的功能,一個(gè)是鏡像管理,一個(gè)是認(rèn)證。
前者主要由docker-registry項(xiàng)目來實(shí)現(xiàn),通過http服務(wù)來上傳下載;后者可以通過docker-index項(xiàng)目或者利用現(xiàn)成認(rèn)證方案實(shí)現(xiàn)http請求管理。

使用官方倉庫:簡單,但是速度慢

登陸dockerhub官網(wǎng)創(chuàng)建用戶并登陸既可使用官方提供的dockerhub空間,增加自己的userID作為上傳的根目錄實(shí)現(xiàn)images的版本控制
https://hub.docker.com/
http://note.youdao.com/noteshare?id=54dad70770ed572d8ba05e35f05104d2&sub=A354A2FC89EB4F1C81302EF5A186FB8F
創(chuàng)建后在dockers服務(wù)器上使用docker login進(jìn)行登陸,登陸后即可進(jìn)行倉庫的上傳下載動(dòng)作

本地自建倉庫:復(fù)雜,速度快,安全

1、使用官方鏡像創(chuàng)建
配置文件

官方鏡像開出的registry也是一個(gè)容器,如果不指定鏡像存儲位置為一個(gè)宿主機(jī)的磁盤位置的話可能會(huì)導(dǎo)致鏡像丟失,所以需要用-v參數(shù)掛載本地的存儲上去
docker run -d -p 5000:5000 -v /data/docker_images:/tmp registry:0.9.1
##標(biāo)紅部分可以自己指定宿主機(jī)的一個(gè)存儲位置
這種方式創(chuàng)建較為簡單快捷

1)在安裝有docker服務(wù)的服務(wù)器上運(yùn)行:

docker run -d -p 5000:5000 -v /data/docker_images:/tmp registry:0.9.1

運(yùn)行結(jié)果如下:

2)docker ps (查看正在運(yùn)行中的docker容器)

3)由于第一步創(chuàng)建時(shí)沒有加--name參數(shù),所以容器創(chuàng)建會(huì)產(chǎn)生一個(gè)隨機(jī)name,為了管理方便對容器進(jìn)行重命名
docker rename keen_banach registry

4)查看容器對于的日志
docker logs registry(容器名或ID)

5)通過get訪問查看容器運(yùn)行是否正常

curl localhost:5000

相當(dāng)于瀏覽器直接訪問返回的結(jié)果(這部分返回值是由registry容器鏡像制作時(shí)dockerfile中引用決定的)

6)查看宿主機(jī)上的掛載位置:(新增了一個(gè)*.db文件)

ls /data/docker_images

內(nèi)容如下:(是一條sqlite的SQL語句)

7)在本地測試上傳一個(gè)鏡像:
#docker images (查看本地的鏡像文件)

#docker tag rancher/agent:v1.2.11 10.234.2.182:5000/rancher-agent:v1(對其中一個(gè)鏡像重命名)

一頓操作,完全失敗,無法上傳,報(bào)錯(cuò)404
最終確診是由于docker 1.3版本以后默認(rèn)已經(jīng)支持到了registry v2 版本,而v2版本會(huì)涉及到https和鑒權(quán),所以按照原來的路徑push的話始終無法完成上傳的動(dòng)作;

v2版本的dir路徑:/var/lib/registry

v1版本的dir路徑:/tmp/registry

解決方法
或者docker降級,或者registry升級到v2版本,并且重新配置,v2版本相交于v1更加合理,但是配置也更加繁瑣
8)最終解決方式使用registry v2版本代替

docker run -d -p 5000:5000 --name registry registry:latest

9)上傳鏡像

docker push 132.232.204.252:5000/rancher-agent

客戶端和服務(wù)端上傳均會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息:
The push refers to repository [132.232.204.252:5000/rancher-agent]
Get https://132.232.204.252:5000/v2/: http: server gave HTTP response to HTTPS client
大致意思就是客戶端用https的請求服務(wù)端返回了http的返回
因?yàn)镈ocker從1.3.X之后,與docker registry交互默認(rèn)使用的是https,然而此處搭建的私有倉庫只提供http服務(wù),所以當(dāng)與私有倉庫交互時(shí)就會(huì)報(bào)https錯(cuò)誤。為了解決這個(gè)問題需要在啟動(dòng)docker server時(shí)增加啟動(dòng)參數(shù)為默認(rèn)使用http訪問。
解決方法有兩種思路:
一、本地配置信任
修改docker.service文件中的start啟動(dòng)項(xiàng)
路徑一般為:/usr/lib/systemd/system/
vim /usr/lib/systemd/system/docker.service

ExexStart=/usr/bin/dockerd -H unix:// 在改行后增加需要信任的服務(wù)端地址
--insecure-registry 127.0.0.1:5000 --insecure-registry 132.232.204.252:5000

修改后需要重新加載deamon
重啟docker服務(wù)
#systemctl daemon-reload
#systemctl restart docker.service
查看docker info 修改前后對比增加了信任的注冊registries

再進(jìn)行上傳即可成功

查看倉庫web中也新增了鏡像

二、在服務(wù)端配置nginx代理,增加證書

============================================================================
docker-registry版本發(fā)展
1、2013年3月13日
docker在github上有了第一個(gè)release[3]
2、2013年7月3日
docker在github上發(fā)布了docker registry v1[4]
3、2015年1月30日
docker registry v2(項(xiàng)目名叫docker distribution)有了第一個(gè)release,同時(shí)停止更新docker registry v1[5]
4、2015年4月16日
docker發(fā)布docker1.6,同時(shí)正式推廣docker registry v2
在使用docker registry v2的時(shí)候需要注意,只有docker1.6以上版本才支持registry v2,但是docker是向前兼容的,我們從源代碼里可以看出,docker engine在下載鏡像的時(shí)候,會(huì)先判斷遠(yuǎn)端倉庫是v1還是v2版,從而使用不同的下載策略,這個(gè)策略可太重要了

坑點(diǎn):
1、docker的發(fā)展有兩部分,一是在2017年3月之前docker一直使用的版本命名方式是docker1.xx,這種方式的最后一個(gè)版本是docker1.13.1版本,在2017年3月,改用年分命名方式,第一版docker17.03,docker版本和redistry的結(jié)合部分在docker1.3版本發(fā)生一些變化,因?yàn)閞egistry v2版本的出現(xiàn)
2、registry 建議直接使用v2版本,0.9.1是最后一個(gè)v1版本,雖然docker有向前兼容性,但是registry的v1和v2項(xiàng)目是完全不同的兩個(gè)項(xiàng)目,并且不具有兼容性

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI