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 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"]}
也可以在瀏覽器中訪問上述地址查看