您的位置:首页 > 运维架构 > Docker

docker【5】 docker仓库介绍以及私有仓库建立

2015-12-16 16:49 573 查看
仓库(Repository)是集中存放镜像的地方。


一、Docker Hub

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


1、登录

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


2、基本操作

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

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

lin@ubuntu:~$ docker search ubuntu

NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

ubuntu                         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]

[/code]

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

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


3、自动创建

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

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

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

创建并登录 Docker Hub,以及目标网站;

在目标网站中连接帐户到 Docker Hub;

在 Docker Hub 中 配置一个自动创建;

选取一个目标网站中的项目(需要含 Dockerfile)和分支;

指定 Dockerfile 的位置,并提交创建。

之后,可以 在Docker Hub 的 自动创建页面 中跟踪每次创建的状态。


二、私有仓库

有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。这里将介绍介绍如何使用本地仓库。

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


1、在docker环境下安装

安装运行 docker-registry

在安装了 Docker 后,可以通过获取官方 registry 镜像来运行。
$ sudo docker run -d -p 5000:5000 registry

[/code]

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

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

[/code]

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

[/code]

centos

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

[/code]

修改配置文件

主要修改 dev 模板段的 storage_path 到本地的存储仓库的路径。
lin@lin166:~/build/docker-registry$ cp config/config_sample.yml config/config.yml

[/code]

这里使用默认的配置

然后进行启动
lin@lin166:~/build$ gunicorn -c contrib/gunicorn.py docker_registry.wsgi:application

[/code]


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

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

查看原有镜像

lin@ubuntu:~$ docker images

REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

ubuntu15.10                  v2                  c72878b77cf5        23 hours ago        133.5 MB

myjob1                       latest              764c656f5fc5        29 hours ago        133.5 MB

registry                     latest              bdd0d98559dd        6 days ago          422.9 MB

ubuntu                       15.10               2804d41e7f10        7 days ago          133.5 MB

ubuntu                       latest              89d5d8e8bafb        7 days ago          187.9 MB

[/code]

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

lin@ubuntu:~$ docker images

REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

ubuntu15.10                  v2                  c72878b77cf5        23 hours ago        133.5 MB

192.168.0.167:5000/myjob1    v1                  764c656f5fc5        29 hours ago        133.5 MB

127.0.0.1:5000/myjob1        v1                  764c656f5fc5        29 hours ago        133.5 MB

127.0.0.1:5000/registry/my   latest              764c656f5fc5        29 hours ago        133.5 MB

myjob1                       latest              764c656f5fc5        29 hours ago        133.5 MB

registry                     latest              bdd0d98559dd        6 days ago          422.9 MB

ubuntu                       15.10               2804d41e7f10        7 days ago          133.5 MB

ubuntu                       latest              89d5d8e8bafb        7 days ago          187.9 MB

[/code]

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

docker push  192.168.0.167:5000/myjob1:v1

[/code]

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

docker push  192.168.0.167:5000/myjob1:v1

[/code]


三、配置文件

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 存储

[/code]

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

默认情况下使用的模板是 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.com




dev:


loglevel: debug


storage: local


storage_path: /home/myself/docker




test:


storage: local


storage_path: /tmp/tmpdockertmp

[/code]


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: