1、docker私有倉庫的搭建
在 Docker 中,當我們執行 docker pull xxx 的時候,實際上是從 registry.hub.docker.com 這個地址去查找,這就是Docker公司爲我們提供的公共倉庫,上面的鏡像,大家都可以看到,也可以使用。例如:docker pull registry.hub.docker.com/library/alpine。當然我們也可以搭建自己的私有倉庫。
搭建Docker私有倉庫的方法有多種,如docker registry、nexus、harbor都可以搭建私有倉庫。其中用docker命令拉取docker registry,將docker的倉庫鏡像拉取到本地,在本地構建一個docker倉庫,這種方法要自己對倉庫進行權限管理,沒有圖形化頁面操作,命令操作比較繁瑣,另外在dockertoolbox下搭建私有鏡像庫出現的問題比較多,建議還是安裝linux系統進行搭建。nexus,harbor,docker-compose可以進行圖形化頁面倉庫以及圖形化權限管理,harbor也集成了mysql和log。下面以harbor和docker-compose爲例。
2、所需環境
- docker
- docker-compose :https://github.com/docker/compose/releases
- openssl(可選): https授權證書。非生產環境可僅配置http。
- harbor:
官方地址:https://github.com/goharbor/harbor/releases
官方說明文檔:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
證書文檔:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
3、下載harbor並解壓
下載tgz包並解壓
tar zxf harbor-offline-installer-v1.9.1.tgz
其中harbor.yml就是配置文件
4、安裝harbor
(1)修改hostname(主機)和port(端口)等
該配置文件除了主機和端口還包括賬號、密碼、數據庫等等的設置。
注:修改配置文件後重啓:
docker-compose down
./prepare
docker-compose up –d
(2)準備安裝包
./prepare
(3)正式安裝
./install.sh
5、通過瀏覽器訪問
這時候就可以訪問服務器地址(注意要帶上端口)登錄harbor管理界面了,默認賬號和密碼是admin和Harbor12345,在harbor.yml中也有寫明。其中有一個默認叫library的公開項目。
創建項目
注:也可通過修改/etc/host目錄來對hostname域名進行映射
6、推送鏡像到harbor
(1)登錄harbor
(a)在/etc/docker/daemon.json添加私庫地址
harbor默認使用https,如果要使用http,則需要修改/etc/docker/daemon.json文件。因此在登錄harbor之前需要在/etc/docker/daemon.json添加私庫地址
(b)添加http允許權限
查看docker.service文件位置:
systemctl status docker
修改docker.service
重啓docker:
systemctl restart docker
注:登錄失敗
(a)Error response from daemon: Get https://192.168.152.128:5000/v2/: http: server gave HTTP response to HTTPS client
在/etc/docker/daemon.json添加私庫地址
(b)Error response from daemon: Get http://192.168.152.128:5000/v2/: dial tcp 192.168.152.128:5000: connect: connection refused
如果在修改/etc/docker/daemon.json和/lib/systemd/docker.service文件後還是出現拒絕連接則重啓haobor即可:
docker-compose up –d
另:退出登錄:docker logout [hostname]
(2)推送鏡像到haobor
(a)製作鏡像
docker tag [images]:[tag] [harbor ip]:[port]/[library]/[images]:[tag]
例:
docker tag nginx_1:v1 192.168.152.128:5000/mylib/nginx_1:v1
注:一定要將鏡像的peoository命名爲[harbor ip]:[port]/[library]/[images]:[tag]
(b)推送鏡像
docker push [harbor ip]:[port]/[library]/[images]:[tag]
例:
docker push 192.168.152.128:5000/mylib/nginx_1:v1
注:denied: requested access to the resource is denied
出現此錯誤的原因之一是鏡像的peoository有問題,其格式應該爲:
[harbor ip]:[port]/[library]/[images]:[tag]
修改鏡像格式爲對應格式即可:
docker tag [images]:[tag] [harbor ip]:[port]/[library]/[images]:[tag]
(3)查看鏡像
在推送完鏡像後此時在鏡像倉庫中就可以看到了。
(4)從harbor拉取鏡像
docker pull [harbor]:[5000]/[library][images]:[tag]
例:
docker pull 192.168.152.128:5000/mylib/nginx_1:v1