微服务之docker本地仓库搭建过程

倾然丶 夕夏残阳落幕 提交于 2020-02-27 21:53:19

引言

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的镜像是存放在镜像仓库的,镜像仓库有开源的,叫Docker Hub,我们也可以上传自己的私有镜像到Docker hub ,虽然我们有自己的私有repository,但有些镜像是需要收费的。因此我们有必要搭建自己的私有仓库地址。

私有仓库地址需要一个叫Registry的东东,这个东西目前也被官网开源了,我们可以直接从Docker hub上拉取下来,放到本地,然后做一些操作,做一些修改达到私有仓库的目的。

一、部署Registry

运行容器拉取命令 docker pull registry

将会看到如上图标红所示的registry,已经拉取的本地了,并且默认仓库地址为:docker.io 也就是官网仓库地址。

二、运行容器

执行运行容器命令  docker run -d -p 5000:5000 -v /opt/apps/myregistry:/var/lib/registry/ docker.io/registry

运行registry镜像,得到如上图标红效果,表示registry已经成功运行起来

命令参数解释:

-d 是后台启动容器。

-p 将容器的 5000 端口映射到 Host 的 5000 端口,5000 是 registry 服务端口。

-v 将容器 /var/lib/registry 目录映射到 Host 的 /opt/apps/registry:,用于存放镜像数据。

上传的镜像数据保存在如下所示的贴图目录下面:
 

我们可以访问一下改地址:

http://192.168.1.101:5000/v2/_catalog , 我们可以看到现在本地仓库中已经有的几个镜像包了。

三、举例说明

经过上述几个步骤,我们已经成功将本地host仓库建好,那么我们应该如何才能将打包好的镜像文件推送到本地仓库呢?下面我们就拿一个例子说明一下,

简单演示一下如何将新构建的docker镜像文件推送到本地仓库。

如上图,我们就拿之前创建的docker.io/busybox为例,现在我们重新构建一个版本

执行命令  docker tag docker.io/busybox 127.0.0.1:5000/busybox:1.1  得到如下贴图:

说明:

执行上述命令之后,说明已经将busybox重新改名了,改成busybox:1.1,这样是为了区分原先的busybox

需要注意的是镜像命名有个规则:

[registry-host]:[port]/[username]/tag

registry-host:表示镜像仓库地址

username:表示自定义用户名

tag:则表示该镜像标签

比如:docker.io/busybox  则默认镜像仓库地址当然就表示官网了,本地的则就是127.0.0.1:5000

此时执行 docker push 127.0.0.1:5000/busybox:1.1 将该镜像推送到本地仓库中,得到如下图所示的结果:

说明之前已经在本地仓库中存在此镜像了

下面简单介绍一下,如何将已经存在的本地仓库镜像文件删除

通过 curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET http://192.168.1.101:5000/v2/busybox/manifests/latest 拿到镜像对应sha256值

然后执行 curl -I -XDELETE 私有仓库地址/v2/镜像名称/manifests/镜像对应sha256值

得到的是上述结果,删除失败,这也是目前我遇到的问题,没找到是啥原因,也请有志同道合的朋友欢迎提提意见。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!