Docker容器反模式

该博客将介绍我在过去几个月中看到的10种容器反模式:

  1. 容器中的数据或日志 –容器是无状态应用程序的理想选择,并且具有短暂性。 这意味着不应将任何数据或日志存储在容器中,否则当容器终止时它们将丢失。 而是使用卷映射将它们持久保存在容器之外。 ELK堆栈可用于存储和处理日志。 如果在早期测试过程中使用了托管卷,请使用-v switch和docker rm命令删除托管卷。
  2. 容器的IP地址 –为每个容器分配一个IP地址。 多个容器相互通信以创建应用程序,例如,部署在应用程序服务器上的应用程序将需要与数据库进行通信。 现有容器将终止,新容器将始终启动。 依靠容器的IP地址将需要不断更新应用程序配置。 这将使应用程序变得脆弱。 而是创建服务。 这将提供一个逻辑名称,可以独立于容器数量的增加和减少而进行引用。 它还提供了基本的负载平衡。
  3. 在容器中运行单个进程Dockerfile使用一个CMDENTRYPOINT 。 通常,CMD将使用脚本来执行映像的某些配置,然后启动容器。 不要尝试使用该脚本启动多个进程。 创建Docker映像时遵循关注点分离模式很重要。 这将使管理容器,收集日志,更新每个单独的流程变得更加困难。 您可以考虑将应用程序分解为多个容器并独立进行管理。
  4. 不要使用docker execdocker exec命令在正在运行的容器中启动新命令。 这对于使用docker exec -it {cid} bash附加外壳非常有用。 但是除了容器已经在运行它应该运行的进程以外。
  5. 保持映像精简 –创建一个新目录,并将Dockerfile和其他相关文件包含在该目录中。 在创建映像之前,也请考虑使用.dockerignore删除任何日志,源代码,日志等。 确保解压缩所有下载的工件后,将其删除。
  6. 从正在运行的容器中创建映像 –可以使用docker commit命令创建新映像。 在容器中进行任何更改时,这很有用。 但是使用此方法创建的图像是不可复制的。 而是在Dockerfile中进行更改,终止现有容器并使用更新的映像启动新容器。
  7. Docker映像中的安全凭证 –不要在Dockerfile中存储安全凭证。 它们以明文形式并检入到存储库中。 这使他们完全脆弱。 使用-e将密码指定为运行时环境变量。 另外,-- --env-file可用于从文件读取环境变量。 另一种方法是使用CMDENTRYPOINT指定脚本。 该脚本将从第三方提取凭据,然后配置您的应用程序。
  8. latest标签 :以像couchbase这样的图像couchbase很诱人。 如果未指定标签,则使用图像couchbase:latest启动容器。 该图像可能实际上不是最新的,而是指向较旧的版本。 将应用程序投入生产需要具有映像精确版本的完全控制器环境。 阅读此Docker: Docker队长@adrianmouat 的最新困惑帖子。 确保在运行容器时始终使用标签。 例如,使用couchbase:enterprise-4.5.1 ,而不是只是couchbase
  9. 阻抗不匹配 –在开发,测试,测试和生产环境中,请勿使用不同的图像,甚至不要使用不同的标签。 作为“真理之源”的图像应创建一次并推送到存储库中。 该映像应用于以后的不同环境。 在某些情况下,您可以考虑在Maven构建中对WAR文件运行单元测试,然后创建映像。 但是任何系统集成测试都应该在将要投入生产的映像上进行。
  10. 发布端口 –不要使用-P发布所有公开的端口。 这将允许您运行多个容器并发布它们的暴露端口。 但这也意味着将发布所有端口。 而是使用-p发布特定端口。

您还遵循其他哪些反模式?

适用于Java开发人员的Docker是一个自定进度的动手实践讲习班,它解释了如何开始使用适用于Java开发人员的Docker。

对更深入的潜水教程感兴趣吗? 观看JavaOne的2小时教程!

couchbase.com/containers展示了如何在各种框架中运行Couchbase。

翻译自: https://www.javacodegeeks.com/2016/11/docker-container-anti-patterns.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值