Docker 仓库
仓库(Repository)是集中存放镜像的地方。
一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.com/ubuntu 来说,dl.dockerpool.com 是注册服务器地址,ubuntu 是仓库名。
公共仓库
目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过2,650,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
通过docker search命令可以在Docker Hub上面搜寻所需要的某个镜像
私有仓库
有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。
安装运行 docker-registry
可以通过获取官方 registry 镜像来运行。
$ docker run -d -p 5000:5000 --restart=always --name registry registry
这将使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径(该目录必须存在,不存在要手动创建)。例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录。
$ docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry --restart=always --name registry registry
在私有仓库上传、搜索、下载镜像
创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。
docker tag mysql:5.7 127.0.0.1:5000/wang/mysql:local
image.png
注意:
在上传本地私有仓库的时候,使用docker tag 为镜像打标签使用的是镜像的完整命名格式,这样当我们使用docker push和docker pull的时候,docker会自动识别[registry-host]部分为容器镜像仓库的地址。
推送到私有仓库
docker push 127.0.0.1:5000/wang/mysql:local
从私有仓库拉取镜像
docker pull 127.0.0.1:5000/wang/mysql:local
Docker 默认不允许非 HTTPS 方式推送镜像,我们可以通过配置daemon.json文件来取消这个限制。在daemon.json文件中添加下面一行配置。
"insecure-registries": ["192.168.199.100:5000"]
注意:该文件必须符合 json 规范,否则 Docker 将不能启动。
私有仓库高级配置
除了使用官方 registry 镜像来搭建一个私有的仓库,我们也可以使用Docker Compose搭建一个拥有权限认证、TLS的私有仓库。
Nexus3.x 的私有仓库
使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启 Registry 程序。在企业中把内部的一些工具包放入 Nexus 中是比较常见的做法,最新版本 Nexus3.x
全面支持 Docker 的私有镜像。所以使用Nexus3.x一个软件来管理 Docker
, Maven
, Yum
, PyPI
等是一个明智的选择。