本文绝大部分篇幅是翻译了docker registry的官方文档1,如有问题,请各位不吝指正。好,废话不多说,请见正文。

在你部署一个registry之前,你需要首先在你的主机上安装一个Docker. Registry 是一个跑在Docker里面的registry镜像的实例。

本次主题提供了部署和配置registry的基础信息。如需详尽的配置信息,请查看配置指南。

如果你有一个air-gapped 数据中心,请查阅air-gapped registry条件

部署本地registry

使用下面的命令启动一个registry container:

$ docker run -d -p 5000:5000 --restart=always --name registry registry:2

之后,该registry 就可以正常工作了。

警告:这个案例只是用来展示registry配置的,只适用于测试。一个产品级的registry必须受TLS保护,而且必须启用权限控制。继续阅读,参照配置指南去部署一个产品级的registry

从Docker Hub上下载一个镜像到你的registry

你可以从Docker Hub 上下载一个镜像,然后推送到你的registry中。以下展示了从Docker Hub上下载ubuntu:16:04 镜像,然后重新打上my-ubuntu 的标签,然后将他推送到本地registry中。最终,删除本地的ubuntu:16:04my-ubuntu 镜像,然后从本地的registry 中下载ubuntu:16:04 镜像。

  1. Docker Hub 中下载ubuntu:16:04 镜像:
$ docker pull ubuntu:16.04
  1. ubuntu:16.04 重新打上localhost:5000/my-ubuntu 标签。这条命令为已经存在的镜像创建了一个额外的标签。如果标签的前部是一本IP地址和端口号,当推送镜像时,Docker 会解析这为一个registry的地址。
$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
  1. 推送镜像到跑在本地5000端口的registry
$ docker push localhost:5000/my-ubuntu
  1. 删除本地缓存的ubuntu:16:04localhost:5000/my-ubuntu 镜像,测试从你的registry中拉取镜像。拉取镜像并不会从你的registry中移除镜像。
$ docker image remove ubuntu:16.04
$ docker image remove localhost:5000/my-ubuntu
  1. 从你的registry中拉取localhost:5000/my-ubuntu 镜像
$ docker pull localhost:5000/my-ubuntu

停止运行你的registry

使用和停止其他容器相同的docker container stop命令来停止你的registry

$ docker container stop registry

使用docker container rm 命令来移除此container

$ docker container stop registry && docker container rm -v registry

基础配置

你可以使用docker run命令来传输额外的或者修改过的配置项到container中。
以下章节提供基础的配置registry的指导。如需详细信息,请查阅registry 配置指南。

自动启动registry

如果你想将registry 成为你常驻基础设施的一部分,你应该设置registryDocker 重启或者存在而重启。以下例子展示了通过设置 --restart always 配置项定义了registry的重启策略。

$ docker run -d \-p 5000:5000 \--restart=always \--name registry \registry:2

自定义启动端口

如果你已经使用了5000端口,或者你想运行多个本地registry,用来分隔关注的领域,你可以自定义registry的端口。下面例子中定义了一个名字为registry-test,跑在5001端口上的registry。请记住, -p 的第一个部分是主机的关口,第二个部分是容器的端口。容器中,registry默认监听5000端口。

$ docker run -d \-p 5001:5000 \--name registry-test \registry:2

如果你想要改变容器中registry默认监听的端口,你可以定义一个环境变量REGISTRY_HTTP_ADDR 来改变默认端口设置。下面的命令可以是registry监听容器中的5001端口:

$ docker run -d \-e REGISTRY_HTTP_ADDR=0.0.0.0:5001 \-p 5001:5001 \--name registry-test \registry:2

自定义存储

自定义存储位置

默认情况下,你的registry数据会以docker volume的形式保存在主机的文件系统。如果你希望改变你的registry内容的存储位置,譬如你已经有块挂载到指定目录的SSD或者SAN,你可以决定只用一个挂载点来代替。一个挂载点是强依赖Docker 主机的文件系统的,但是在很多情境下很好用。下面的例子展示了绑定本地的/mnt/registry 到registry容器中的 /var/lib/registry/.

$ docker run -d \-p 5000:5000 \--restart=always \--name registry \-v /mnt/registry:/var/lib/registry \registry:2

自定义存储后端

