美文网首页IT@程序员猿媛
Docker 技术之仓库

Docker 技术之仓库

作者: 柳厌之 | 来源:发表于2019-05-02 10:58 被阅读76次

    简介

    仓库(Repository)是集中存放镜像的地方,又分公共仓库和私有仓库。

    有时候容易把仓库与注册服务器(Registry)混淆。实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址private-docker.com/ubuntu来说,private-docker.com是注册服务器地址,ubuntu是仓库名。

    访问 Docker 仓库

    Docker Hub公共镜像市场

    Docker Hub是Docker官方提供的最大的公共镜像仓库,目前包括了超过100 000的镜像,地址为 https://hub.docker.com

    登录:docker login

    ➜  .docker docker login
    Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
    Username: dfface
    Password: 
    Login Succeeded
    

    基本操作

    无需登录就可搜索和拉取:

    docker search [OPTIONS] TERM

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]

    已经在镜像部分做了介绍。

    自动创建

    自动创建则允许用户通过Docker Hub指定跟踪一个目标网站(目前支持GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。

    要配置自动创建,包括如下的步骤:
    1)创建并登录Docker Hub,以及目标网站如Github;
    2)在目标网站中允许Docker Hub访问服务;
    3)在Docker Hub中配置一个“自动创建”类型的项目;
    4)选取一个目标网站中的项目(需要含Dockerfile)和分支;
    5)指定Dockerfile的位置,并提交创建。
    之后,可以在Docker Hub的“自动创建”页面中跟踪每次创建的状态。

    示例(新建仓库):

    autobuild

    第三方镜像市场

    国内不少云服务商都提供了Docker镜像市场,包括腾讯云、网易云、阿里云等。

    以阿里云为例,进入容器镜像服务,选择地区(此处为北京,registry.cn-beijing.aliyuncs.com

    ailiyun

    下载镜像也是使用docker pull命令,但是要在镜像名称前添加注册服务器的具体地址。格式为registry.cn-beijing.aliyuncs.com/<namespace>/<repository>:<tag>。例如:registry.cn-beijing.aliyuncs.com/dfface/mytest2

    下载后,可以更新镜像的标签,以方便使用。

    使用镜像加速器可以提升获取Docker官方镜像的速度,参看其指导:

    镜像加速器

    操作指南:

    1. 登录阿里云Docker Registry
      sudo docker login --username=dfface registry.cn-beijing.aliyuncs.com
      用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
      您可以在产品控制台首页修改登录密码。
    2. 从Registry中拉取镜像
      sudo docker pull registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
    3. 将镜像推送到Registry
      sudo docker login --username=dfface registry.cn-beijing.aliyuncs.com
      sudo docker tag [ImageId] registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
      sudo docker push registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]
      请根据实际镜像信息替换示例中的[ImageId][镜像版本号]参数。
    4. 选择合适的镜像仓库地址
      从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
      如果您使用的机器位于VPC网络,请使用registry-vpc.cn-beijing.aliyuncs.com作为Registry的域名登录,并作为镜像命名空间前缀。
    5. 示例
      使用docker tag命令重命名镜像,并将它通过专有网络地址推送至Registry。
    $ sudo docker images
    REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
    $ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
    

    使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。

    $ sudo docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
    

    搭建本地私有仓库

    使用registry镜像创建私有仓库

    安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:
    docker run -d -p 5000:5000 registry:2
    这将自动下载并启动一个registry容器,创建本地的私有仓库服务。
    默认情况下,仓库会被创建在容器的/var/lib/registry目录下。可以通过-v参数来将镜像文件存放在本地的指定路径。
    例如下面的例子将上传的镜像放到/opt/data/registry目录:
    docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2
    此时,在本地将启动一个私有仓库服务,监听端口为5000

    管理私有仓库服务

    首先在 macOSwindows 上搭建私有仓库,查看其地址为10.0.2.2:5000,然后在虚拟机系统Ubuntu 18.04里测试上传和下载镜像。

    注意此时的注册服务器的具体地址为IP:port(因为此时不是80443端口,就必须指出来)。例如push前更名ubuntu镜像名称为10.0.2.2:5000/test(格式为docker tag IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME[:TAG])。

    curl查看仓库10.0.2.2:5000中的镜像:curl http://10.0.2.2:5000/v2/search

    现在可以到任意一台能访问到10.0.2.2地址的机器去下载这个镜像了。

    比较新的Docker版本对安全性要求较高,会要求仓库支持SSL/TLS证书。对于内部使用的私有仓库,可以自行配置证书或关闭对仓库的安全性检查。

    首先,修改Docker daemonjson配置文件在~/.docker/daemon.json中,也可以去桌面版属性中更改)的启动参数,添加如下参数,表示信任这个私有仓库,不进行安全证书检查:

    "insecure-registries" : [
          "10.0.2.2:5000"
    ],
    

    之后重启Docker服务,并从私有仓库中下载镜像到本地。

    insecure-registries daemon.json

    如果要使用安全证书,用户也可以从较知名的CA服务商(如verisign)申请公开的SSL/TLS证书,或者使用OpenSSL等软件来自行生成。

    以上只是做了一个简介,更为详细的做法,可以参考其他文章:详解docker实战之搭建私有镜像仓库

    仓库 小结

    仓库是集中维护容器镜像的地方,为Docker镜像文件的分发和管理提供了便捷的途径。在企业的生产环境中,往往需要使用私有仓库来维护内部镜像在企业的生产环境中,往往需要使用私有仓库来维护内部镜像。
    除了官方的registry项目外,用户还可以使用其他的开源方案(例如nexus)来搭建私有化的容器镜像仓库。

    Cheat Sheet

    # 仓库 关键指令回顾
    docker login  # 登录 docker hub
    docker login --username=dfface registry.cn-beijing.aliyuncs.com  # 登录第三方镜像市场
    docker tag [ImageId] registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]  # push 之前的重命名,打标签,镜像还是指向同一个
    docker push registry.cn-beijing.aliyuncs.com/dfface/mytest2:[镜像版本号]  # 上传到阿里云
    docker run -d -p 5000:5000 registry:2  # 使用官方的 registry:2 搭建私有仓库服务,默认镜像存储于 /var/lib/registry
    docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2  # 使用官方的 registry:2 搭建私有仓库服务,并将镜像存储于 /opt/data/registry
    

    相关文章

      网友评论

        本文标题:Docker 技术之仓库

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