Docker或Vagrant是安全地“打包”一个Web应用程序的解决scheme吗?

我正在做一个Web应用程序的实习生,在一个不做Web开发和系统pipe理员的公司工作。 这个应用程序住在备份服务器 (用作Time Machine驱动器的Mac Mini),我安装了MEAN堆栈和其他一些需要的工具。

由于该公司并不是技术高超的人,而且有可能会在某一天或那些时候混淆软件, 所以我想知道是否可以在Docker或Vagrant容器中“打包”应用程序 ,然后使用所有工具在一个命令中重新启动它和configuration设置,并且在应用程序应该被安装在另一台机器上的情况下也使其变得可移植。


TL; DR我可以将Web应用程序及其堆栈封装在Docker / Vagrant容器中,以便于安装和运行?

我可以将Web应用程序及其堆栈包装在Docker / Vagrant容器中,以便安装和运行?

是的,与他们两个。

与stream浪汉

首先,Vagrant并不是我最喜欢的解决scheme,但是你可以这样做:你可以写一个Vagrantfile,把你想要的Linux映像,安装你的东西(比如一个Tomcat或NGINX服务器),configuration所有东西(文件夹结构,开放端口)并将最终的应用程序复制到图像(例如WAR文件)。 现在,您可以在虚拟机映像中获得所需的所有内容,并且可以共享此映像以使您的公司能够运行您的应用程序。

优点

  • 一切都在一个图像上
  • 如果图像运行,你的公司有问题,他们可以很容易地连接到虚拟机(通过SSH),也许修复它。

缺点

  • 图像可能非常大(很多GB)
  • 如果你使用Vagrant,你通常会把Vagrantfile分享给其他人,而不是它所build立的VM镜像(但这不是你想要的)

用Docker

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

优点

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

缺点

  • 如果在应用程序运行时遇到问题,则可能会更难以解决问题,因为您需要构build新的映像

恕我直言

将所有东西打包成Docker镜像。 编写一个脚本来一起运行所有的图像(你可以写一些shell脚本,但你也可以使用一些奇怪的Puppet,Ansible,厨师安装)。 而已。 您的堆栈便于携带,易于启动。

只是一个侧面说明

如果你的公司真的很less知道技术的东西,要小心。 每一个新的工具(即使它像Docker一样有用)对他们来说是学习和维护的新东西。

检查Docker-Compose您可以将其设置为使所有内容都以1个命令运行

docker-compose up

总之,至less对于stream浪者来说,答案是否定的 。 对于Docker,也许,但是…

然而,你真正需要的是一个configuration工具 – Docker和Vagrant都不是。 你的需求听起来更像Ansible ,Chef,Salt,Puppet等。这些是对Docker和Vagrant的补充 – 其中一个是Docker容器,因为最终结果看起来就像是你的场景的教科书示例。