将虚拟主机移至Docker容器有什么优势?

时间:2019-01-16 20:18:03

标签: docker containers

我正面临着从旧专用服务器到具有新硬件的迁移。目前,我正在托管以下网站:

  • PHP + nginx + mysql
  • PHP + nginx + PostgreSQL
  • (venv)Flask + Nginx + Redis
  • (venv)django + nginx + memcached + postgres

所有网站均正常运行。目前,我正在考虑将它们包装到容器中,但是容器化的好处是什么?如果我在开发过程中使用Docker,那么优点很明显,但是旧设置又如何呢?我做了一些谷歌搜索,但是找不到经验丰富的开发人员的任何答案。

2 个答案:

答案 0 :(得分:5)

我试图在这里避免发表意见,只说出我的经历的事实,但是,问题的本质当然会引起不确定性和辩论。

我最近完成了向docker的迁移。

主要优点:

  • 加强无状态思维
  • 缩放
  • 易于部署
  • 相同的开发环境(*大量警告-见下文)

主要缺点:

  • 学习曲线
  • 环境抽象

第一件事:

如果您的服务在文件系统上处于高度有状态状态,则您将不得不非常困难地重新架构,否则将失去Docker的几乎所有优势。如果是这种情况,我会着重告诉您在此阶段不要打扰,也许将Docker视为迈向12因子应用程序的更广泛项目的中长期一部分。 (https://12factor.net/

即使您的基础架构已准备好进行迁移,但如果您的站点永远不会“庞大”,则学习曲线的劣势将大大超过其优势。水平缩放比例很好,但是大多数站点永远都不需要它,在大多数情况下,曲线丢失的时间可以更有效地用于缩短上市/迭代时间。我对计算机和新技术非常有信心,这花了我4个月的时间来打造与您相似的外观。

发展警告:

“开发”优势充满危险,尤其是在Mac上。 PHP需要许多文件协同工作才能运行您的网站,而文件系统的不同意味着在Mac上(运行docker时)比在服务器上慢4到5倍。这变得非常令人沮丧。有解决方案,但它们增加了学习曲线,仍然不够完美。

此外,相同环境的“梦想”也有许多噩梦。您是否要强制本地计算机使用SSL?然后,您将需要在所有开发计算机上使用“伪”自签名证书,因此每次尝试访问它时浏览器都会发出投诉。而且,NGINX在docker-compose上运行的方式与在堆栈部署下的运行方式不同,并且使用compose(而不是堆栈)进行开发有很多优势,因此仅使用堆栈并不是一个选择。我花了一个星期的时间来解决这个问题。

但是,一旦解决了这些问题(我们便转向Linux进行开发,并拥有解决大多数其他问题的脚本,并且只需要告诉Chrome每2小时左右接受一次我的“伪造”证书即可)诚然,一切都很顺利,我很高兴自己有这种经验。现在,新项目可能会从一开始就利用docker的优势,因为我对它的工作方式,存在的隐患以及如何解决问题有了感觉。

结论:

我建议您在业余时间里学习docker大约一年以上,而不要在工作中投入学习。现在,我们已经度过了痛苦,这是有好处的,但这是很多痛苦。而且,如果您确实要花几个小时学习它,请确保您进行的工作能够模拟完整规模的生产部署,并进行持续集成,测试和工作。 Docker非常容易上手,它会欺骗您以为它同样容易掌握。确实不是。

答案 1 :(得分:0)

简而言之,vm是一个完整的操作系统,具有许多您不需要的东西,而容器实际上是您需要的任何服务(通常每个容器一个服务)的容器。因此,它更易于扩展。这个主要优点还有其他好处。