Docker容器技术与应用(项目3 Docker 仓库Registry)

项目3 Docker仓库Registry

任务3.1 部署仓库

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

一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.com/ubuntu 来说,dl.dockerpool.com是注册服务器地址,ubuntu 是仓库名。

Docker容器技术与应用(项目3 Docker 仓库Registry)_第1张图片

图3.1 容器仓库Registry结构图

3.1.1 DockerHub

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

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

Docker容器技术与应用(项目3 Docker 仓库Registry)_第2张图片

图3.2 docker hub 注册登录

3.1.2基本操作

用户无需登录即可通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。例如以 centos 为关键词进行搜索:

$ sudo docker search centos

NAME                                           DESCRIPTION                                     STARS     OFFICIAL  AUTOMATED

centos                                          Theofficial build of CentOS.                  465       [OK]

tianon/centos                                   CentOS 5 and6, created using rinse instea...   28

blalor/centos                                   Bare-bonesbase CentOS 6.5 image               6                    [OK]

saltstack/centos-6-minimal                                                                     6                    [OK]

tutum/centos-6.4                                DEPRECATED. Usetutum/centos:6.4 instead. ...   5                    [OK]

...

可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级(表示该镜像的受欢迎程度)是否官方创建、是否自动创建。官方的镜像说明是官方项目组创建和维护的,automated 资源允许用户验证镜像的来源和内容。根据是否是官方提供,可将镜像资源分为两类。一种是类似 centos 这样的基础镜像,被称为基础或根镜像。这些基础镜像是由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。还有一种类型,比如tianon/centos镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀。可以通过前缀user_name/来指定使用某个用户提供的镜像,比如 tianon 用户。

下载官方 centos 镜像到本地。

$ sudo docker pull centos

Pulling repository centos

0b443ba03958: Download complete

539c0211cd76: Download complete

511136ea3c5a: Download complete

7064731afe90: Download complete

用户也可以在登录后通过 docker push 命令来将镜像推送到Docker Hub

3.1.3私有仓库

用户可以创建自己的私有仓库,Docker开源了Docker Registry代码,这样可以自己构建私有仓库。

将提供的软件包拷贝到镜像注册节点,而后进行如下操作

(1).   仓库镜像导入

# docker load < registry_latest.tar

(2).   创建镜像仓库容器

docker run -d -p 5000:5000 --restart=always--name registry docker.io/registry:latest

[root@docker ~]# docker run -d -p 5000:5000--restart=always --name registry docker.io/registry:latest

77b1ffaebf4f99470dc060169628e75fd89ec11d45c88f6970b5e4fbdcbdeb60

查询:

# docker image(查询上传的image id)

