docker私有倉庫設置

http://www.cnblogs.com/lienhua34/p/4922130.html

1. 關於Registry

官方的Docker hub是一個用於管理公共鏡像的好地方,我們可以在上面找到我們想要的鏡像,也可以把我們自己的鏡像推送上去。但是,有時候,我們的使用場景需要我們擁有一個私有的鏡像倉庫用於管理我們自己的鏡像。這個可以通過開源軟件Registry來達成目的。

 Registrygithub上有兩份代碼:老代碼庫新代碼庫。老代碼是採用python編寫的,存在pullpush的性能問題,出到0.9.1版本之後就標誌爲deprecated,不再繼續開發。從2.0版本開始就到在新代碼庫進行開發,新代碼庫是採用go語言編寫,修改了鏡像id的生成算法、registry上鏡像的保存結構,大大優化了pullpush鏡像的效率。

 官方在Docker hub上提供了registry的鏡像(詳情),我們可以直接使用該registry鏡像來構建一個容器,搭建我們自己的私有倉庫服務。Taglatestregistry鏡像是0.9.1版本的,我們直接採用2.1.1版本。

 2. Registry的部署

運行下面命令獲取registry鏡像,

$ sudo docker pull registry:2.1.1

然後啓動一個容器,

$ sudo docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.1.1

Registry服務默認會將上傳的鏡像保存在容器的/var/lib/registry,我們將主機的/opt/registry目錄掛載到該目錄,即可實現將鏡像保存到主機的/opt/registry目錄了。

 運行docker ps看一下容器情況,

lienhua34@lienhua34-Compaq-Presario-CQ35-Notebook-PC ~ $ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
f3766397a458        registry:2.1.1      "/bin/registry /etc/d"   46 seconds ago      Up 45 seconds       0.0.0.0:5000->5000/tcp   registry

說明我們已經啓動了registry服務,打開瀏覽器輸入http://127.0.0.1:5000/v2,出現下面情況說明registry運行正常,

 

3. 驗證

現在我們通過將鏡像pushregistry來驗證一下。

我的機器上有個hello-world的鏡像,我們要通過docker tag將該鏡像標誌爲要推送到私有倉庫,

$ sudo docker tag hello-world 127.0.0.1:5000/hello-world

然後查看以下本地的鏡像,

複製代碼
lienhua34@lienhua34-Compaq-Presario-CQ35-Notebook-PC ~ $ sudo docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry                     2.1.1               b91f745cd233        5 days ago          220.1 MB
ubuntu                       14.04               a5a467fddcb8        6 days ago          187.9 MB
hello-world                  latest              975b84d108f1        2 weeks ago         960 B
127.0.0.1:5000/hello-world   latest              975b84d108f1        2 weeks ago         960 B
複製代碼

接下來,我們運行docker pushhello-world鏡像push到我們的私有倉庫中,

lienhua34@lienhua34-Compaq-Presario-CQ35-Notebook-PC ~ $ sudo docker push 127.0.0.1:5000/hello-world
The push refers to a repository [127.0.0.1:5000/hello-world] (len: 1)
975b84d108f1: Image successfully pushed 
3f12c794407e: Image successfully pushed 
latest: digest: sha256:1c7adb1ac65df0bebb40cd4a84533f787148b102684b74cb27a1982967008e4b size: 2744

現在我們可以查看我們本地/opt/registry目錄下已經有了剛推送上來的hello-world。我們也在瀏覽器中輸入http://127.0.0.1:5000/v2/_catalog,如下圖所示,

 

現在我們可以先將我們本地的127.0.0.1:5000/hello-world和hello-world先刪除掉,

$ sudo docker rmi hello-world
$ sudo docker rmi 127.0.0.1:5000/hello-world

然後使用docker pull從我們的私有倉庫中獲取hello-world鏡像,

複製代碼
lienhua34@lienhua34-Compaq-Presario-CQ35-Notebook-PC ~ $ sudo docker pull 127.0.0.1:5000/hello-world
Using default tag: latest
latest: Pulling from hello-world
b901d36b6f2f: Pull complete 
0a6ba66e537a: Pull complete 
Digest: sha256:1c7adb1ac65df0bebb40cd4a84533f787148b102684b74cb27a1982967008e4b
Status: Downloaded newer image for 127.0.0.1:5000/hello-world:latest
lienhua34@lienhua34-Compaq-Presario-CQ35-Notebook-PC ~ $ sudo docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry                     2.1.1               b91f745cd233        5 days ago          220.1 MB
ubuntu                       14.04               a5a467fddcb8        6 days ago          187.9 MB
127.0.0.1:5000/hello-world   latest              0a6ba66e537a        2 weeks ago         960 B





http://www.cnblogs.com/hobinly/p/6110624.html

docker registry push錯誤“server gave HTTP response to HTTPS client”

系統環境:centos7

docker版本: 1.12.3(注意版本,可能存在不同版本設置不同的情況)

docker registry版本:2.4.1

問題:

成功安裝docker registry,在瀏覽器中輸入http://192.168.1.100:5000/v2,成功返回json數據。在push 到docker registry時,報:

[root@master sysconfig]# docker push 192.168.1.100:5000/registry:2.4.1
The push refers to a repository [192.168.1.100:5000/registry]
Get https://192.168.1.100:5000/v1/_ping: http: server gave HTTP response to HTTPS client

這個問題可能是由於客戶端採用https,docker registry未採用https服務所致。一種處理方式是把客戶對地址“192.168.1.100:5000”請求改爲http。

目前很多文章都是通過修改docker的配置文件“etc/systemconfig/docker",重啓docker來解決這個問題。但發現docker1.12.3版本並無此文件,根據網上創建此文件,並填入相應內容,重啓docker無效果,仍然報此錯誤。

 

解決方法:

在”/etc/docker/“目錄下,創建”daemon.json“文件。在文件中寫入:

{ "insecure-registries":["192.168.1.100:5000"] }

保存退出後,重啓docker。問題解決:

複製代碼
[root@master docker]# docker push 192.168.1.100:5000/registry:2.4.1
The push refers to a repository [192.168.1.100:5000/registry]
ee8e809cfde5: Pushed
ba20d499f984: Pushed
705e35f12f24: Pushed
42755cf4ee95: Pushed
2.4.1: digest: sha256:b66c4af9577744ae6d32e975808230e2ff558a5d50a7968d5102a900e147f3d5 size: 1158
複製代碼

 

window server 2016,默認安裝docker的配置文件在“C:\ProgramData\docker\config\”。可以在該目錄下創建”daemon.json“文件,解決此問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章