默认情况下,无论你使用挂载点或者volume形式,registry 都会将数据保存在本地的文件系统中。你可以使用存储驱动存储registry的数据到Amazon S3 bucket, Google Cloud Platform, 或者其他存储后端。如需获取更多信息,请访问存储配置选项。

运行一个外部可访问的registry

只运行一个本地可访问的registry 会有使用限制。为了使你的 registry可以对外访问,你可以首先配置TLS 安全访问。
本例是将启动容器作为一种服务来提供出去。

获取证书

下面的例子假设:

  • 你的registry地址是https://myregistry.domain.com/.
  • 你的DNS,路由,防火墙设置可以通过主机的443端口你的registry
  • 你已经从CA哪里获取了一个认证

如果你想使用中级证书代替,详情查阅下文中级证书。

新建一个证书目录。

$ mkdir -p certs

拷贝.crt.key 文件到新建的certs 目录中。接下来的步骤假设认证文件domain.crtdomain.key.

停止当前正在跑的registry。

$ docker container stop registry

重启registry,使其使用TLS 证书。下面的命令挂载本机certs/ 目录到容器中的/certs/目录, 而且设置环境变量告诉容器在那里发现domain.crtdomain.key 问加你。registry跑在443 端口,为默认的HTTPS 端口。

$ docker run -d \--restart=always \--name registry \-v "$(pwd)"/certs:/certs \-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \-p 443:443 \registry:2

Docker 客户端现在可以使用registry的外部地址,推送和下载镜像到你的registry中。下面的命令可以证明:

$ docker pull ubuntu:16.04
$ docker tag ubuntu:16.04 myregistrydomain.com/my-ubuntu
$ docker push myregistrydomain.com/my-ubuntu
$ docker pull myregistrydomain.com/my-ubuntu

使用中级证书

一个证书发行者可以提供给你中级证书。这种情况下,你可以讲你的证书和中级证书串成一个bundle(不知道怎么翻译这个词~~)。你可以使用如下命令:

$ cat domain.crt intermediate-certificates.pem > certs/domain.crt

现在你可以使用这个证书bundle,就如上一个例子当中那样。

支持 Let’s Encrypt

registry支持使用 Let’sEncrypt 获得浏览器信任的证书。详细信息请查阅 Let’s Encrypt 和 registry 配置的相关章节。

使用不安全的registry(仅供测试使用)

使用自签证书也是有可能的,或者以一种不被信任的方式使用registry。除非你已经对你的自签证书做好验证,否则这只供测试使用。详情查看使用不安全的registry。

docker-compose

总结以上,可以使用docker-compose 配置文件启动一个安全的docker registry。

version: '3'
services:registry:image: registry:2ports:- 443:443environment:REGISTRY_AUTH: htpasswdREGISTRY_AUTH_HTPASSWD_REALM: 'Registry Realm'REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswdREGISTRY_DELETED_ENABLED: 'true'REGISTRY_HTTP_ADDR: 0.0.0.0:443REGISTRY_HTTP_TLS_CERTIFICATE: /certs/registry.crtREGISTRY_HTTP_TLS_KEY: /certs/registry.keyvolumes:- /docker/registry:/var/lib/registry- ./certs:/certs- ./auth:/auth

启动命令:

$ docker-compose up -d

操作要点

  • 生成ca证书,启动tls连接
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout certs/domain.key -out certs/domain.crt
  • unknown authority 解决
    可以采用将证书内容添加操作系统的CA信任库中/etc/pki/tls/certs/ca-bundle.crt或者将CA证书放到/etc/docker/certs.d/<registry>/目录中
  • 限制访问,可以使用双向SSL方法或者密码的方法
    • 采用密码方式
    docker run --rm --entrypoint htpasswd registry:2 -Bbn root passw0rd  > auth/htpasswd
    
    • 采用双向SSL 方式
      太复杂,暂时不介绍

参考

  • https://blog.csdn.net/yucdsn/article/details/85267056
  • https://www.jianshu.com/p/781b3e27793c
  • https://www.cnblogs.com/xcloudbiz/articles/5526262.html
  • http://www.cnblogs.com/guogangj/p/4118605.html
  • http://dockone.io/article/1277

附录


  1. https://docs.docker.com/registry/deploying/ ↩︎

