当前位置: 首页 > 科技观察

容器技术反例:哪些不适合Docker实现?

时间:2023-03-15 01:07:50 科技观察

【.com速译】本文将详细介绍不适合Docker实现的技术。  1)容器中的数据或日志  容器适用于处理无状态、只需要短时间运行的应用。这意味着我们不应该在容器内存储数据或日志——否则当容器终止时它会消失。相反,使用卷映射将它们持久保存在容器之外。ELK栈可用于存储和处理日志。如果在测试过程中已经使用了托管卷,请在dockerrm命令中添加-v以将其删除。  2)容器IP地址  每个容器都有自己的IP地址。多组容器相互通信以创建相同的应用程序。例如,部署在应用程序服务器上的应用程序需要与数据库对话。在运行过程中,会不断关闭旧容器,并打开新容器。依赖容器IP地址意味着我们需要不断更新应用程序配置来维持这种通信能力。相反,我们应该为它创建一个专门的服务,用来容纳动态变化的容器引用逻辑名,从而实现基本的负载均衡功能。  3)在容器中运行单个进程  每个Dockerfile将使用CMD和ENTRYPOINT。一般来说,CMD会使用脚本来进行部分镜像配置,然后启动容器。不要尝试在此脚本中使用多个进程。大家在创建Docker镜像的时候要遵循分离的原则,否则会让容器在管理、日志收集和更新等方面遇到更多困难。可以考虑把应用拆分成多组容器,一个一个管理。  4)不要使用dockerexec  dockerexec命令在正在运行的容器中启动一个新命令。它适用于使用dockerexec-it{cid}bash的shell附加。但是,否则,容器本身应该已经运行了该进程。  5)保持镜像精简  新建一个目录,将Dockerfile和其他相关文件保存在里面。此外,考虑在创建图像之前使用.dockeringore删除任何日志、源代码等。确保删除所有解压的下载包。  6)使用正在运行的容器创建镜像  应该使用dockercommit命令创建新的镜像。这种方法适用于容器发生变化的情况。然而,这样创建的图像是不可复制的。相反,我们应该在Dockerfile中进行修改以终止现有容器并使用更新后的图像启动一个新容器。  7)Docker镜像中的安全凭证  不要将安全凭证存储在Dockerfile中。它将以明文形式存在并被签入存储库,这会构成潜在的安全威胁。使用-e将密码指定为环境更改。然后,您可以使用--env-file读取文件中的环境变量。另一种解决方案是使用CMD或ENTRYPOINT指定一组脚本。该脚本负责从第三方提取凭据并使用它们来配置应用程序。  8)最新标签  很多朋友可能习惯用couchbase启动镜像。如果没有指定标签,容器将默认为couchbase:latest图像。该镜像可能不是最新的,而是引用了旧版本。需要强调的是,将应用程序投入生产需要具有特定映像版本的完全受控环境。确保始终使用正确的标签来运行容器-例如couchbase:enterprise-4.5.1而不是couchbase。  9)MirrorMismatch  不要在开发、测试、暂存和生产环境中使用不同的图像或标签。作为“选定来源”的图像应该只创建一次并推送到存储库中。此图像应在各种不同的环境中使用。在某些情况下,您可能会考虑在创建映像之前对WAR文件运行单元测试。但是请注意,任何系统集成测试都应该在生产中使用的实际图像上进行。  10)发布端口  不要使用-P来发布所有公共端口,因为这样你就可以运行多组容器并发布它们的公共端口。这样做也意味着所有端口都将公开发布。相反,使用-p发布特定端口。  原标题:DockerContainerAnti-Patterns,原作者:ArunGupta