为什么在可以安装服务或应用程序时将其 docker 化?

Why dockerize a service or application when you could install it?

我们有大约 12 项服务 和其他应用程序,例如 presto。

我们正在考虑为每个服务和应用程序构建 Docker 容器。将它们全部 docker 化是否正确?

什么时候 Docker 容器不是理想的解决方案?

docker使用多个服务没有问题。我认为你也需要考虑以下事情。

你要考虑如何把你用过的数据保存在容器里面。默认情况下,容器内的数据将在容器关闭时销毁。您可能必须安装一个卷才能永久保存数据。

在 docker 中 运行 时,您可能无法获得裸机性能。

IMO 如果您要 运行 docker 中的所有应用程序,这不是一个好的选择,除非您需要利用容器化。但是 运行 无状态应用程序和服务很容易 docker.

您应该将所有基于 Linux 的 无状态且需要频繁 upgrades/changes/patches 的服务容器化。这些包括所有类型的前端和应用程序服务器。

另一方面,

Databases/datastores 是一个更复杂的案例,因为存在性能和数据问题 persistence/integrity。此外,数据库 upgraded/patched 不像前端应用程序那么频繁。

*Windows 容器只会 运行 在 Windows.

优点:

  1. 为您的团队快速设置本地环境 - 如果您已将所有服务容器化。这将是为您的开发团队快速设置的环境。
  2. 有助于避免 "It works on mine, but doesn't work on yours problem" - 我们的许多开发问题通常源于开发环境设置。如果您将服务容器化,其中很大一部分会被卸载到其他地方。
  3. 更轻松的部署 - 虽然我们都有不同的代码部署过程,但它表明将它们容器化会让事情变得容易得多。
  4. 更好的版本控制 - 如您所知,可以标记,这有助于版本控制。
  5. 更容易回滚 - 因为你有版本控制,所以回滚你的代码更容易。有时,只需简单地指向您以前的工作版本。
  6. 简单的多环境设置 - 正如大多数开发团队所做的那样,我们设置了 localintegrationstagingproduction环境。当服务容器化时,这会更容易完成,而且大多数时候,只需切换环境变量即可。
  7. 社区支持 - 我们有一个强大的软件工程师社区,他们不断贡献可重复用于开发优秀软件的优秀图像。您可以利用该支持。为什么要重新发明轮子,对吧?
  8. 还有很多.. 但是有很多很棒的博客可供您阅读。 =)

缺点: 我真的没有看到太多缺点,但这是我能想到的一个。

  1. 学习曲线 - 是的,它确实有一些学习曲线。但从我从我的初级工程师那里看到的情况来看,学习如何设置它并不需要太多时间。当您弄清楚如何容器化时,通常需要更长的时间。

一些担忧:

  1. 数据持久性 - 一些工程师担心数据持久性。您可以通过将卷安装到容器来简单地解决此问题。如果您想使用自己的数据库安装,只需将您的 HOST、DB_NAME、USERNAME 和 PASSWORD 切换为您在 localhost:5432 中的那个,一切都应该没问题。

希望对您有所帮助!

Docker 是一致性和可重复性的秘诀。

要泡一杯好茶,需要开水,放入一些茶包,泡三分钟。如何实现沸水绝对无关紧要。

现在假设您需要倒 12 杯茶。您的员工知道如何酿造合适的啤酒吗?您的员工知道如何使用水壶或平底锅吗?你凭什么保证每杯茶都是一样的?

您可以花很多时间培训人员并确保您拥有所需的所有设备。或者你可以投资一台机器,它会一遍又一遍地生产同样的一杯茶。

这个类比可能看起来很愚蠢,但我的意思是,相对常见的问题已经有了众所周知的解决方案。

除非是一次性情况或者您有我们不知道的其他限制,否则您有什么理由不考虑 Docker?