镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
一般而言,一个仓库包含的是同一个软件的不同版本的镜像,而标签则用于对应于软件的的不同版本。我们可以通过 <仓库名>:<标签>的格式来指定具体是哪个版本的镜像。如果不给出标签,将以 latest作为默认标签。
以 Ubuntu 镜像 为例,ubuntu是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。我们可以通过 ubuntu:14.04,或者 ubuntu:16.04来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。
仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry 的软件或服务。
公共仓库:
目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现。
用户无需登录即可通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。
根据是否是官方提供,可将镜像资源分为两类。 一种是类似 centos 这样的基础镜像,被称为基础或根镜像。这些基础镜像是由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。 还有一种类型,比如 tianon/centos 镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀。可以通过前缀 user_name/ 来指定使用某个用户提供的镜像。
下载官方 centos 镜像到本地:
$ sudo docker pull centos
私有仓库:
用户可以创建一个本地仓库供私人使用。docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。
安装:
docker pull registry
docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
push镜像到私有库:
docker pull hello-world
docker tag hello-world 192.168.220.123(仓库所在服务器地址):5000/hellobyqq
docker push 192.168.220.123:5000/hellobyqq
现在我们可以查看我们本地/opt/registry目录下已经有了刚推送上来的hellobyqq。通过 curl http://192.168.220.123:5000/v2/_catalog
可以看到私有库上存在的镜像。
从私有仓库中pull到本地:
docker pull 192.168.220.123:5000/hellobyqq
常见问题:
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,而此处搭建的私有仓库只提供http服务 。
在服务端和客户端:
vi /etc/docker/daemon.json
{ "insecure-registries":["192.168.220.123:5000"] }
然后重启docker systemctl restart docker.service
。
网友评论