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"]}
也可以在浏览器中访问上述地址查看