Docker的Registry管理


layout: post
title: Docker的Registry管理
date: 2018-11-08 17:12:36
categories: Docker
catalog: true
tags:
- Docker Registry


回顧之前的筆記,給Registry的定義是:

Docker Registry 是一個集中存儲與分發鏡像的服務。構建完docker鏡像後,就可在當前宿主機上運行。但如果想要在其它機器上運行這個鏡像,就需要手動複製,此時可以藉助Docker Registry來避免鏡像的手動複製,其它人可以直接從 Registry 中將這個鏡像 pull 到自己的本機中。

Docker的架構圖:

Docker架構圖

Docker Registry可分爲公有與私有。最常用的Docker Registry就是官方的Docker Hub,這也是默認的Docker Registry。國內倉庫有:daocloud,時速去,aliyun等。

查找鏡像

[root@HJWDEV bin]# docker search whalesay
NAME                            DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
docker/whalesay                 An image for use in the Docker demo tutorial    644                                     
mendlik/docker-whalesay         Docker whalesay image from training material…   7                                       [OK]
nikovirtala/whalesay            Tiny Go web service to print Moby Dock ASCII…   1                                       [OK]
milanfort/whalesay              Modified docker/whalesay image that outputs …   1                                       
swinton/whalesay                whalesay, innit                                 1 

上述命令在Docker Hub 倉庫中查找 whalesay 鏡像。下面列出了在倉庫中查詢到的所有鏡像信息如名字,描述,星,是否官方等。一般官方的星是最多的。

拉取鏡像

[root@HJWDEV bin]# docker pull docker/whalesay

執行命令 docker 會把指定的鏡像拉取到我們本地,使用docker images 可以查看到是否獲取到鏡像。

可以運行一下:

[root@HJWDEV bin]# docker run docker/whalesay cowsay Docker is cool! 
 _________________ 
< Docker is cool! >
 ----------------- 
    \
     \
      \     
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/            
        \    \        __/             
          \____\______/  

推送鏡像

這裏就使用原先拉取下來的這個鏡像做測試,更改其tag後 push 到倉庫中

[root@HJWDEV bin]# docker tag docker/whalesay hjwjw/whalesay
[root@HJWDEV bin]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-docker        latest              be221a20a4d7        6 weeks ago         4.41MB
nginx-fun           latest              1d1aaf738af1        6 weeks ago         109MB
ubuntu              latest              cd6d8154f1e1        2 months ago        84.1MB
docker/whalesay     latest              6b362a9f73eb        3 years ago         247MB
hjwjw/whalesay      latest              6b362a9f73eb        3 years ago         247MB

可以看到產生了一個新的鏡像 hjwjw/whalesay

在推送新鏡像到倉庫前需要登陸,登陸賬號可以在 Docker Hub 上註冊

[root@HJWDEV bin]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username:

登陸成功後就可以進行推送了:

[root@HJWDEV bin]# docker push hjwjw/whalesay

推送成功後可以登陸 Docker Hub 查看。其它人可以查詢到並拉取到自己本地運行。

私有倉庫

上面說的都是在公有倉庫,相比Docker Hub 私有倉庫有以下優勢:

  • 節省帶寬,對於私有倉庫已有的鏡像無需再從Docker Hub 下載。
  • 更加安全
  • 便於內部鏡像的統一管理

下面使用Docker Registry 2.0搭建一個私有倉庫並上傳一個鏡像:

[root@HJWDEV ~]# docker run -d -p 5000:5000 --name registry2 registry:2

上述命令啓動一個Docker Registry 2.0 .

默認情況下,會將私有倉庫鏡像存放於容器內的/tmp/registry目錄下,這樣如果容器被刪除,則存放於容器中的鏡像也會丟失。
所以一般情況下會指定本地一個目錄掛載到容器內的/tmp/registry下,如下:

[root@localhost ~]# docker run -d --name=my_registry -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry:2.2
9fe45329bda17f61da04e6e8d2faf124fb22665a25270421bb8979a419809446

下面修改一個鏡像的tag 並把它推送到我們的私有倉庫中:

[root@HJWDEV ~]# docker tag nginx-fun localhost:5000/hjwjw/nginx-fun

因爲Docker Hub 是默認的Docker Registry,所以我們需要修改鏡像的 tag 才能推送到自己的私有倉庫。

[root@HJWDEV ~]# docker push localhost:5000/hjwjw/nginx-fun

推送成功後我們可以通過這個命令去查看 Docker registry 2中是否存在剛剛推送的鏡像。

[root@HJWDEV ~]# curl -X GET http://127.0.0.1:5000/v2/_catalog
{"repositories":["hjwjw/nginx-fun"]}

也可以在瀏覽器中訪問上述地址查看

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