镜像泊坞窗内容信任
TL; DR – 如何运行(可能不安全的)dockerregistry镜像并信任内容?
我有一系列设备在封闭的networking上运行docker集装箱,没有互联网接入。 我可以暂时将一台笔记本电脑连接到networking。 最终目标是更新这些设备正在运行的容器映像。
原则上我可以通过以下方式来实现这一点
- 从互联网registry(Docker中心或私人)拉到笔记本电脑。
- 在笔记本电脑上运行registry。
-
推到这个registry
docker tag myorgname/trusttest:latest laptophostname:80/myorgname/trusttest:latest docker push laptophostname:80/myorgname/trusttest:latest
- 断开笔记本电脑与互联网的连接并连接到封闭的networking。
-
告诉设备做一个
docker pull laptophostname:80/myorgname/trusttest:latest docker tag laptophostname:80/myorgname/trusttest:latest myorgname/trusttest:latest
并重新启动他们的容器与新的形象(我怎么做这不是特别相关,让我们只是说,我可以沟通laptophostname
给他们,他们做的rest)。
但是,真正重要的是我能够与Docker Content Trust(又名公证人)合作。 否则,任何人都可以连接到networking,并告诉设备开始运行任意代码。
我也可以在笔记本电脑上运行一个公证服务器,而且这个工作正常,除了当我从我的本地docker工人将新的图像推到笔记本电脑上的registry(上面的第3步)时,它要求我签署新的签名密钥,容器新的信任信息而不是仅仅复制原始开发者创build的信任。
目前,我已经控制了用于更新的机器(即笔记本电脑),但将来可能不是这种情况,所以我不想在这上面有任何开发人员密钥。 公证人宣称不安全的镜像是一个用例,那么如何让它与docker一起工作呢?
编辑
这可能是也可能不是相关的,但是这个想法是,客户一次购买一个或多个这些设备并分阶段地将它们添加到networking中。 我需要一种提供已签名软件更新的方式,因此是编写应用程序以充当registry镜像的原始计划。 如果没有内容信任,就很容易欺骗设备运行任何图像。
我build议你看Docker swarm,因为你提到的许多事情都是由Docker swarm处理的。 https://docs.docker.com/engine/swarm/
特别是,您可以将您的笔记本电脑设置为swarm manager节点,这是唯一有权在工作节点上更新容器的节点。