Docker 仓库

作者: 烟雨乱平生 | 来源:发表于2019-10-12 18:25 被阅读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 等是一个明智的选择。

    相关文章

      网友评论

        本文标题:Docker 仓库

        本文链接:https://www.haomeiwen.com/subject/anmxmctx.html