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

项目3 Docker仓库Registry

任务3.1 部署仓库

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

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


图3.1 容器仓库Registry结构图

3.1.1 DockerHub

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

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


图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 <mongo_latest.tar

[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



猜你喜欢

转载自blog.csdn.net/kamroselee/article/details/80474711