使用 Docker 在单个 VPS 上部署多个应用程序
虚拟专用服务器 (VPS) 的成本很低。您可以每月仅需 5 美元租用一台小型服务器。(您可以在这里找到一些价格实惠的 VPS 提供商)
您可以获得可预测的定价、高计算能力,并且使用Docker在单个服务器上运行多个应用程序变得非常容易。
但是,使用 Docker 在一台机器上运行多个应用程序安全吗?一台服务器可以容纳多少个应用程序?需要注意什么?
目录
在单个主机上运行多个应用程序安全吗?
Docker 容器彼此之间以及与主机系统之间几乎完全隔离。如果您遵循一些基本的安全最佳实践,那么在单个主机上运行多个应用程序是安全的。
话虽如此,这无疑比在专用主机上运行每个应用程序的风险更大。中断和安全漏洞可能会影响多个应用程序及其数据。
我遇到的主要问题是单个容器需要所有 CPU 和内存,所有其他应用程序都受到此问题的影响。
一切都归结于潜在故障的影响。对于新闻聚合器或业余项目来说,你可能不需要 99.999% 的正常运行时间。而且,如果你不存储重要数据,数据丢失也不会造成太大的损失。
此设置适用于:
- 低风险、低流量的应用程序
- 后台作业
- 开发环境
- 家庭实验室
- 独立黑客项目
- 内部工具
- 开源工具
或者简而言之:任何不需要企业级正常运行时间和安全性的东西。
一台服务器上可以安装多少个应用程序?
显然,这在很大程度上取决于您的应用程序。
给你一个大概的想法:
我曾在配备 2GB RAM、2 个共享 vCPU 和 40GB 磁盘的 VPS 上运行过一些小型网站、API 和数据库(总共约 15 个不同的应用程序),并且已经运行了好几个月,没有任何问题。
这是我的主机提供的最小的机器之一,但公平地说,这些应用程序非常轻量级,几乎没有任何流量,因此几乎不需要任何资源。
你可以在一台服务器上运行几十个这样的小型应用程序。另一方面,如果单个应用程序占用了大量流量,就可能导致你的机器过载。
如果没有数据,估算资源消耗非常困难。不过,以下这些简单的常识或许能帮到你:
- 更多请求=需要更多资源
- 数据量大 = 需要更多资源。相比处理文本或小型 JSON 对象,通过服务器传输图片或视频需要更多 CPU 和内存。
- 有些算法比其他算法需要更多的资源,例如加密或训练人工智能模型。
- 应用程序(例如数据库)可能会为缓冲区和缓存分配内存,因此即使流量较低也会消耗大量 RAM。有时,您可以对其进行微调,使其以更少的资源运行。
在一台服务器上托管多个应用程序的挑战
在最基本的设置中,您只需要访问 VPS、安装 Docker,然后就可以开始了!
一旦细节完善,在单台服务器上运行多个 Docker 应用就会变得有些棘手。以下是我遇到的一些挑战:
- 如何概览调试日志
- 如何防止日志占用所有磁盘空间
- 机密管理
- 如何将您的应用程序和代码更改上传到服务器(CI/CD)
- 在哪里运行构建过程(需要相当多的资源)
- Docker 镜像的存储位置
- 多人参与时的访问控制
- 如何监控服务器和应用程序负载
- 如何防止镜像和 Docker 缓存占用所有磁盘空间
如果你正在学习 DevOps,我鼓励你全身心投入其中,亲手实现它。没有什么比行动更能提升你的水平了。
如果您想省去一些麻烦,有一些工具可以使工作变得更容易。
简化在一台机器上运行多个应用程序的工具
滑翔机
Sliplane 是一个完全托管的容器托管解决方案,允许您在单台服务器上部署多个应用程序。如果您根本不想参与 DevOps 开发,这是最快捷、最简便的选择。与其他提供商相比,它提供了更多高级功能,还包括域名、垂直扩展、SSL、安全更新等。(免责声明:我是该项目的联合创始人)
多库
Dokku 是一个开源 PaaS 替代方案。它可以帮助您设置部署流水线,并提供构建和管理多个应用程序的工具。它还利用 Heroku Buildpacks 自动检测您的堆栈并进行部署,无需 Dockerfile。
波特纳
Portainer 也开源,是一个容器管理平台。与 Sliplane 和 Dokku 相比,它不负责构建过程,但提供了管理更高级集群设置的功能。
比较
滑翔机 | 多库 | 波特纳 | |
---|---|---|---|
管理多个容器 | ✅ | ✅ | ✅ |
关注构建过程 | ✅ | ✅ | ❌ |
使用“git push”进行持续部署 | ✅ | ✅ | ❌ |
专用构建服务器 | ✅ | ❌ | ❌ |
管理多个主机 | ✅ | ❌ | ✅ |
开源版本? | ❌ | ✅ | ✅ |
用户界面 | 基于 Web 的用户界面 | 命令行界面 | 基于 Web 的用户界面 |
查看容器日志 | ✅ | ❌ | ✅ |
查看服务器指标 | ✅ | ❌ | ✅ |
域名管理 | ✅ | ❌ | ❌ |
管理集群(Kubernetes、Docker Swarm) | ❌ | ❌ | ✅ |
扩展服务器 | ✅ | ❌ | ❌ |
自动备份 | ✅ | ❌ | ❌ |
自动安全更新 | ✅ | ❌ | ❌ |
概括
Docker 允许在单个服务器上托管多个应用程序,使其成为部署小型项目的经济高效的解决方案。
使用 Docker 在单个服务器上运行多个应用程序通常是安全的,但它应该仅限于低流量、低风险的应用程序。
根据您运行的应用程序类型,您可以在一台服务器上安装数十个项目。
如果您想深入研究 DevOps,可以选择自托管路线。或者,可以使用 Sliplane、Dokku 和 Portainer 等工具来简化流程。
作为一种完全托管的解决方案,Sliplane是最快捷、最简单的方法。
Dokku是开源的。它专注于通过简单的“git push”简化部署。其用户界面是 CLI。
Portainer也提供了一个开源版本。与 Sliplane 和 Dokku 相比,它缺少部署管道。它配备了基于 Web 的用户界面,并提供了一些管理更高级集群设置的功能。
鏂囩珷鏉ユ簮锛�https://dev.to/wimadev/deploy-multiple-apps-on-a-single-vps-with-docker-9j