Linux 既然可以安装服务或应用程序,为什么要将其dockerize?

Linux 既然可以安装服务或应用程序,为什么要将其dockerize?,linux,docker,dockerfile,containers,rhel,Linux,Docker,Dockerfile,Containers,Rhel,我们有大约12项服务和其他应用程序,如presto 我们正在考虑为每个服务和应用程序构建Docker容器。把所有这些都归档对吗 什么时候Docker容器不是理想的解决方案?将多个服务停靠在一起没有问题。我认为你也需要考虑下面的事情。 您必须考虑如何将使用过的数据保存在容器中。默认情况下,容器内的数据将在容器关闭时销毁。为了永久保存数据,您可能必须装载卷 在docker中运行时,您可能无法获得裸机性能 在我看来,如果您打算在docker中运行所有应用程序,那么这不是一个好的选择,除非您需要利用集装

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

我们正在考虑为每个服务和应用程序构建Docker容器。把所有这些都归档对吗


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

将多个服务停靠在一起没有问题。我认为你也需要考虑下面的事情。

您必须考虑如何将使用过的数据保存在容器中。默认情况下,容器内的数据将在容器关闭时销毁。为了永久保存数据,您可能必须装载卷

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


在我看来,如果您打算在docker中运行所有应用程序,那么这不是一个好的选择,除非您需要利用集装箱化。但是,使用docker运行无状态应用程序和服务很容易。

您应该将所有基于Linux的、无状态的、需要频繁升级/更改/修补程序的服务封装起来。这些包括所有类型的前端和应用服务器

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

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

优点:

  • 为您的团队设置快速本地环境-如果您的所有服务都已集装箱化。这将是一个为您的开发团队设置的快速环境
  • 有助于避免“它对我的问题有效,但对你的问题无效”-我们的许多开发问题通常源于开发环境设置。如果您将服务集装箱化,其中很大一部分将被卸载到其他地方
  • 更容易的部署-虽然我们都有不同的代码部署流程,但可以看出,将代码容器化会让事情变得更容易
  • 更好的版本控制-如您所知,可以标记,这有助于版本控制
  • 更容易回滚-因为您有版本控制,所以可以说回滚代码更容易。有时,只需简单地指向您以前的工作版本
  • 简易多环境设置-与大多数开发团队一样,我们设置了
    本地
    集成
    暂存
    生产
    环境。当服务被容器化时,这会更容易实现,而且大多数情况下,只需切换环境变量
  • 社区支持-我们拥有强大的软件工程师社区,他们不断地贡献伟大的图像,可用于开发伟大的软件。你可以利用这种支持。为什么要重新发明轮子,对吗
  • 还有很多。。但是有很多很棒的博客,你可以从中阅读 缺点: 我真的没有看到太多的缺点,但这里有一个我能想到的

  • 学习曲线-是的,它确实有一些学习曲线。但从我从初级工程师那里看到的情况来看,学习如何设置并不需要太多时间。当你弄清楚如何用集装箱运输时,通常需要更长的时间 一些关切:

  • 数据持久性-一些工程师担心数据持久性。您只需将卷装入容器即可解决此问题。如果您想使用自己的数据库安装,只需将您的主机、DB_名称、用户名和密码与您的localhost:5432中的主机、DB_名称、用户名和密码进行切换,就可以了

  • 我希望这有帮助

    Docker是一致性和再现性的配方

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

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

    你可以花大量时间培训员工,确保你拥有所需的所有设备。或者你可以投资一台机器,反复生产同一杯茶

    这个类比似乎很愚蠢,但我的观点是,相对常见的问题已经有了众所周知的解决方案


    除非它是一次性的场景,或者你有其他的限制,我们不知道,你有什么理由不考虑Docker? 你的意思是什么-裸体-metal@jessica我的意思是在主机操作系统上运行应用程序。不在虚拟机或docker中。

    GUI应用程序无法正常工作,因为docker是为部署服务器级应用程序而设计的。
    您可以在docker容器中运行浏览器。你这是什么意思?@michalk我不认为总是这样。您可以将浏览器连接到Xfvb之类的显示器,并通过VNC连接到Docker容器,您将看到一个实际的浏览器。在linux下:在Docker中运行GUI应用程序没有问题。只需将
    /tmp/.X11 unix/X0
    套接字连接到正在运行的容器。还可以在kubernetes内部使用X11转发运行GUI应用程序@customcommander不使用VNC-X11是本机方式(windows除外)。关于-数据库,它是否也包括presto workers服务器?我不是presto方面的专家,但这些workers似乎不包含架构或表。所以它们不是数据存储。