Docker 或 Vagrant 是安全 "package" 网络应用程序的解决方案吗?

Is Docker or Vagrant a solution to safely "package" a web app?

我在一家既不从事网络开发也不从事系统管理员的公司实习,从事网络应用程序方面的工作。 此应用程序位于备份服务器(一个 Mac Mini 用作 Time Machine 驱动器),我在其中安装了 MEAN 堆栈和其他几个需要的工具.

由于公司对技术不是很精通,可能有一天会弄乱软件,我想知道我是否可以 "package" 将应用程序放在 Docker 或 Vagrant container 以在单个命令中重新启动它,设置所有工具和配置,并在应用程序应安装在另一台机器上的情况下使其可移植。


TL;DR 我可以将 Web 应用程序及其堆栈打包到 Docker/Vagrant 容器中以便于安装 & 运行?

查看Docker-Compose您可以设置它,以便一切都在 1 个命令中运行

docker-compose up

简而言之,至少对于 Vagrant 来说,答案是。对于 Docker,也许吧,但是...

不过,您真正需要的似乎是配置工具——Docker 和 Vagrant 都不是。您的需求听起来更像是 Ansible、Chef、Salt、P​​uppet 等。这些是 Docker 和 Vagrant 的补充 - 其中一个加上一个 Docker 容器作为最终结果就像您的场景的教科书示例。

Can I package a web app and its stack in a Docker/Vagrant container to make it easy to install & run?

是的,他们两个。

与 Vagrant

首先,Vagrant 不是我最喜欢的解决方案,但您可以执行以下操作:您可以编写一个 Vagrantfile 来拉取您想要的 Linux 图像,安装您的东西(例如 Tomcat或 NGINX 服务器),配置所有内容(文件夹结构、开放端口)并将最终应用程序复制到映像(例如 WAR 文件)。现在您在 VM 映像中获得了所需的一切,您只需共享此映像即可让您的公司能够 运行 您的应用程序。

优点

  • 一切都在一张图片上
  • 如果图像 运行s 和您的公司遇到问题,他们可以轻松连接到 VM(通过 SSH)并可能修复它。

缺点

  • 图像可能很大(许多 GB)
  • 如果您使用 Vagrant,您通常会将 Vagrantfile 共享给其他人,而不是它构建的 VM 映像(但这不是您想要的)

与Docker

使用 Docker,您可以将应用程序及其依赖项打包到图像中。请注意,您会将每个依赖项(例如您的数据库)打包到一个单独的图像中,而不是全部在一个图像中。这些图像将由 Docker 文件构建,您可以将它们上传到 Docker 注册表或将它们作为文件导出到您的磁盘。您可以共享它们(通过共享文件或者最好从 Docker 注册表中提取它们)并编写脚本 运行 它们一起启动您的应用程序。

优点

  • 与 VM 映像相比较小的映像(见上文)
  • Docker 就是为此目的而制作的(与其他人分享准备好的 运行 图片)

缺点

  • 如果您在应用程序 运行 时遇到问题,修复该问题可能会更加困难,因为您需要构建新图像

恕我直言

将所有内容打包成 Docker 图像。写一个脚本将 运行 所有图像放在一起(你可以只写一些 shell 脚本,但你也可以使用一些花哨的 Puppet、Ansible、Chef 安装)。而已。您的堆栈是便携式的并且易于启动。

只是一个旁注

如果您的公司真的对技术知识知之甚少,请小心。每个新工具(即使它和 Docker 一样有用)都是他们学习和维护的新东西。