【问题标题】:Why dockerize a service or application when you could install it? [closed]当您可以安装服务或应用程序时,为什么要对它进行 dockerize 呢? [关闭]
【发布时间】:2020-06-07 19:13:00
【问题描述】:

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

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

Docker 容器何时不是理想的解决方案?

【问题讨论】:

    标签: linux docker dockerfile containers rhel


    【解决方案1】:

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

    要泡一杯好茶,你需要开水,在里面放一些茶包,让它冲泡三分钟。您如何获得沸水绝对无关紧要。

    现在让我们假设您需要提供 12 杯茶。您的员工知道如何制作合适的啤酒吗?您的员工知道如何使用水壶或平底锅吗?你有什么保证每杯茶都是一样的?

    您可以花大量时间培训人员并确保您拥有所需的所有设备。或者您可以投资一台机器,可以一次又一次地生产同一杯茶。

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

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

    【讨论】:

      【解决方案2】:

      您应该将所有无状态且需要频繁升级/更改/补丁的基于 Linux 的服务容器化。其中包括所有类型的前端和应用程序服务器。

      另一方面,数据库/数据存储是一个更复杂的情况,因为存在性能和数据持久性/完整性问题。此外,数据库没有像前端应用程序那样频繁地升级/修补。

      *Windows 容器只能在 Windows 中运行。

      【讨论】:

      • 关于 - 数据库,是否还包括 presto 工作服务器?
      • 我不是 Presto 方面的专家,但这些工作人员似乎不包含模式或表。所以它们不是数据存储。
      【解决方案3】:

      优点:

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

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

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

      一些担忧:

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

      我希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        Docker 化多个服务没有问题。我认为您也需要考虑以下事项。

        您必须考虑如何将您使用过的数据保存在容器内。默认情况下容器内的数据会破坏容器关闭。您可能必须安装一个卷才能永久保留数据。

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

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

        【讨论】:

        • 你的意思 - 裸机
        • @jessica 我的意思是在主机操作系统上运行应用程序。不在虚拟机或 docker 内。
        • GUI applications will not work well as docker is designed for deploying server level applications. 你可以在 Docker 容器中运行浏览器。你这是什么意思?
        • @michalk 我不认为这总是正确的。您可以将浏览器附加到 Xfvb 等显示器并通过 VNC 连接到您的 Docker 容器,您看到一个实际的浏览器。
        • linux下:在docker中运行GUI应用是没有问题的。只需将/tmp/.X11-unix/X0 套接字附加到正在运行的容器。也可以使用 X11 转发在 kubernetes 内运行 GUI 应用程序。 @customcommander 不要使用 VNC - X11 是原生方式(Windows 除外)。
        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2020-05-31
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 2020-11-16
        • 2011-02-14
        相关资源
        最近更新 更多