【问题标题】:Docker, and small production server infrastructure advicesDocker 和小型生产服务器基础架构建议
【发布时间】:2015-10-09 17:12:17
【问题描述】:

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

目前,我所有的网络应用程序都是dockerified,我有:

  • 一个 nginx 前端容器,将请求路由到多个后端容器:
    • 一个 Symfony 应用程序
    • 两个 Wordpress 博客
    • 一个 NodeJS 应用程序
  • 一个用于数据库存储的 MySql 容器
  • 还有一个 MongoDB 容器

ALL此基础架构是使用 docker-compose 启动的。

这很好用,但对我来说听起来太“monolitihic”了:

  • 如果不重新启动所有其他容器,我无法停止一个容器。
  • 如果不重新启动所有内容,我无法添加其他 Web 应用程序
  • 我无法在崩溃后自动重启容器...

这是我第一次这样做,您知道一些可以帮助我改进生产服务器的最佳实践或软件吗?

非常感谢!

【问题讨论】:

    标签: nginx automation docker server docker-compose


    【解决方案1】:

    如果不重新启动所有其他容器,我无法停止一个容器。

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

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

    我建议使用出色的jwilder/nginx-proxy nginx docker 镜像在其他容器前充当反向代理。此反向代理将适应正在运行/停止的容器。您可以稍后添加一个容器,此反向代理将根据域名自动将流量路由到它。

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

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

    【讨论】:

    • 我已经考虑过 nginx-proxxy。我实际上并没有使用它,原因如下:我想 nginx-proxy 不会提供静态资产,所以我所有的应用程序容器也必须嵌入它们自己的 nginx http 服务器。这听起来很棒,因为它带来了灵活性,但我想知道它是否不是矫枉过正?即:如果我的服务器托管 4 个应用程序,我需要启动 5 个只有 1 个的 nginx 实例实例......你怎么看?
    • 我的观点是 nginx-proxy 非常易于安装和维护(因为它只是使用VIRTUAL_HOST 环境变量的问题),因此开销可以忽略不计。另外,如果有一天我在一台服务器上有很多项目,那是什么告诉我以后不需要将这些项目拆分到两台服务器上?或者其中一个项目将在其他项目之前结束?由于它们的生命周期可能不同,我喜欢将它们分开的想法。
    【解决方案2】:

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

    正如@thomasleveil 所说,您仍然可以使用 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 exec web ls -l /
    $ docker-compose stop db
    $ docker-compose up -d nginx
    $ ...
    

    使用 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2013-09-09
      • 2023-04-04
      • 2023-04-07
      相关资源
      最近更新 更多