使用registry搭建docker私服倉庫
默認情況下,我們拉取docker鏡像大多都是從 dockerhub 上拉取的,但有些時候有些鏡像是我們自己內部構建的,不想公開給別人使用,那麼這個時候就需要構建一個自己的鏡像私服了,而 docker 正好提供了,registry鏡像,正好可以用來構建自己的私服。
一、拉取 registry鏡像
docker pull registry
二、根據鏡像啓動一個容器
1、創建一個數據卷
docker volume create registry-huan
2、啓動容器
docker run -d -p 5000:5000 --restart=always -v registry-huan:/var/lib/registry --name registry-huan registry
-p 5000:5000
將容器內部的5000端口暴露給外部的5000端口--restart=always
表示遇到錯誤自動重啓--name
執行啓動後容器的名字-v registry-huan:/var/lib/registry
表示將容器內部的數據掛載到自己的數據卷registry-huan
中
三、隨機訪問一個私服的接口,看是否可以返回數據
http://47.101.130.164:5000/v2/_catalog
注意:
這個 repositories
中之所以會存在數據,是因爲我之前上傳一個 hello-world 的鏡像
四、推送一個鏡像到自己的私服中
1、拉取一個 hello-world 鏡像
docker pull hello-world
2、給這個鏡像打一個 tag
docker tag hello-world 47.101.130.164:5000/hello-world
注意:
1、47.101.130.164
這個爲我 registry 所在的機器的ip地址
2、5000
爲啓動 registry 對外暴露的端口
3、推送鏡像到自己的私服中
docker push 47.101.130.164:5000/hello-world
- 在這一步可能會報如下錯誤
- 解決方案如下
描述 | 操作 |
---|---|
1、在 vim /usr/lib/systemd/system/docker.service文件中增加如下配置 | --insecure-registry 47.101.130.164:5000 |
2、重新啓動docker | systemctl daemon-reload systemctl restart docker.service |
3、再次執行 docker push xxx 就會發現可以推送了 |
4、從私服中拉取鏡像
docker pull 47.101.130.164:5000/hello-world-new
五、注意事項
1、如果要推送到自己的私服中,那麼在給鏡像打tag時需要以 ip[域名]:端口
作爲前綴
2、如果推送鏡像失敗,可能需要修改 /usr/lib/systemd/system/docker.service
配置文件
3、47.101.130.164
爲我docker registry 所在的服務器的地址
4、本地操作使用docker的版本爲 19.03.1
[root@huan1993 ~]# docker -v
Docker version 19.03.1, build 74b1e89