引言
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值
得到的是上述结果,删除失败,这也是目前我遇到的问题,没找到是啥原因,也请有志同道合的朋友欢迎提提意见。
来源:oschina
链接:https://my.oschina.net/yaukie/blog/3165074