Nginx Docker和小型生产服务器基础架构建议

Nginx Docker和小型生产服务器基础架构建议,nginx,automation,docker,server,docker-compose,Nginx,Automation,Docker,Server,Docker Compose,我正在研究如何以最佳方式设置生产服务器,但对于如何正确设置,我有点困惑: 目前,我的所有web应用程序都已存档,我有: 一个nginx前端容器,将请求路由到多个后端容器: 一个Symfony应用程序 双字博客 一个NodeJS应用程序 一个用于数据库存储的MySql容器 还有一个MongoDB容器 ALL此基础结构使用docker compose启动 这很好,但对我来说太“独立自主”了: 我无法停止一个容器而不重新启动所有其他容器 如果不重新启动所有程序,我无法添加其他web应用程序

我正在研究如何以最佳方式设置生产服务器,但对于如何正确设置,我有点困惑:

目前,我的所有web应用程序都已存档,我有:

  • 一个nginx前端容器,将请求路由到多个后端容器:
    • 一个Symfony应用程序
    • 双字博客
    • 一个NodeJS应用程序
  • 一个用于数据库存储的MySql容器
  • 还有一个MongoDB容器
ALL此基础结构使用docker compose启动

这很好,但对我来说太“独立自主”了:

  • 我无法停止一个容器而不重新启动所有其他容器
  • 如果不重新启动所有程序,我无法添加其他web应用程序
  • 我无法在崩溃后自动重新启动容器
这是我第一次这样做,你知道一些可以帮助我改进生产服务器的最佳实践或软件吗

非常感谢

我无法停止一个容器而不重新启动所有其他容器

当您只想停止一个容器时,是什么阻止您使用
docker-stop
命令而不是
docker-compose-stop
命令

如果不重新启动所有程序,我无法添加其他web应用程序

我建议使用优秀的nginx docker图像作为其他容器前面的反向代理。此反向代理将适应正在运行/停止的容器。您可以稍后添加容器,此反向代理将根据域名自动将流量路由到该容器

我无法在崩溃后自动重新启动容器

查看docker-compose.yml文件的指令。

docker-compose的“单片”视图确实允许您以一种方式管理应用程序堆栈。但是你需要知道docker compose是docker之上的一个“层”,你仍然可以使用它

正如@thomaslevel所说,您仍然可以使用docker单独操作docker compose创建的容器

$ docker exec project_web_1 ls -l /
$ docker stop project_db_1
$ docker up -d project_nginx_1
$ ...
另一方面,我建议更多地依赖docker compose,它还允许对单个容器进行操作,分离不同的应用程序或环境,并了解容器之间的依赖关系(并非详尽无遗)

使用docker compose启动一个新服务也很容易,因为它可以根据您的yml配置进行检测,如果不需要的话,不需要停止任何操作

$ docker-compose up -d
project_web_1 is up-to-date
project_db_1 is up-to-date
Creating project_newservice_1

我还发现反向代理的帮助对于生产安装非常有用。不过,我更倾向于推荐全新的,它带来了一些不错的功能,如热重新加载、服务发现、使用Letsencrypt的自动SSL认证和更新(并非详尽无遗)。

我已经考虑过nginx proxxy。实际上,我之所以不使用它,是因为以下原因:我假设nginx代理不会服务于静态资产,因此我的所有应用程序容器也必须嵌入它们自己的nginx http服务器。这听起来很不错,因为它带来了灵活性,但我想知道这是否有点过分?i、 e:如果我的服务器承载4个应用程序,我需要启动5个nginx实例,其中只有1个。。。。您对此有何看法?我的观点是,nginx proxy非常易于安装和维护(因为它只是一个使用
VIRTUAL\u HOST
环境变量的问题),因此开销可以忽略不计。另外,如果有一天我在一台服务器上有许多项目,那么是什么告诉我以后不需要在两台服务器上拆分这些项目呢?或者其中一个项目会比其他项目先结束?由于它们的生命周期可能不同,我喜欢将它们很好地分开的想法。
$ docker-compose up -d
project_web_1 is up-to-date
project_db_1 is up-to-date
Creating project_newservice_1