仓库(Repositiry)是集中存放镜像的地方,分为公共仓库和私有仓库。一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。因此可以将仓库看做一个具体的项目或目录。例如对于仓库地址:private-docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。
1、Docker Hub公共镜像市场
目前Docker官方维护了一个公共镜像仓库http://hub.docker.com,大部分镜像都可以通过该网站进行下载。
(1)、登录
可以通过执行命令docker login命令来输入用户名、密码和邮箱来完成注册和登录。注册成功后,本地用户目录的.dockercfg中将保存用户的认证信息。登录成功的用户可以上传个人制作的镜像。
(2)、基本操作
用户无需登录即可通过docker search命令来查找官方仓库中的镜像,并利用docker pull命令来将它下载到本地。
2、时速云镜像市场(略)
3、搭建本地私有仓库
(1)、安装docker后,可以通过官网提供的registry镜像来简单搭建一套本地私有仓库环境:
docker run -d -p 5000:5000 registry
这将自动下载并启动一个register容器,创建本地的私有仓库。默认情况下,会将仓库创建在容器的/tmp/registry目录下。可以通过-v参数来将镜像文件放在本地的指定路径。例如下面的例子将上传的镜像放到/opt/data/register目录:
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
此时,在本地将创建一个私有仓库服务,监听端口为5000。
(2)、管理私有仓库
搭建好仓库之后,查看其地址为:172.16.0.79(docker宿主机的ip):5000。然后在虚拟机系统里测试上传和下载的镜像。
查看已有镜像:
使用docker tag 命令将镜像ubuntu:1.0标记为172.16.0.79:5000/test
使用docker push上传镜像
报错:
The push refers to a repository [172.16.0.79:5000/test]
Get https://172.16.0.79:5000/v1/_ping: http: server gave HTTP response to HTTPS client
解决:在/etc/docker/路径下添加文件daemon.json
echo '{ "insecure-registries":["172.16.0.79:5000"] }' > /etc/docker/daemon.json
然后:systemctl restart docker
再次上传:
报错:(可能是容器registry没有启动)
The push refers to a repository [172.16.0.79:5000/test]
Put http://172.16.0.79:5000/v1/repositories/test/: dial tcp 172.16.0.79:5000: getsockopt: connection refused
解决:docker start be0d898caf02
再次上传:
查看仓库中的镜像:
curl -XGET http://172.16.0.79:5000/v2/_catalog
或者
curl -XGET http://172.16.0.79:5000/v2/test/tags/list
从私有仓库下载镜像:
docker pull 172.16.0.79:5000/test