docker - 将虚拟主机迁移到 Docker 容器有什么好处?

标签 docker containers

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

  • PHP + nginx + mysql
  • PHP + nginx + postgresql
  • (venv) Flask + nginx + redis
  • (venv) django + nginx + memcached + postgres

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

    最佳答案

    我在这里尽量避免发表意见,只是陈述我的经验事实,但是问题的本质当然会引起不确定性和辩论。

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

    主要优势:

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

  • 主要缺点:
  • 学习曲线
  • 环境抽象

  • 第一件事:

    如果您的服务有大量状态(在文件系统上),您将不得不非常努力地重新架构,或者失去 Docker 的几乎所有优势。如果是这种情况,我会强调在这个阶段不要打扰,也许将 Docker 视为朝着 12-factor 应用程序迈进的更广泛项目的中长期部分。 ( https://12factor.net/ )

    即使您的底层架构已准备好进行迁移,但如果您的站点永远不会变得“巨大”,那么学习曲线的劣势就会严重抵消优势。水平扩展很好,但大多数站点永远不会需要它,并且在大多数情况下,曲线损失的时间可以更有效地减少上市时间/迭代周期。我对计算机和新技术非常有信心,这花了我 4 个月的时间来获得与您类似的堆栈。

    开发注意事项:

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

    此外,相同环境的“梦想”也有许多噩梦般的方面。您是否要强制本地计算机使用 SSL?然后,您将需要在所有开发计算机上使用“假”自签名证书,因此每次尝试访问时都会收到来自浏览器的投诉。此外,NGINX 使用 docker-compose 与使用堆栈部署的运行方式不同,并且使用 compose 而非堆栈进行开发有许多优点,因此仅使用堆栈并不是一个真正的选择。我花了一周时间才找到解决方案。

    然而,一旦这些问题得到解决(我们转移到 Linux 进行开发,并且有解决大多数其他问题的脚本,并且只需要告诉 Chrome 每 2 小时左右接受一次我的“假”证书),诚然,一切都非常顺利,我很高兴我有这样的经历。新项目可能会从一开始就利用 docker,因为我对它的工作原理、陷阱在哪里以及如何解决问题有了一种感觉。

    结论:

    我建议你在业余时间学习 docker 一年左右,而不是在工作中致力于它。现在我们经历了痛苦是有好处的,但那是很多痛苦。如果你真的在几个小时内学会了它,请确保你做一些模拟全面生产部署的事情,持续集成,测试,工作。 Docker 非常容易上手,它会诱使您认为它同样容易掌握。真的不是。

    关于docker - 将虚拟主机迁移到 Docker 容器有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54224722/

    相关文章:

    docker-compose:在 Jenkins 上找不到命令

    docker - 在 Ansible 中转义双花括号

    c++ - 选择容器以插入多个数据库记录

    image - docker不是VM,为什么容器需要base image OS?

    c++ - 压扁容器容器的通用函数

    java - 如何打包具有多个入口点的 Java 应用程序

    docker - 将Postgres数据库的外部参数添加到keycloak k8s Helm chart 环境参数中

    docker - 如何通过 SSH 连接到 Docker?

    azure - 为什么创建 Azure 容器实例需要这么长时间?

    laravel - 在 Laravel Sail 8.0 环境中安装 Jenssegers/MongoDB