- 最新
- 投票最多
- 评论最多
【以下的回答经过翻译处理】 这是可能的,但为什么要这样做呢?
在许多情况下,开发人员选择构建最小可能的容器,其中映像不包含任何shell二进制文件。
例如,开发人员决定构建一个Go应用程序,并将所有依赖项链接到二进制文件中。他可以使用scratch基础(https://hub.docker.com/_/scratch)构建此映像,这将创建仅包含二进制文件和指向执行此二进制文件的指针的Docker容器。
同时,还有其他项目使用scratch来构建其他基础镜像,如Debian,busybox,这些镜像将包含用于执行的shell访问和其他库依赖项,与前面的示例相比,容器映像会更大。
因此,在Docker中有Ubuntu、Debian等许多容器映像,我们应该将它们用于工作负载吗?如果是生产工作负载,我建议将容器最小化,仅包含所需的组件,这将占用更少的磁盘空间,引导时间会更短,因为容器映像更小,并且不会提到没有任何shell二进制文件或其他应用程序不使用的组件,将会大大降低容器应用程序的远程漏洞的机会。
但我应该在哪里运行这些Linux发行版映像?也许当您在桌面上开发软件或需要在多个Linux发行版版本中测试某些桌面应用程序时,您可以拥有一系列容器映像来在其中的所有测试中运行,无需使用VM或物理服务器。
这是你的客户案例吗?在他需要测试的地方构建桌面应用程序?也许即使他需要测试这样的应用程序,他也可以运行自动脚本来执行命令,并在日志中返回结果。如果是这样的话:我的客户需要了解应用程序中发生的事情,并在出现问题时进行调试。在这种情况下,建议的方法是启用应用程序日志记录(每种语言都提供一个日志库,如果没有,一个简单的打印语句可以将日志输出到stdout或stderr,所有这些输出都可以被Cloudwatch捕获并流式传输到Cloudwatch日志中进行查看。
如果问题是内存利用率、临时文件等,我只需要添加一个环境变量来设置日志的详细级别,并包括日志记录语句,以便在日志中输出此类事件进行分析。
嗯,你的客户可以采用很多技巧来避免在应用程序中使用shell。
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前