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、Puppet 等。这些是 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 一样有用)都是他们学习和维护的新东西。
我在一家既不从事网络开发也不从事系统管理员的公司实习,从事网络应用程序方面的工作。 此应用程序位于备份服务器(一个 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、Puppet 等。这些是 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 一样有用)都是他们学习和维护的新东西。