仓库(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