部署docker registry相关推荐

  1. Docker Registry部署镜像私有仓库及鉴权认证

    文章目录 一.Docker Registry是什么? 二.Docker Registry部署私有仓库 2.1.Docker Registry安装 2.2.Docker Registry配置 2.3.启 ...

  2. Docker Registry 私服

    安装 Docker Registry 私服 概述 官方的 Docker Hub 是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器 ...

  3. 【Docker】registry部署docker私有镜像仓库

    Docker Hub作为Docker默认官方公共镜像仓库,但是如果我们不想使用怎么办,第一我们可以替换默认镜像仓库为我们国内的一些镜像仓库,第二就是如我们自己搭建一个自己的私有镜像仓库,官方也提供do ...

  4. Docker的使用(四:Docker Registry本地私有仓库搭建知识点总结)

    任务一: Docker Registry本地私有仓库搭建 1.启动Docker Registry: 2.重命名镜像: 3.推送镜像: 4.浏览器查看验证: 5.文件查看验证: 任务二:Docker R ...

  5. 正式环境docker部署hyperf_应用部署 - Docker Swarm 集群搭建 - 《Hyperf v1.1.1 开发文档》 - 书栈网 · BookStack...

    Docker Swarm 集群搭建 现阶段,Docker容器技术已经相当成熟,就算是中小型公司也可以基于 Gitlab.Aliyun镜像服务.Docker Swarm 轻松搭建自己的 Docker集群 ...

  6. Docker registry V2

    部署私有Docker Registry 搭建 Insecure Registry 修改Registry server上的Docker daemon的配置,为DOCKER_OPTS增加–insecure ...

  7. Tungsten Fabric SDN — 制作/分发 Local Docker Registry

    目录 文章目录 目录 收集 Docker Images 部署 Local Docker Registry 上传 Docker Image 到 Local Docker Registry 分发 Loca ...

  8. centos7+ docker1.12 实践部署docker及配置direct_lvm

    2019独角兽企业重金招聘Python工程师标准>>> centos7+ docker1.12 实践部署docker及配置direct_lvm 博客分类: docker 前言 Doc ...

  9. Docker Registry本地私有仓库搭建

    相比Docker Hub而言,Docker Registry的功能就不够全面了,且需要自己手动配置.升级.维护和管理,所以说对于Docker镜像管理不太熟悉的人员推荐使用Docker Hub.如果开发 ...

最新文章

  1. 2021年大数据环境搭建(一):​​​​​​​​​​​​​​​​​​​​​Hadoop编译
  2. iOS - 数据的归档和反归档
  3. SD--如何在输出控制中增加自定义字段
  4. python中的sys模块和os_python中os与sys作用与区别
  5. MacOS安装pip失败,提示:SyntaxError: invalid syntax
  6. Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例
  7. 水晶报表设置二维码_随时随地数据分析?老板喜欢的移动端报表,我用这七步做出来了...
  8. [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金
  9. 万字通俗讲解何为复杂度
  10. 01_Redis基础
  11. Git-简单安装与使用
  12. 接口协作--apipost接口协作工具
  13. mysql中使用case when语句
  14. 增值税发票的种类_以及税率---财务知识工作笔记001
  15. 数据管理(DMS):谁动了线上数据?
  16. redis基础知识——菜鸟教程
  17. DC域【软件分发】失败的处理手段
  18. 【离散数学】求闭包的例题
  19. 我又拖后腿了, 2月全国程序员平均工资13716元!
  20. MSP430初学three

热门文章

  1. 内网横向渗透神器-CS
  2. 了不起的Smalltalk,图灵奖得主之作,苹果、微软的灵感来源
  3. 方维分享系统二次开发,tip.htm,修改调用的当前用户的信息
  4. 腾讯音乐将回归港股二次上市;万豪集团旗下精选服务品牌在中国第150家酒店开业 | 美通企业日报...
  5. 详细分析冒泡排序、选择排序、插入排序(最好/最坏/平均时间复杂度(有序度)、稳定性、内存消耗(原地排序))
  6. delphi2007下使用indy连接https时could not load ssl library问题的解决
  7. OpenCV 基本阈值操作
  8. three.js中的object3D对象
  9. wgrib,wgrib2下载与ECWMF数据读取
  10. 实例详解如何实现来电拦截及拦截后的提示音