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

一个容易混淆的概念是注册服务器(Registry)。

实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。

从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址dl.dockerpool.com/ubuntu来说,dl.dockerpool.com是注册服务器(Registry),ubuntu是仓库(Repository)

1.Docker Hub(公共仓库)

登录——docker login

注册成功后,本地用户目录的 .dockercfg中将保存用户的认证信(Linux中)

然后之后就能够进行之前学习的一些操作,如拉取镜像等

2.私有仓库——docker-registry

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

有时候,我们并不想把自己的项目公开,只想自己使用。这时我们就需要自己建立自己的docker hub

1) 安装运行 docker-registry

  1. userdeMacBook-Pro:~ user$ docker run -d -p : registry
  2. Unable to find image 'registry:latest' locally
  3. latest: Pulling from library/registry
  4. d6a5679aa3cf: Pull complete
  5. ad0eac849f8f: Pull complete
  6. 2261ba058a15: Pull complete
  7. f296fda86f10: Pull complete
  8. bcd4a541795b: Pull complete
  9. Digest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8
  10. Status: Downloaded newer image for registry:latest
  11. 80a3cb29464481d17c7c7640d7763ea6820cee39cd0c83ce959a76e7b7a6219f
  12. userdeMacBook-Pro:~ user$ docker ps
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. 80a3cb294644 registry "/entrypoint.sh /etc…" minutes ago Up minutes 0.0.0.0:->/tcp pensive_meninsky

这将使用官方的 registry 镜像来启动本地的私有仓库。(我没有进行下面的配置)

运行了上面的命令后,其实就相当于启动了一个服务器,然后我们就可以往上面push和pull了

下面是相应的环境配置,你也可以不设置,使用默认值

用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务:

  1. $ sudo docker run \
  2. -e SETTINGS_FLAVOR=s3 \
  3. -e AWS_BUCKET=acme-docker \
  4. -e STORAGE_PATH=/registry \
  5. -e AWS_KEY=AKIAHSHB43HS3J92MXZ \
  6. -e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T
  7. -e SEARCH_BACKEND=sqlalchemy \
  8. -p : \
  9. registry

此外,还可以指定本地路径(如 /home/user/registry-conf )下的配置文件config.yml(我本地下并没有改文件,看看即可):

  1. $ sudo docker run -d -p : -v /home/user/registry-conf:/registry-conf -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml registry

默认情况下,仓库会被创建在容器的 /tmp/registry下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。

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

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

2)在私有仓库上传、下载、搜索镜像——docker tag

格式:docker tag IMAGE[:TAG]  [REGISTRYHOST/][USERNAME/]NAME[:TAG]

创建好私有仓库之后,就可以使用 docker tag来标记一个镜像,然后推送它到仓库,就能够从别的机器上下载该镜像了。

⚠️:你image的标签一定得是你服务器的ip地址加端口.比如下面的命令docker tag 0254 192.168.1.103:5000/testNginx,否则你的镜像并不会上传到你自己的仓库上,而是会上传到docker hub上

先在本机查看已有的镜像:

  1. userdeMacBook-Pro:~ user$ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. test/nginx v1 02548ab0445a minutes ago 107MB
  4. nginx v3 beda48ecf85b hours ago 109MB
  5. nginx v2 5dda481d7ed1 hours ago 109MB
  6. nginx latest 568c4670fa80 weeks ago 109MB
  7. ubuntu 14.04 f17b6a61de28 weeks ago 188MB
  8. registry latest 2e2f252f3c88 months ago .3MB
  9. alpine latest 196d12cf6ab1 months ago .41MB
  10. hello-world latest 4ab4c602aa5e months ago .84kB

然后就对镜像进行标记:

  1. userdeMacBook-Pro:~ user$ docker tag 192.168.1.103:/testNginx
  2. Error parsing reference: "192.168.1.103:5000/testNginx" is not a valid repository/tag: invalid reference format: repository name must be lowercase
  3. userdeMacBook-Pro:~ user$ docker tag 192.168.1.103:/testnginx
  4. userdeMacBook-Pro:~ user$ docker images
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. 192.168.1.103:/testnginx latest 02548ab0445a minutes ago 107MB
  7. test/nginx v1 02548ab0445a minutes ago 107MB
  8. nginx v3 beda48ecf85b hours ago 109MB
  9. nginx v2 5dda481d7ed1 hours ago 109MB
  10. nginx latest 568c4670fa80 weeks ago 109MB
  11. ubuntu 14.04 f17b6a61de28 weeks ago 188MB
  12. registry latest 2e2f252f3c88 months ago .3MB
  13. alpine latest 196d12cf6ab1 months ago .41MB
  14. hello-world latest 4ab4c602aa5e months ago .84kB

然后docker push上传标记后的镜像:

  1. userdeMacBook-Pro:~ user$ docker push 192.168.1.103:/testnginx
  2. The push refers to repository [192.168.1.103:/testnginx]
  3. Get https://192.168.1.103:5000/v2/: http: server gave HTTP response to HTTPS client

出现问题,解决办法,添加"insecure-registries":["192.168.1.103:5000"]:

然后重启apply & restart

