仓库(Repository)是集中存放镜像的地方。


一、Docker Hub    

    目前 Docker 官方维护了一个公共仓库 docker hub ,其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现。

1、登录

可以通过执行 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。注册成功后,本地用户目录的.dockercfg 中将保存用户的认证信息。

2、基本操作

用户无需登录即可通过docker search 命令来查找官方仓库中的镜像,并利用docker pull 把他们下载下来

例如用ubuntu作为关键词进行搜索


lin@ubuntu:~$ docker search ubuntuNAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDubuntu                         Ubuntu is a Debian-based Linux operating s...   2830      [OK]       ubuntu-upstart                 Upstart is an event-based replacement for ...   52        [OK]       sequenceiq/hadoop-ubuntu       An easy way to try Hadoop on Ubuntu             26                   [OK]torusware/speedus-ubuntu       Always updated official Ubuntu docker imag...   25                   [OK]ubuntu-debootstrap             debootstrap --variant=minbase --components...   20        [OK]       tleyden5iwx/ubuntu-cuda        Ubuntu 14.04 with CUDA drivers pre-installed    18                   [OK]

    可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建。 官方的镜像说明是官方项目组创建和维护的,automated 资源允许用户验证镜像的来源和内容。

用户也可以在登录后,通过docker push 把自己的镜像上传到仓库;

3、自动创建

    自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便。 有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。

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

要配置自动创建,包括如下的步骤:

  • 创建并登录 Docker Hub,以及目标网站;
  • 在目标网站中连接帐户到 Docker Hub;
  • 在 Docker Hub 中 配置一个自动创建;
  • 选取一个目标网站中的项目(需要含 Dockerfile)和分支;
  • 指定 Dockerfile 的位置,并提交创建。
  • 之后,可以 在Docker Hub 的 自动创建页面 中跟踪每次创建的状态。

二、私有仓库

这里将介绍介绍如何使用本地仓库。

    docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。

1、在docker环境下安装

安装运行 docker-registry

在安装了 Docker 后,可以通过获取官方 registry 镜像来运行。


$ sudo docker run -d -p 5000:5000 registry

这将使用官方的 registry 镜像来启动本地的私有仓库。

    默认情况下,仓库会被创建在容器的 /tmp/registry 下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。 例如下面的例子将上传的镜像放到 /docker/data/registry 目录。


$ sudo docker run -d -p 5000:5000 -v /docker/data/registry:/tmp/registry registry

2、在没有docker的环境下安装

对于ubuntu或者centos可以直接通过源安装:(我自己使用的是ubuntu)

  • 安装

ubuntu

$ sudo apt-get install -y build-essential python-dev libevent-dev python-pip liblzma-dev$ sudo pip install docker-registry

centos



$ sudo yum install -y python-devel libevent-devel python-pip gcc xz-devel$ sudo python-pip install docker-registry

  • 修改配置文件

主要修改 dev 模板段的 storage_path 到本地的存储仓库的路径。


lin@lin166:~/build/docker-registry$ cp config/config_sample.yml config/config.yml

这里使用默认的配置

然后进行启动


lin@lin166:~/build$ gunicorn -c contrib/gunicorn.py docker_registry.wsgi:application

三、在私有仓库上传、下载、搜索镜像   

    创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库,别的机器上就可以下载下来了。例如私有仓库地址为 192.168.0.167:5000。

查看原有镜像


lin@ubuntu:~$ docker imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZEubuntu15.10                  v2                  c72878b77cf5        23 hours ago        133.5 MBmyjob1                       latest              764c656f5fc5        29 hours ago        133.5 MBregistry                     latest              bdd0d98559dd        6 days ago          422.9 MBubuntu                       15.10               2804d41e7f10        7 days ago          133.5 MBubuntu                       latest              89d5d8e8bafb        7 days ago          187.9 MB

使用docker tag 将 myjob1 这个镜像标记为 192.168.0.167:5000/myjob1(格式为 docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG])。




lin@ubuntu:~$ docker imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZEubuntu15.10                  v2                  c72878b77cf5        23 hours ago        133.5 MB192.168.0.167:5000/myjob1    v1                  764c656f5fc5        29 hours ago        133.5 MB127.0.0.1:5000/myjob1        v1                  764c656f5fc5        29 hours ago        133.5 MB127.0.0.1:5000/registry/my   latest              764c656f5fc5        29 hours ago        133.5 MBmyjob1                       latest              764c656f5fc5        29 hours ago        133.5 MBregistry                     latest              bdd0d98559dd        6 days ago          422.9 MBubuntu                       15.10               2804d41e7f10        7 days ago          133.5 MBubuntu                       latest              89d5d8e8bafb        7 days ago          187.9 MB


使用命令把镜像推送到本地仓库



 docker push  192.168.0.167:5000/myjob1:v1

然后可以到另外一个机器去下载这个镜像


 docker push  192.168.0.167:5000/myjob1:v1

三、配置文件

Docker 的 Registry 利用配置文件提供了一些仓库的模板(flavor),用户可以直接使用它们来进行开发或生产部署。

1、模板

在 config_sample.yml 文件中,可以看到一些现成的模板段:


common:基础配置local:存储数据到本地文件系统s3:存储数据到 AWS S3 中dev:使用 local 模板的基本配置test:单元测试使用prod:生产环境配置(基本上跟s3配置类似)gcs:存储数据到 Google 的云存储swift:存储数据到 OpenStack Swift 服务glance:存储数据到 OpenStack Glance 服务,本地文件系统为后备glance-swift:存储数据到 OpenStack Glance 服务,Swift 为后备elliptics:存储数据到 Elliptics key/value 存储

用户也可以添加自定义的模版段。

默认情况下使用的模板是 dev,要使用某个模板作为默认值,可以添加 SETTINGS_FLAVOR 到环境变量中,例如

export SETTINGS_FLAVOR=dev

另外,配置文件中支持从环境变量中加载值,语法格式为 _env:VARIABLENAME[:DEFAULT]。

2、示例配置


common:    loglevel: info    search_backend: "_env:SEARCH_BACKEND:"    sqlalchemy_index_database:        "_env:SQLALCHEMY_INDEX_DATABASE:sqlite:tmp/docker-registry.db"prod:    loglevel: warn    storage: s3    s3_access_key: _env:AWS_S3_ACCESS_KEY    s3_secret_key: _env:AWS_S3_SECRET_KEY    s3_bucket: _env:AWS_S3_BUCKET    boto_bucket: _env:AWS_S3_BUCKET    storage_path: /srv/docker    smtp_host: localhost    from_addr: docker@myself.com    to_addr: my@myself.comdev:    loglevel: debug    storage: local    storage_path: /home/myself/dockertest:    storage: local    storage_path: /tmp/tmpdockertmp