【Docker】Registry(注册中心)
Registry、Repository、Tag
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签>
的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest
作为默认标签。
以 Ubuntu
镜像为例,ubuntu
是仓库的名字,其内包含有不同的版本标签,如,16.04
, 18.04
。我们可以通过 ubuntu:16.04
,或者 ubuntu:18.04
来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu
,那将视为 ubuntu:latest
。
仓库名经常以 两段式路径 形式出现,比如 fan/myconsole,前者往往意味着 Docker Registry
多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体 Docker Registry
的软件或服务。
Docker Hub
Docker官方维护的Registry是:Docker Hub
注册
你可以在 https://hub.docker.com 免费注册一个 Docker 账号。
登录
可以通过执行 docker login 命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub。
docker login -u fan410577910
搜索镜像
docker search fan410577910
推送镜像
用户也可以在登录后通过 docker push 命令来将自己的镜像推送到 Docker Hub。
以下命令中的 username 请替换为你的 Docker 账号用户名。
docker tag fan/aspnetcore fan410577910/aspnetcore
docker push fan410577910/aspnetcore
打一个tag,fan410577910是我dockerhub的用户名,我试了这里必须得是自己的用户名,不然推不上去
镜像推送成功,上面镜像没有指定版本号,默认latest
也可以指定版本号:
docker tag fan/aspnetcore fan410577910/aspnetcore:1.0
docker push fan410577910/aspnetcore:1.0
私有 Docker Registry
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry
。Docker
官方提供了 Docker Registry
镜像,可以直接使用做为私有 Registry
服务。
搭建私有Registry步骤
1、拉取私有仓库镜像
docker pull registry
2、启动私有仓库容器
docker run -di -v /opt/registry:/var/lib/registry --restart=always --name=registry -p 5000:5000 registry
3、测试是否安装成功
http://xx.xx.xx.xx:5000/v2/_catalog
4、Registry为了安全性考虑,默认是需要https证书支持的.但是我们可以通过一个简单的办法解决,客户机修改/etc/docker/deamon.json
,添加insecure-registries
注:
vim /etc/docker/deamon.json
{
"insecure-registries":["<ip>:5000"]
}
5、客户机修改/usr/lib/systemd/system/docker.service
,在 ExecStart 那行后面加 --insecure-registry 139.155.44.138:5000
这个是在客户机的docker配置文件里添加的(即上传镜像到私有仓库里或从私有仓库下载镜像的客户机)。
比如说在A机器上将它的镜像上传到192.168.1.23的私有仓库上或从该私有仓库下载镜像,那么就在A机器的本地docker配置文件中添加。
6、客户机重启服务
systemctl daemon-reload
systemctl restart docker
7、客户机镜像加tag
docker tag jdk1.8 139.155.44.138:5000/jdk1.8
8、推送
docker push 139.155.44.138:5000/jdk1.8
9、先删除已有镜像,再尝试从私有仓库中下载这个镜像
docker rmi 139.155.44.138:5000/jdk1.8
docker pull 139.155.44.138:5000/jdk1.8