[root@docker ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

docker.io/registry   latest              c9bd19d022f6        10 weeks ago        33.27 MB

 

# docker tag c9bd19d022f6(此处为上一步查看的上传镜像的ID值)10.0.6.83:5000/registry:latest

[root@docker ~]# docker tag c9bd19d022f6  192.168.200.26:5000/registry:latest

测试上传镜像(上传registry):

# docker push 10.0.6.83:5000/registry:latest

[root@docker ~]# docker push192.168.200.26:5000/registry:latest

The push refers to a repository[192.168.200.26:5000/registry]

9b728062fb6d: Pushed

481c807467a1: Pushed

a049b9c716b3: Pushed

d57f828d06ea: Pushed

011b303988d2: Pushed

latest: digest:sha256:b43824c6e32b1ffc6a7b362ad18d07e72a3def816005fa40a1931958b65f1b5e size:1341

 

访问测试:

[root@docker ~]# curl http://192.168.200.26:5000/v2/registry/tags/list

{"name":"registry","tags":["latest"]}

 

(3).   批量上传镜像

以此类推上传其他的镜像到私有仓库内,可以使用提供的install.sh脚本进行一键上传镜像到仓库。

执行结果如下:

[root@server opt]# ./install.sh

Please wait, checking the network......

Check completed

/opt/docker_images /opt

7aa9047e618a8857fbeac4de2eccc639486e70507ca94f77443653f838d62653

please wait ...

The push refers to a repository[192.168.200.29:5000/registry]

。。。。。。。。。

7fa4fac65171: Verifying Checksum

7fa4fac65171: Download complete

7fa4fac65171: Pull complete

7fa4fac65171: Pull complete

33de63de5fdb: Pull complete

33de63de5fdb: Pull complete

d00b3b942272: Pull complete

d00b3b942272: Pull complete

Digest:sha256:9675a74127c4fc5833b7aba45e41e26f6385e330d72a784f43cddac81c293eab

Status: Downloaded newer image for docker.io/rancher/agent:v1.0.2

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

(1).   在本机查看已有的镜像

[root@registry ~]# docker images

REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE

192.168.200.11:5000/rancher/server           v1.1.4-xd           5fb280cac476        9 days ago          868.8 MB

docker.io/registry                           latest              c9bd19d022f6        10 weeks ago        33.27 MB

192.168.200.11:5000/registry                 latest              c9bd19d022f6        10 weeks ago        33.27 MB

192.168.200.11:5000/rancher/agent-instance   v0.8.3              6dccaa66a75d        6 months ago        330.9 MB

192.168.200.11:5000/rancher/agent            v1.0.2              deb5c6987c83        6 months ago        454.3 MB

192.168.200.11:5000/ubuntu/14.04.3.tar       latest              ebdc8e295a2e        11 months ago       187.9 MB

(2).   本地资源列表

[root@registry ~]# ll

total 5731924

-rw-r--r-- 1 root root 408046080 Dec 12 01:38mongo_latest.tar

-rw-r--r-- 1 root root 390705152 Dec 12 01:38mysql_latest.tar

-rw-r--r-- 1 root root 346748928 Dec 12 01:38rancher_agent-instance_v0.8.3.tar

-rw-r--r-- 1 root root 471058944 Dec 12 01:39rancher_agent_v1.0.2.tar

-rw-r--r-- 1 root root  10569216 Dec 12 01:39rancher_jenkins-plugins_v0.1.1.tar

-rw-r--r-- 1 root root 883383808 Dec 20 08:48rancher_server_v1.1.4-xd.tar

-rw-r--r-- 1 root root  33918976 Dec 12 01:39 registry_latest.tar

-rw-r--r-- 1 root root 197047296 Dec 12 01:39ubuntu_14.04.3.tar

-rw-r--r-- 1 root root 432752128 Dec 12 01:39wordpress_latest.tar

(3).    上传本地资源到私有仓库

[root@registry ~]# docker load

[root@registry ~]# docker tag 86e302671af4192.168.200.11:5000/mongo:latest

[root@registry ~]# docker push192.168.200.11:5000/mongo:latest

The push refers to a repository[192.168.200.11:5000/mongo]

c5be6cad6809: Layer already exists

6d033ab5cf11: Layer already exists

2853db9472d0: Layer already exists

b383f648d8e5: Layer already exists

5f521dd41fb0: Layer already exists

718248b95529: Layer already exists

8ba476dc30da: Layer already exists

07c6326a8206: Layer already exists

fe4c16cbf7a4: Layer already exists

latest: digest:sha256:28feee8c0e5c19325bf09cfa489cd30e1c3a1e574dae8b6c2fb7f468463b6b5c size:2177

(4).   下载私有仓库的镜像

[root@client ~]# docker pull 192.168.200.27:5000/mongo:latest

Trying to pull repository192.168.200.27:5000/mongo ...

latest: Pulling from 192.168.200.27:5000/mongo

 

386a066cd84a: Pull complete

524267bc200a: Pull complete

476d61c7c43a: Pull complete

0750d0e28b90: Pull complete

c2a78c5fad8e: Pull complete

1cd7ed6205ba: Pull complete

35f9221ee11f: Pull complete

708e45912fb3: Pull complete

deca6f1cf04d: Pull complete

Digest:sha256:28feee8c0e5c19325bf09cfa489cd30e1c3a1e574dae8b6c2fb7f468463b6b5c

Status: Downloaded newer image for 192.168.200.27:5000/mongo:latest

(5).   curl查看仓库中的镜像。

[root@docker ~]# curlhttp://127.0.0.1:2375/images/json | python -m json.tool

  %Total    % Received % Xferd  Average Speed   Time   Time     Time  Current

                                 Dload  Upload  Total   Spent    Left Speed

100 6781    0  6781   0     0   245k     0 --:--:-- --:--:-- --:--:--  254k

[

    {

       "Created": 1482998541,

       "Id":"sha256:0c27604c726690da5f7368af31765903bbf196b8e5808c876a2abd25b681a17f",

       "Labels": null,

       "ParentId": "",

       "RepoDigests": null,

       "RepoTags": [

           "odoo:latest"

        ],

       "Size": 0,

       "VirtualSize": 0

    },

    {

       "Created": 1482966589,

       "Id": "sha256:411afb6272fbf5258c421ca5dd10bf212cddb40d78ac3962114b67bb78cc7c62",

       "Labels": {},

       "ParentId": "",

       "RepoDigests": [

           "docker.io/python@sha256:05d7f756d1980a83ca7419109334a6df47824e02eae93996c3d201f96baf7cf3"

        ],

       "RepoTags": [

           "docker.io/python:latest"

        ],

       "Size": 687122335,

       "VirtualSize": 687122335

},[root@docker ~]# curlhttp://127.0.0.1:2375/images/json | python -m json.tool

  %Total    % Received % Xferd  Average Speed   Time   Time     Time  Current

                                 Dload  Upload  Total   Spent    Left Speed

100 6781    0  6781   0     0   245k     0 --:--:-- --:--:-- --:--:--  254k

[

    {

       "Created": 1482998541,

       "Id":"sha256:0c27604c726690da5f7368af31765903bbf196b8e5808c876a2abd25b681a17f",

       "Labels": null,

       "ParentId": "",

       "RepoDigests": null,

       "RepoTags": [

           "odoo:latest"

        ],

       "Size": 0,

       "VirtualSize": 0

    },

    {

       "Created": 1482966589,

       "Id":"sha256:411afb6272fbf5258c421ca5dd10bf212cddb40d78ac3962114b67bb78cc7c62",

       "Labels": {},

       "ParentId": "",

       "RepoDigests": [

           "docker.io/python@sha256:05d7f756d1980a83ca7419109334a6df47824e02eae93996c3d201f96baf7cf3"

        ],

       "RepoTags": [

           "docker.io/python:latest"

        ],

       "Size": 687122335,

       "VirtualSize": 687122335

},

3.1.5库配置文件

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

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

common:基础配置

local:存储数据到本地文件系统

s3:存储数据到 AWSS3

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

示例配置

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: [email protected]

   to_addr: [email protected]

 

dev:

   loglevel: debug

   storage: local

   storage_path: /home/myself/docker

 

test:

   storage: local

   storage_path: /tmp/tmpdockertmp



你可能感兴趣的:(Docker容器技术与应用)