技术栈

Docker 仓库

2019-10-12  本文已影响0人  烟雨乱平生

仓库(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 等是一个明智的选择。

上一篇下一篇

猜你喜欢

热点阅读