使用公共 Registry

Docker Hub 是 Docker 公司维护的公共 Registry。用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中。如果不希望别人访问自己的镜像,也可以购买私有 repository。

除了 Docker Hub,quay.io 是另一个公共 Registry,提供与 Docker Hub 类似的服务。

下面介绍如何用 Docker Hub 存取我们的镜像。

  1. 首先得在 Docker Hub 上注册一个账号。

  2. 在 Docker Host 上登录。

    这里用的是我自己的账号,用户名为 cloudman6,输入密码后登录成功。

  3. 修改镜像的 repository 使之与 Docker Hub 账号匹配。
    Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[username]/xxx:tag
    我们通过 docker tag 命令重命名镜像。

    注:Docker 官方自己维护的镜像没有用户名,比如 httpd。

  4. 通过 docker push 将镜像上传到 Docker Hub。 

    Docker 会上传镜像的每一层。因为 cloudman6/httpd:v1 这个镜像实际上跟官方的 httpd 镜像一模一样,Docker Hub 上已经有了全部的镜像层,所以真正上传的数据很少。同样的,如果我们的镜像是基于 base 镜像的,也只有新增加的镜像层会被上传。如果想上传同一 repository 中所有镜像,省略 tag 部分就可以了,例如:  docker push cloudman6/httpd

  5. 登录 https://hub.docker.com,在Public Repository 中就可以看到上传的镜像。 如果要删除上传的镜像,只能在 Docker Hub 界面上操作。

  6. 这个镜像可被其他 Docker host 下载使用了。 

下一节讨论如何搭建本地 Registry。

搭建本地 Registry

Docker Hub 虽然非常方便,但还是有些限制,比如:

  1. 需要 internet 连接,而且下载和上传速度慢。

  2. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。

  3. 安全原因很多组织不允许将镜像放到外网。

解决方案就是搭建本地的 Registry。

Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面我们就在 Docker 中运行自己的 registry。

  1. 启动 registry 容器。

    我们使用的镜像是 registry:2。 docker run -tid -p 5000:5000 -v /home/docker_registry:/var/lib/registry registry:2

  2. -d 是后台启动容器。
    -p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口。端口映射我们会在容器网络章节详细讨论。
    -v 将容器 /var/lib/registry 目录映射到 Host 的 /myregistry,用于存放镜像数据。-v 的使用我们会在容器存储章节详细讨论。

  3. 通过 docker tag 重命名镜像,使之与 registry 匹配。
    我们在镜像的前面加上了运行 registry 的主机名称和端口。
    前面已经讨论了镜像名称由 repository 和 tag 两部分组成。而 repository 的完整格式为:[registry-host]:[port]/[username]/xxx
    只有 Docker Hub 上的镜像可以省略 [registry-host]:[port] 。

  4. 通过 docker push 上传镜像。

  5. 现在已经可通过 docker pull 从本地 registry 下载镜像了。
    除了镜像的名称长一些(包含 registry host 和 port),使用方式完全一样。

  6. 上传下载和查看[注意127.0.0.1最好改成宿主机的ip]

查看私有仓库有哪些镜像
curl http://127.0.0.1:5000/v2/_catalog 上传镜像
docker tag centos  127.0.0.1:5000/centos //标记一下tag必须要带有私有仓库的ip:port
docker push 127.0.0.1:/centos
报错:
  The push refers to a repository [192.168.1.100:5000/registry]   Get https://192.168.1.100:5000/v1/_ping: http: server gave HTTP response to HTTPS client
解决:/etc/docker/daemon.json 文件里添加下面红色的部份。
  {"registry-mirrors": ["http://db411c61.m.daocloud.io"],"insecure-registries":["192.168.159.30:5000"]}
下载镜像 docker pull 127.0.0.1:/centos

以上是搭建本地 registry 的简要步骤。当然 registry 也支持认证,https 安全传输等特性,具体可以参考官方文档 https://docs.docker.com/registry/configuration/

最新文章

  1. Java c3p0连接池
  2. BIOS MCSDK 2.0 学习笔记(二)————使用Platform Library创建工程
  3. ToolStrip控件在窗体没有焦点的情况下,需要单击二次才能够激发事件的解决办法
  4. Large sum
  5. linux下执行sh文件报错:oswatcher_restart.sh: line 13: ./startOSW.sh: Permission denied
  6. POJ1274_The Perfect Stall(二部图最大匹配)
  7. js实现鼠标拖拽div-------Day44
  8. HDU 1248 寒冰王座
  9. 冬天 苹果笔记 macbook pro 消除静电的方法
  10. HTML5使用Canvas来绘制图形
  11. zabbix基础服务搭建
  12. laravel依赖注入 容器
  13. Python3-进程池与线程池
  14. build to win读后感
  15. better-scroll的参数和方法
  16. iOS 自动移除KVO观察者
  17. nginx自旋锁
  18. 远程连接Oracle数据库
  19. Ubuntu:如何显示系统托盘图标(systray)
  20. Java反射机制demo(六)—获得并操作一个类的属性

热门文章

  1. Tomcat负载均衡图片显示不正常解决方法
  2. thinkphp 根据文件后缀的不同返回不同的结果
  3. css 导航菜单+下拉菜单
  4. python count()函数
  5. 59、salesforce实现数据的批量处理
  6. (转)GitHub上想下载单个文件方法
  7. 运维 07 Linux系统基础优化及常用命令
  8. Emacs 25.1 error solved: url-http-create-request: Multibyte text in HTTP request
  9. vim的基本快捷操作(二)——可视模式
  10. Python之小测试:用正则表达式写一个小爬虫用于保存贴吧里的所有图片