部署和配置本地Docker缓存代理

最近,我正在研究为Fabric8开发环境 下载的Docker层缓存,以允许我丢弃运行Docker守护程序的vm,并避免每次重新创建vm时都重新下载基本映像。

像往常一样,我尝试首先打谷歌,并指出了以下几页:

由于我经常使用Jerome Petazzoni的方法来处理透明的Squid + iptables以缓存和嗅探简单的HTTP流量(通常是从Java程序调用HTTP),因此我发现第一个基于解决方案的方法是有意义的,因此我首先尝试了这一方法。

原来, 第二个链接是我所寻找的 ; 但是我仍然花了一些好学习时间,从第一个开始就不再提出建议,学习了Squid在Docker Hub使用的Amazon Cloudfront CDN上无法发挥那么好的作用。 但是我不得不承认这很有趣
现在,我知道如何将调用转发到Squid来命中一个中间的拦截器,该拦截器与查询参数,标头和其他所有内容混杂在一起。
我找不到适用于Cloudfront的有效组合,但是现在我大概可以复制臭名昭著的Cats Proxy Prank 。 =)

无论如何,正如我所说的,我真正想要的是第二个链接,该链接向您展示如何设置中间Docker代理,在默认的常规Docker Hub公共服务器之前,您的Docker守护进程将尝试对其进行攻击。

我几乎需要的所有内容都在该页面中,但是我发现该信息比所需的信息更加神秘 。 这样做的主要原因是因为该示例假定我需要安全性(TLS),但由于代理完全是本地的,所以这并不是我的情况 。 此外,它还展示了如何使用YAML configuration配置 Docker Registry。 同样,它并不是很复杂,但是确实超出了需要。 是的,因为您真正需要启动最简单的本地(非安全)Docker代理的是此oneliner

docker run -p 5000:5000 -d --restart=always --name registry   \
  -e REGISTRY_PROXY_REMOTEURL=http://registry-1.docker.io \
  registry:2

此处有趣的部分是registry映像,它支持一种聪明的替代方式将配置转发给它 ,从而使您免于向其传递YAML配置文件。 这里描述的想法是,如果遵循环境变量的命名约定,该约定反映了YAML树的层次结构,则可以执行以下操作:

...
proxy:
  remoteurl: http://registry-1.docker.io
...

您应该在.yaml文件中编写并以这种方式传递给进程:

docker run -d -p 5000:5000 --restart=always --name registry \
  -v `pwd`/config.yml:/etc/docker/registry/config.yml \
  registry:2

进入更加方便的位置-e REGISTRY_PROXY_REMOTEURL=http://registry-1.docker.io运行时环境变量! 让我们对示例进行一些改进,以便我们还为Docker代理传递一个用于缓存层的非易失性存储位置 ,以便在调用之间不会丢失它们:

docker run -p 5000:5000 -d --restart=always --name registry   \
  -e REGISTRY_PROXY_REMOTEURL=http://registry-1.docker.io \
  -v /opt/shared/docker_registry_cache:/var/lib/registry \
  registry:2

现在,每当我们需要获取已经通过本地代理传递的某些Docker映像时,我们就拥有了节省大量带宽所需的一切。 剩下的唯一事情就是告诉我们的Docker守护程序要注意新的代理

# update your docker daemon config, according to your distro
# content of my `/etc/sysconfig/docker` in Fedora 23
OPTIONS=" --registry-mirror=http://localhost:5000"

重新加载(或重新启动)您的Docker守护程序,您就完成了! 请注意,如果您在单个节点上工作,那么如果重新启动守护程序,则可能还需要重新启动注册表容器。

有趣的发现是,它一直在学习Docker守护程序如果找不到指定的registry-mirror不会中断 。 因此,您可以添加配置,而不必理会它,因为您知道与Docker Hub的交互只会在缓存代理处于运行状态时才可能受益于您的缓存代理。

您可以看到它与以下测试一起使用:

docker logs -f registry

记录所有传出的下载请求 ,并且构成单个pull image操作的一组requrest将完成后,您还可以通过以下调用检查代理现在是否已完全提供映像:

curl http://localhost:5000/v2/_catalog
# sample output
{"repositories":["drifting/true"]}

这篇文章将结束,但是由于我很难显示如何禁用Internet上的安全性,因此 ,这也是一个非常简短且经过全面测试的示例,说明了如何在启用TLS的情况下实现相同功能

# generate a self signed certificate; accept default for every value a part from Common Name where you have to put your box hostname
mkdir -p certs && openssl req  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key  -x509 -days 365 -out certs/domain.crt

# copy to the locally trusted ones, steps for Fedora/Centos/RHEL
sudo cp certs/domain.crt /etc/pki/ca-trust/source/anchors/

# load the newly added certificate
sudo update-ca-trust enable

# run the registy using those keys that you have generated, mounting the files inside the container
docker run -p 5000:5000 --restart=always --name registry \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
  registry:2

# now you just need to remember that you are working in https, so you need to use that protocol in your docker daemon configuration, instead of plain http; also use that when you interact with the API in curl

翻译自: https://www.javacodegeeks.com/2016/04/deploy-configure-local-docker-caching-proxy.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值