之后再重新运行一遍,因为你会发现registry容器也关闭了:

  1. userdeMacBook-Pro:~ user$ docker push 192.168.1.103:/testnginx
  2. The push refers to repository [192.168.1.103:/testnginx]
  3. 480dc0877295: Retrying in second
  4. received unexpected HTTP status: Service Unavailable
  5. userdeMacBook-Pro:~ user$ docker ps
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. userdeMacBook-Pro:~ user$ docker run -d -p : registry
  8. 9baa1039f10d5037b1e6c393155233cfdee1ce068b7e4859d7d856c373d33ce8
  9. userdeMacBook-Pro:~ user$ docker ps
  10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11. 9baa1039f10d registry "/entrypoint.sh /etc…" seconds ago Up seconds 0.0.0.0:->/tcp tender_kowalevski
  12. userdeMacBook-Pro:~ user$ docker push 192.168.1.103:/testnginx
  13. The push refers to repository [192.168.1.103:/testnginx]
  14. 480dc0877295: Pushed
  15. latest: digest: sha256:f682f1e8e7f792404f93977b9931a07c6180b4e84d4daadbb47ea4489d368e49 size:

然后一查看,成功上传:

  1. userdeMacBook-Pro:~ user$ cat .docker/daemon.json
  2. {
  3. "debug" : true,
  4. "insecure-registries" : [
  5. "192.168.1.103:5000"
  6. ],
  7. "experimental" : true,
  8. "registry-mirrors" : [
  9. "https://aic2v8yz.mirror.aliyuncs.com"
  10. ]
  11. }
  12. userdeMacBook-Pro:~ user$ curl -XGET http://192.168.1.103:5000/v2/_catalog
  13. {"repositories":["testnginx"]}

然后就能够到另一台电脑上使用下面的命令去拉取镜像了:

  1. docker pull 192.168.1.103:/testnginx

3) 仓库配置文件

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-swifte : 存储数据到 OpenStack Glance 服务,Swift 为后备
  • elliptics : 存储数据到 Elliptics key/value 存储
 
  1.  
  1.  

Docker技术入门与实战 第二版-学习笔记-6-仓库的更多相关文章

  1. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  2. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  3. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-1-cli

    Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境 Docker Machine是一种工具,它允许你在虚拟主机 ...

  4. Docker技术入门与实战 第二版-学习笔记-7-数据管理(volume)

    Docker 数据管理 为什么要进行数据管理呢?因为当我们在使用container时,可能会在里面创建一些数据或文件,但是当我们停掉或删除这个容器时,这些数据或文件也会同样被删除,这是我们并不想看见的 ...

  5. Docker技术入门与实战 第二版-学习笔记-5-容器-命令及限制内存与cpu资源

    1.启动容器 启动容器有两种方式: 基于镜像新建一个容器并启动 将在终止状态(stopped)的容器重新启动 1)新建并启动——docker run 比如在启动ubuntu:14.04容器,并输出“H ...

  6. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

  7. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-1-单个host上的容器网络

    Docker 中的网络功能介绍 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务 1) 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -p或 -P参数 ...

  8. Docker技术入门与实战 第二版-学习笔记-2-镜像构建

    3.利用 commit 理解镜像构成 在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像. 直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜 ...

  9. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-3-Command-line completion命令补全

    Command-line completion https://docs.docker.com/machine/completion/ Installing Command Completion——实 ...

随机推荐

  1. [日常] Go语言圣经--示例: 并发的Clock服务习题

    练习 8.1: 修改clock2来支持传入参数作为端口号,然后写一个clockwall的程序,这个程序可以同时与多个clock服务器通信,从多服务器中读取时间,并且在一个表格中一次显示所有服务传回的结 ...

  2. Java集合类源码解析:LinkedHashMap

    前言 今天继续学习关于Map家族的另一个类 LinkedHashMap .先说明一下,LinkedHashMap 是继承于 HashMap 的,所以本文只针对 LinkedHashMap 的特性学习, ...

  3. 【linux】suse linux 常用命令

    命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以.doc ...

  4. 【Linux】查看所使用的Linux系统是32位还是64 位的方法

    查看所使用的Linux系统是32位还是64 位的方法 方法一:getconf LONG_BIT # getconf LONG_BIT 1 1 我的Linux是32位!!! 方法二:arch # arc ...

  5. jqgrid 获取当前页数据

    /** *刷新,jqGrid刷新当前列表页代码 */ function refresh(url) { var page = $('#your_grid').getGridParam('page'); ...

  6. 把多个js函数绑定到onload时间处理函数上

    js的window.onload=function();网页加载完毕时会触发一个onload事件,这个事件与window对象相关联,是让一个函数在网页加载完毕之后得到执行.但是如果有两个韩式first ...

  7. php面向对象精要(1)

    1.静态属性与方法 每一个类的实例拥有自己的属性和方法,每一个类也可以包含静态属性,静态属性不属于类的任何实例,可以把静态属性理解成存储在类中的全局变量,可以在任何地方通过类名引用静态属性. < ...

  8. Python数据模型

    引言 像大多数人一样,我在对一直传统的面向过程语言C一知半解之后,走进了面向对象的世界,尽管对OOP一无所知,还好Python还保留有函数式编程,这使得我才不那么抵触,直到现在,习惯了面向对象之后,也 ...

  9. H5自适应屏幕分辨率大小

    说明: ①:H5自适应不同分辨率的设备,其实主要就一句 <meta name="viewport" content="width=device-width,init ...

  10. 设计模式(18)--Memento(备忘录模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. ...