构建私有Registry

当镜像的数量越来越多,镜像管理就变得非常有必要了。有时候我们需要设置一个本地的私人仓库来进行镜像的管理。

本关任务是学习创建和操作一个私人仓库,要求学习者参照示例完成“创建一个私人仓库,将busybox镜像推送到私人仓库,最后将busybox从私人仓库拉取下来。”。

相关知识

创建一个私人仓库

Docker Hub中提供了创建私人仓库的镜像Resposity(镜像仓库):Registry,本例将以Registry:2镜像为例,构建一个私人仓库。

docker run -d -p 5000:5000 --restart=always --name registry registry:2

只需要上面这一条命令,一个私人仓库就创建好了。从这条命令可以看出,这个私人仓库以容器的形式运行着。其中--restart=always是指在Docker服务重启或者registry容器退出时会重新启动。而-p是指将宿主机的5000端口映射到容器的5000端口,这样就可以通过宿主机ip:5000访问到容器的5000端口了。(registry容器默认会监听5000端口)。-d参数是指在后台运行。

当然还有其他的配置,例如-v指定私人仓库的存储位置,添加-v /mnt/registry:/var/lib/registry可以将私人仓库的存储位置设置为宿主机的/mnt/registry

更多更详细的配置可以参考: Registry | Docker Docs 。

私人仓库(容器)已经构建好了,那怎么将镜像推送到私人仓库或者将私人仓库拉取镜像呢?

将镜像推送到私人仓库
(1)使用docker tag 给镜像加上一个标签

如果想要将镜像推送到私人仓库而不是Docker Hub,首先必须使用docker tag命令,使用主机名和端口来标记一个镜像,如下所示,为ubuntu:latest镜像加上一个localhost:5000/my-ubuntu:latest的标签。

docker tag ubuntu:latest localhost:5000/my-ubuntu
(2)使用docker push将镜像推送到私人仓库

使用docker push命令可以将镜像推送到仓库,默认情况下会将镜像推送到官方仓库Docker Hub中去,但是如果推送一个“用主机名和端口来标记”的镜像,那么就会推送到私人仓库。

docker push localhost:5000/my-ubuntu
从私人仓库拉取一个镜像

除了推送以外,当然还可以从私人仓库拉取镜像,docker pull可以从仓库拉取某个镜像,默认情况下,也是从官方仓库拉取。当我想从私人仓库拉取my-ubuntu:latest镜像。执行以下命令就行了。

docker pull localhost:5000/my-ubuntu
查看或者删除私人仓库中的镜像

Docker提供的Registry镜像没有提供查看镜像和删除镜像的指令,但是有第三方的软件可以提供这些功能,例如:harbor

harbor提供一个可视化的界面来操作私人仓库,包括查看私人仓库中的镜像以及删除私人仓库中的镜像,除此以外,还有日志等非常有用的功能。

具体的安装与介绍请参照:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content. 。

删除私人仓库

私人仓库实质上就是一个容器,所以删除私人仓库就是删除私人仓库对应的容器。我们可以使用docker rm -f 强制删除删除它,但是这样删除之后,私人仓库中存储的镜像并不会被删除掉。如果你想在删除私人仓库的同时,也将镜像删除,需要添加-v参数,也就是docker rm -f -v。例如删除本地的私人仓库,可以执行以下语句:

docker rm -vf myregistry
#构建一个私人仓库
docker pull registry:2
docker run -d -p 5000:5000 --restart=always --name myregistry registry:2

#拉取busybox镜像
docker pull busybox

#1.使用docker tag给busybox加上一个标签localhost:5000/my-busybox:latest
#********** Begin *********#
docker tag busybox:latest localhost:5000/my-busybox:latest
#********** End **********#

#2.将localhost:5000/my-busybox:latest镜像推送到私人仓库
#********** Begin *********#
docker push localhost:5000/my-busybox:latest
#********** End **********#

#删除本地镜像
docker rmi localhost:5000/my-busybox:latest

#3.从私人仓库拉取localhost:5000/my-busybox:latest镜像
#********** Begin *********#
docker pull localhost:5000/my-busybox:latest
#********** End **********#

#删除私人仓库并将私人仓库中的镜像也删除掉
docker rm -vf myregistry

你可能感兴趣的:(docker,eureka,云原生)