我有兴趣使用Docker来托管我在工作中正在协助开发的项目。然而,我有几个关于它适用性的问题。
首先,我想知道是否有可能隐藏源代码以防止潜在用户/客户看到?显然,Docker政策的一部分是代码开源,但是否有任何方法添加权限以锁定除指定用户/开发人员之外的任何其他人?
其次,就我们正在开发的产品而言,某些用户可能只希望访问产品的一个方面。是否有任何方法可以向Docker注册表添加权限,使客户只能访问其请求的内容?
我有兴趣使用Docker来托管我在工作中正在协助开发的项目。然而,我有几个关于它适用性的问题。
首先,我想知道是否有可能隐藏源代码以防止潜在用户/客户看到?显然,Docker政策的一部分是代码开源,但是否有任何方法添加权限以锁定除指定用户/开发人员之外的任何其他人?
其次,就我们正在开发的产品而言,某些用户可能只希望访问产品的一个方面。是否有任何方法可以向Docker注册表添加权限,使客户只能访问其请求的内容?
不确定OP是否需要这个,但根据问题的上下文,VonC的答案可能是不完整的:
如果项目有可与项目源代码分开共享的交付成果物,则确实可以按照所建议的进行操作。例如,您可以使用Dockerfile创建图像设置系统,获取源代码,将项目编译为可交付成果物并删除源代码(或在其他地方编译并复制它)。这是构建此软件包并向客户发布它的一种好而安全的方式。这就是@VonC在他的答案中提出的内容。
我想补充一下,如果您正在查看的是某些难以从交付成果物中分离出代码的Web系统,例如HTML / PHP等系统,则会很棘手。
问题在于,最终图像将与客户端服务器相同。无论如何,它都是完全可访问的,并且上面的所有内容都是可以读取的。因此,即使不必在系统上保留源代码和机密信息,也不能使用docker作为打包方法来交付隐藏源代码的自包含系统。
因此,您无法锁定任何人访问该镜像;您只能确保编译项目所需的任何内容在最终图像中不可用。如果“秘密”内容在编译后不再需要,则这只是一种解决方案。
Kauê Oliveira在评论中提出了一个有趣的问题:
容器运行时,它并不会阻止任何人访问代码。你可以进入容器进行sh操作并且做任何你想做的事情。
关于 "容器镜像是否包含应用程序源代码?" 也有类似的辩论。
当然,这取决于应用程序:
从那个线程中得到:
这个想法是,你的容器映像包含运行应用程序所需的一切,而没有其他(或者尽可能少的其他内容)。例如,如果你有一个Java应用程序,你不希望在最终只需要编译后的Java代码和JRE时,必须发送完整的JDK、所有构建工具和插件等。这会减小映像的总体大小和最终运行应用程序的安全足迹。env
变量。这样,任何随机人员拉取你的映像都看不到你的代码,如果这是你关心的问题。老实说,PHP代码似乎从未如此复杂,以至于你无法理解某些函数是如何完成的。如果有人想窃取你的想法,他们会这样做,无论你如何试图混淆它。COPY
命令将其复制进去,那么它就不可访问。而在容器内部,你是由 Dockerfile 中的 USER
指令指定的用户,这个用户并不总是 root 用户。 - VonC