天天看點

建立docker私有倉庫

  本地倉庫域名:registry.cmh.cn

  本地倉庫:192.168.1.110

  docker用戶端:192.168.1.111

 下載下傳官方registry鏡像:

1

<code>#docker pull registry</code>

 建立registry倉庫容器:

2

3

4

5

<code>#mkdir -p /opt/data/registry</code>

<code>#docker run -idt -p 5000:5000 --name registry -v /opt/data/registry/:/tmp/registry registry</code>

<code>//</code><code>以上指令會建立一個名為registry的容器,并把容器中的5000端口映射到主控端的5000端口上,并把容器中的</code><code>/tmp/registry</code><code>目錄挂載到本地</code><code>/opt/data/registry</code><code>目錄。</code>

<code>#curl http://192.168.1.110:5000</code>

<code>"\"docker-registry server\""</code>

檢視目前已有的鏡像:

将centos:web鏡像tag為192.168.1.110:5000/centos_web,并嘗試上傳到本地倉庫192.168.1.110:5000。

<code>#docker tag 126c81c6ea66 192.168.1.110:5000/centos_web</code>

<code>#docker push 192.168.1.110:5000/centos_web</code>

提示報錯,這是由于從docker1.3.2版本開始,docker registry開始預設使用https方式通路,是以這裡必須配置ssl auth驗證。當然,也可以關閉https模式,使用簡單的不驗證模式,即insecure模式。

配置registry insecure模式:

在啟動時添加--insecure-registry參數,如下:

#vi /etc/init.d/docker

#service docker restart

修改普通模式後,push正常。

檢視私有倉庫中的鏡像,可以查到剛剛上傳的鏡像:

配置registry https模式,結合nginx:

1:首先,配置nginx的https功能,并指定本地倉庫的域名。

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<code># more /opt/apps_install/nginx/conf/vhost/docker.conf</code>

<code>upstream docker-registry {</code>

<code> </code><code>server 127.0.0.1:5000;</code>

<code>}</code>

<code> </code> 

<code>server {</code>

<code> </code><code>listen  443;</code>

<code> </code><code>server_name  registry.cmh.cn;</code>

<code> </code><code>ssl on;</code>

<code> </code><code>ssl_certificate     </code><code>/etc/ssl/certs/nginx</code><code>.crt;</code>

<code> </code><code>ssl_certificate_key </code><code>/etc/ssl/private/nginx</code><code>.key;</code>

<code> </code><code>proxy_set_header Host       $http_host;   </code><code># required for Docker client sake</code>

<code> </code><code>proxy_set_header X-Real-IP  $remote_addr; </code><code># pass on real client IP</code>

<code> </code><code>client_max_body_size 0; </code><code># disable any limits to avoid HTTP 413 for large image uploads</code>

<code> </code><code># required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486)</code>

<code> </code><code>chunked_transfer_encoding on;</code>

<code> </code><code>location / {</code>

<code>     </code><code># let Nginx know about our auth file</code>

<code>     </code><code>auth_basic              </code><code>"Restricted"</code><code>;</code>

<code>     </code><code>auth_basic_user_file    docker-registry.htpasswd;</code>

<code>     </code><code>proxy_pass http:</code><code>//docker-registry</code><code>;</code>

<code> </code><code>}</code>

<code> </code><code>location </code><code>/_ping</code> <code>{</code>

<code>     </code><code>auth_basic off;</code>

<code> </code><code>location </code><code>/v1/_ping</code> <code>{</code>

2:配置ssl證書,以及密碼檔案。

 生成根密鑰檔案:

<code>#cd /etc/pki/CA/</code>

<code>#openssl  genrsa -out private/cakey.pem 2048</code>

    生成根證書:

<code>#openssl  req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem</code>

  為nginx生成ssl密鑰,以及證書簽署請求:

<code>#cd /etc/ssl/</code>

<code>#openssl genrsa -out nginx.key 2048</code>

<code>#openssl  req -new -key nginx.key -out nginx.csr</code>

  私有CA根據請求來簽發證書:

<code> </code><code>#openssl ca -in nginx.csr -days 3650 -out nginx.crt</code>

把證書複制到nginx相關的驗證目錄:

<code># cp /etc/pki/tls/certs/ca-bundle.crt{,.bak}</code>

<code># cat /etc/pki/CA/cacert.pem &gt;&gt; /etc/pki/tls/certs/ca-bundle.crt</code>

<code># cp nginx.crt  /etc/ssl/certs/</code>

<code># cp nginx.key /etc/ssl/private</code>

建立驗證登陸的密碼檔案:

<code># yum -y install httpd-tools.x86_64</code>

<code># htpasswd -c /opt/apps_install/nginx/conf/docker-registry.htpasswd cmh</code>

<code>New password:</code>

<code>Re-</code><code>type</code> <code>new password:</code>

<code>Adding password </code><code>for</code> <code>user cmh</code>

 從本地docker登陸,嘗試push鏡像:

<code># docker login -u cmh -p 123456 -e [email protected] registry.cmh.cn</code>

<code># docker tag registry registry.cmh.cn/registry:v2</code>

<code># docker push registry.cmh.cn/registry:v2</code>

<code># curl -u cmh:123456 https://registry.cmh.cn/v1/search</code>

<code>{</code><code>"num_results"</code><code>: 2, </code><code>"query"</code><code>: </code><code>""</code><code>, </code><code>"results"</code><code>: [{</code><code>"description"</code><code>: </code><code>""</code><code>, </code><code>"name"</code><code>: </code><code>"library/centos_web"</code><code>}, {</code><code>"description"</code><code>: </code><code>""</code><code>, </code><code>"name"</code><code>: </code><code>"library/registry"</code><code>}]}</code>

可以看到倉庫中已經包含了新push的images:

<code>#curl  -u cmh:123456 https://registry.cmh.cn/v1/search</code>

從用戶端pull和push鏡像:

110:拷貝證書到用戶端

<code># scp /etc/pki/CA/cacert.pem [email protected]:/root</code>

111:

<code># cat cacert.pem &gt;&gt; /etc/pki/tls/certs/ca-bundle.crt</code>

<code># service docker start</code>

登陸,并從本地倉庫pull一個鏡像:

<code># docker login -u cmh -p 123456 -e [email protected] https://registry.cmh.cn</code>

<code># docker pull registry.cmh.cn/centos_web</code>

上傳一個tag過的鏡像到本地倉庫:

<code># docker tag registry.cmh.cn/centos_web registry.cmh.cn/centos_web2</code>

<code># docker push registry.cmh.cn/centos_web2</code>

本文轉自 icenycmh 51CTO部落格,原文連結:http://blog.51cto.com/icenycmh/1746833,如需轉載請自行聯系原作者

繼續閱讀