1. Docker Hub

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

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

大部分时候,并不需要严格区分这两者的概念。

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


1.1 登录

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


1.2 基本操作

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

$ sudo docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 465 [OK]
tianon/centos CentOS 5 and 6, created using rinse instea... 28
blalor/centos Bare-bones base CentOS 6.5 image 6 [OK]
saltstack/centos-6-minimal 6 [OK]
tutum/centos-6.4 DEPRECATED. Use tutum/centos:6.4 instead. ... 5 [OK]
...

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

根据是否是官方提供,可将镜像资源分为两类。 一种是类似 centos 这样的基础镜像,被称为基础或根镜像。这些基础镜像是由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。 还有一种类型,比如 tianon/centos 镜像,它是由 Docker 的用户创建并维护的,往往带有用户名称前缀。可以通过前缀user_name/ 来指定使用某个用户提供的镜像,比如 tianon 用户。

另外,在查找的时候通过 -s N 参数可以指定仅显示评价为 N 星以上的镜像。

下载官方 centos 镜像到本地。

$ sudo docker pull centos
Pulling repository centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete

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


1.3 自动创建

自动创建(Automated Builds)功能对于需要经常升级镜像内程序来说,十分方便。 有时候,用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。。
而自动创建允许用户通过 Docker Hub 指定跟踪一个目标网站(目前支持 GitHub 或 BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:

  • 创建并登录 Docker Hub,以及目标网站;
  • 在目标网站中连接帐户到 Docker Hub;
  • 在 Docker Hub 中 配置一个自动创建(https://registry.hub.docker.com/builds/add/) ;
  • 选取一个目标网站中的项目(需要含 Dockerfile)和分支;
  • 指定 Dockerfile 的位置,并提交创建。

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


2. 私有仓库

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

本节介绍如何使用本地仓库。

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

2.1 安装运行 docker-registry

容器运行

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

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

这将使用官方的 registry 镜像来启动本地的私有仓库。 用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务。

$ sudo docker run \
-e SETTINGS_FLAVOR=s3 \
-e AWS_BUCKET=acme-docker \
-e STORAGE_PATH=/registry \
-e AWS_KEY=AKIAHSHB43HS3J92MXZ \
-e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \
-e SEARCH_BACKEND=sqlalchemy \
-p 5000:5000 \
registry

此外,还可以指定本地路径(如 /home/user/registry-conf )下的配置文件。
$ sudo docker run -d -p 5000:5000 -v /home/user/registry-conf:/registry-conf -e DOCKER_REGIS
TRY_CONFIG=/registry-conf/config.yml registry
默认情况下,仓库会被创建在容器的 /tmp/registry 下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。

例如下面的例子将上传的镜像放到 /opt/data/registry 目录。

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

本地安装
对于 Ubuntu 或 CentOS 等发行版,可以直接通过源安装。

  • 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

也可以从 docker-registry 项目下载源码进行安装。

$ sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libf
fi-dev $ git clone https://github.com/docker/docker-registry.git $ cd docker-registry $ sudo python se
tup.py install

然后修改配置文件,主要修改 dev 模板段的 storage_path 到本地的存储仓库的路径。

$ cp config/config_sample.yml config/config.yml

之后启动 Web 服务。

$ sudo gunicorn -c contrib/gunicorn.py docker_registry.wsgi:application

或者

$ sudo gunicorn --access-logfile - --error-logfile - -k gevent -b 0.0.0.0:5000 -w 4 --max-reques
ts 100 docker_registry.wsgi:application
此时使用 curl 访问本地的 5000 端口,看到输出 docker-registry 的版本信息说明运行成功。
>注:`config/config_sample.yml` 文件是示例配置文件。

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

创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库,别的机器上就可以下载下来了。例如私有仓库地
先在本机查看已有的镜像。

$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest ba587
7dc9bec 6 weeks ago 192.7 MB ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB

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

$ sudo docker tag ba58 192.168.7.26:5000/test root ~ # docker images REPOSITORY TAG IMAGE I
D CREATED VIRTUAL SIZE ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB ubuntu latest ba587
7dc9bec 6 weeks ago 192.7 MB 192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB

使用 docker push 上传标记的镜像。

$ sudo docker push 192.168.7.26:5000/test The push refers to a repository [192.168.7.26:5000/test] (l
en: 1) Sending image list Pushing repository 192.168.7.26:5000/test (1 tags) Image 511136ea3c5a alre
ady pushed, skipping Image 9bad880da3d2 already pushed, skipping Image 25f11f5fb0cb already pu
shed, skipping Image ebc34468f71d already pushed, skipping Image 2318d26665ef already pushed,
skipping Image ba5877dc9bec already pushed, skipping Pushing tag for rev [ba5877dc9bec] on {htt
p://192.168.7.26:5000/v1/repositories/test/tags/latest}

用 curl 查看仓库中的镜像。

$ curl http://192.168.7.26:5000/v1/search {"num_results": 7, "query": "", "results": [{"description": "", "na
me": "library/miaxis_j2ee"}, {"description": "", "name": "library/tomcat"}, {"description": "", "name": "librar
y/ubuntu"}, {"description": "", "name": "library/ubuntu_office"}, {"description": "", "name": "library/deskto
p_ubu"}, {"description": "", "name": "dockerfile/ubuntu"}, {"description": "", "name": "library/test"}]}

这里可以看到 {"description": "", "name": "library/test"},表明镜像已经被成功上传了。
现在可以到另外一台机器去下载这个镜像。

$ sudo docker pull 192.168.7.26:5000/test Pulling repository 192.168.7.26:5000/test ba5877dc9bec: D
ownload complete 511136ea3c5a: Download complete 9bad880da3d2: Download complete 25f11f5fb
0cb: Download complete ebc34468f71d: Download complete 2318d26665ef: Download complete $ su
do docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 192.168.7.26:5000/test la
test ba5877dc9bec 6 weeks ago 192.7 MB

可以使用 这个脚本 批量上传本地的镜像到注册服务器中,默认是本地注册服务器 127.0.0.1:5000。例如:

$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod
a+x push_images.sh $ ./push_images.sh ubuntu:latest centos:centos7 The registry server is 12
7.0.0.1 Uploading ubuntu:latest... The push refers to a repository [127.0.0.1:5000/ubuntu] (len: 1) Sen
ding image list Pushing repository 127.0.0.1:5000/ubuntu (1 tags) Image 511136ea3c5a already pushe
d, skipping Image bfb8b5a2ad34 already pushed, skipping Image c1f3bdbd8355 already pushed, skip
ping Image 897578f527ae already pushed, skipping Image 9387bcc9826e already pushed, skipping I
mage 809ed259f845 already pushed, skipping Image 96864a7d2df3 already pushed, skipping Pushin
g tag for rev [96864a7d2df3] on {http://127.0.0.1:5000/v1/repositories/ubuntu/tags/latest} Untagged: 1
27.0.0.1:5000/ubuntu:latest Done Uploading centos:centos7... The push refers to a repository [12
7.0.0.1:5000/centos] (len: 1) Sending image list Pushing repository 127.0.0.1:5000/centos (1 tags) Ima
ge 511136ea3c5a already pushed, skipping 34e94e67e63a: Image successfully pushed 70214e5d0a9
0: Image successfully pushed Pushing tag for rev [70214e5d0a90] on {http://127.0.0.1:5000/v1/reposit
ories/centos/tags/centos7} Untagged: 127.0.0.1:5000/centos:centos7 Done

仓库配置文件

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

模板

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]

示例配置

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: _en
v:AWS_S3_SECRET_KEY s3_bucket: _env:AWS_S3_BUCKET boto_bucket: _env:AWS_S3_BUC
KET storage_path: /srv/docker smtp_host: localhost from_addr: docker@myself.com to_addr: m
y@myself.com
dev: loglevel: debug storage: local storage_path: /home/myself/docker
test: storage: local storage_path: /tmp/tmpdockertmp

docker(6):仓库相关推荐

  1. 客快物流大数据项目(十八):Docker私有仓库

    目录 Docker私有仓库 一.registry 的搭建 1.搭建 2.验证

  2. Docker镜像仓库Harbor之搭建及配置

    Docker镜像仓库Harbor之搭建及配置 1.Harbor 介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署 ...

  3. Centos7系统创建Docker本地仓库

    在kubernetes技术体系中,镜像的仓库扮演着重要的角色.应用的更新与发布都是通过对镜像进行更新,并通过新的镜像启动容器实现的. 为方便之后的学习,本文将介绍在centos7上实现docker本地 ...

  4. Docker 私有仓库最简便的搭建方法

    http://blog.csdn.net/wangtaoking1/article/details/44180901/ Docker学习笔记 - Docker私有仓库搭建 http://www.jia ...

  5. 跟我一起学docker(五)--仓库

    1.Docker Hub 仓库是集中存放镜像的地方. 目前Docker官方仓库维护了一个公共仓库https://hub.docker.com,其中已经包括15000多个的镜像. 大部分需求都可以通过在 ...

  6. (六)构建Docker私有仓库、Gitlab仓库和持续集成环境

    环境说明 IP 功能 eth0:192.168.124.139 eth1:172.16.100.10 Docker私有仓库.Gitlab.持续集成 eth0:192.168.124.138 eth1: ...

  7. Docker镜像仓库

    Docker镜像仓库 搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现. 官网地址:Docker Hub 简化版镜像仓库 Docker官方的Docker Registry是 ...

  8. 部署docker-consul群集,Harbor构建Docker私有仓库

    文章目录 部署docker-consul群集,Harbor构建Docker私有仓库 了解Harvor 案例概述 Docker consul服务了解 部署Harbor服务过程 不是本地上传镜像操作 在用 ...

  9. 使用Harbor构建docker私有仓库

    目录 一.概述 1.什么是Harbor 2.Harbor的优势 3.Docker私有仓库架构 4.Harbor 配置文件以及相关参数 (1)所需参数 (2)可选参数 二.使用Harbor构建docke ...

  10. 离线手动部署docker镜像仓库——harbor仓库(二)

    前言: 在<离线手动部署docker镜像仓库--harbor仓库(一)>中,记录了离线部署harbor仓库的简单过程,这里主要记录修改默认访问端口80端口为1180端口的部署方式和注意点. ...

最新文章

  1. 重磅!谷歌刚刚发布Objectron新数据集,可完美检测3D目标,超过4百万幅图像和15K视频剪辑!...
  2. java中如何忽略字符串中的转义字符--转载
  3. Boost:双图bimap遍历的测试程序
  4. Tensorflow解决MNIST手写体数字识别
  5. 【转】Ubuntu Desktop下自动启动终端并运行脚本
  6. 与访问您网站(或Blog)的朋友即时交流
  7. 如何学习ReactJS:初学者完整指南
  8. transformClassesWithProfilers-transformForFullDebug
  9. 【DFS + 记忆化递归】LeetCode 140. Word Break II
  10. linux 两台linux服务器想共享一个磁盘分区
  11. Spring(七)Spring中的四种增强和顾问
  12. 继续解决YUI3 Panel的yui3-panel-hidden样式带来的问题
  13. 小爱音箱怎么装app_小爱音箱app
  14. 培根芦笋卷+蚝油家常豆腐+春笋甜椒拌饭
  15. 关于protel 99 SE如何建立自己的元件库,导入Sch文件file is not recognized.
  16. AI虚拟数字人直播带货软件 AI数字人直播间怎么搭建 搭建教程分享
  17. protoc-gen-go的坑
  18. EastWave应用案例:同轴线仿真
  19. uniapp 中APP使用微信授权登录完整总结
  20. Python+Selenium自动化测试项目实战

热门文章

  1. 关于蘑菇街的功能特色
  2. 程序员的品格:羞耻心、同理心与榜样的力量
  3. 22河南省赛 - E. Serval 的俳句(预处理)
  4. 审核员 产品质量法适用计算机游戏,2009年6月QMS国家注册审核员考题(部分)
  5. 解决Chrome 浏览器提示错误:无法翻译此页面
  6. 启用计算机的快捷键,不会用快捷键启动电脑,你还不进来!
  7. 高大上 web ppt 制作
  8. 你的最爱(网址收藏栏)
  9. XXX公司的员工积分系统
  10. Git 与 SVN 的区别