4.3.3、部署一个 Registry 服务

你显然需要 安装Docker (Docker1.6.0 或者更新的版本)

入门指南

启动你的 Registry:

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

只需这样,你的 Registry 就启动了。

你现在可以使用 tag 命令修改一个镜像的标签,然后,用 push 命令上传到你的 Registry 服务上。

$ docker pull ubuntu && docker tag ubuntu localhost:5000/batman/ubuntu
$ docker push localhost:5000/batman/ubuntu

然后,用 pull 命令把它拉取到本地。

$ docker pull localhost:5000/batman/ubuntu

我的数据在哪里呢?

默认情况下,你的registry把数据都存储在容器内部的本地文件系统当中。

但是在生产环境下,我们强烈的建议你通过修改配置策略,使用其他的存储服务后台。

如果你坚持使用默认存储策略,你可以把你的数据放到容器外面。

这里通过挂载一个数据卷到容器中,实现数据的外放:

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

共享你的Registry

现在你的registry运行在 localhost, 你可能想于其他主机分享它。

假设你的 registry 可以通过myregistrydomain.com 域名进行访问(监听 5000)

如果你尝试执行 docker pull myregistrydomain.com:5000/batman/ubuntu 命令,你将看到以下的错误信息:

FATA[0000] Error response from daemon: v1 ping attempt failed with error:
Get https://myregistrydomain.com:5000/v1/_ping: tls: oversized record received with length 20527. 
If this private registry supports only HTTP or HTTPS with an unknown CA certificate,please add 
`--insecure-registry myregistrydomain.com:5000` to the daemon's arguments.
In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag;
simply place the CA certificate at /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt

如果尝试连接到一个非 localhost registry,Docker要求你使用https模式,或者用 insecure registry 明确指定你的registry。

在这里,你有三个可选的方案来达到安全的需求。

1. 购买域的SSL证书

这个是强烈推荐的解决方案:

你只需花费10美元获取证书一年的使用权(有些数字证书认证中心甚至提供免费的证书),解决很不多不必要的麻烦。

假设你现在已经拥有一个 domain.crt 和 domain.key 在certs文件夹内:

# Stop your registry
docker stop registry && docker rm registry

# Start your registry with TLS enabled
docker run -d -p 5000:5000 \
	-v `pwd`/certs:/certs \
	-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
	-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
	--restart=always --name registry \
	registry:2

优点:

  • 最佳解决方案
  • 没有后顾之忧(假设你的数字证书是从你的操作系统认可的CA机构处购买的)

缺点:

2.使用inscure让docker信任你的Registry

这种方式的实现思路就是让docker完全忽略你的registry的安全性。

  1. 在 /etc/default/docker 文件中添加:DOCKER_OPTS="--insecure-registry myregistrydomain.com:5000" (或者 DOCKER_OPTS中追加)。 重启docker 服务。
  2. 在乌班图系统中,重启Docker守护进程。一般都是用 service docker stop && service docker start命令。

优点:

  • 容易配置

缺点:

  • 非常不安全
  • 每台想访问你的registry的docker守护进程,都必须先修改它的配置。

3. 使用一个自己签名的证书添加到docker的认证中心


或者,您可以生成自己的证书:

mkdir -p certs && openssl req \
	-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
	-x509 -days 365 -out certs/domain.crt

一定要使用 myregistrydomain.com 作为CN的名字。

为了让每一个docker守护进程通过安全验证。你只需将 domain.crt 文件拷贝到/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt 即可(复制以后,不要忘记重启docker)。

优点:

  • 比方案2更安全

缺点:

  • 每台想访问你的registry的docker守护进程,都必须先修改它的配置。

使用Compose

强烈建议使用Docker Compose 工具管理你的Registry。

这里只需一个简单配置文件 docker-compose.yml 就能达到方法3的效果。

registry:
  restart: always
  image: registry:2
  ports:
    - 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
  volumes:
    - /path/registry-data:/var/lib/registry
    - /path/certs:/certs

你只需这行简单的命令就能启动你的registry

$ docker-compose up -d
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值