2015-07-20 32 views
2

我搞清楚如何设置我的生产服务器的最佳方式,但我有点卡住有关如何正确地做到这一点:码头工人,和小生产的服务器基础设施的通知:

目前,所有我的网页应用dockerified,我有:

  • 一个nginx的前方的容器中,该路由请求至数后端容器:
    • 一个Symfo纽约应用
    • 两个WordPress的博客
    • 一个的NodeJS应用
  • 一个用于数据库存储的MySql容器
  • 一个MongoDB的容器也

ALL这个基础设施是用码头工人开始 - 组合

这工作不错,但它听起来太“monolitihic”我:

  • 我不能没有重新启动所有其他的停止一个容器。
  • 我不能没有重新启动一切
  • 我没有办法在崩溃之后自动重新启动容器中添加其他Web应用程序...

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

非常感谢!

回答

3

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

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

我不能没有重新启动一切

我会建议使用优秀jwilder/nginx-proxy nginx的泊坞窗图像作为在其他容器的前反向代理添加其他Web应用程序。这个反向代理将适应运行/停止的容器。您稍后可以添加容器,并且此反向代理将根据域名自动将流量路由到它。

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

看看在restart:指令为泊坞窗,compose.yml文件。

+0

我已经想过* nginx-proxxy *。我实际上没有使用它,原因如下: 我想nginx-proxy不会提供静态资产,所以我的所有应用程序容器都必须嵌入自己的nginx http服务器。 这听起来不错,因为它带来的灵活性,但我不知道它是不是过度杀伤?即:如果我的服务器托管4个应用程序,我需要启动5个nginx实例实例,只有1个....您对此有何看法? – Clement

+0

我的看法是,nginx-proxy安装起来非常简单,而且易于维护(因为它只是使用'VIRTUAL_HOST'环境变量),开销可以忽略不计。另外,如果有一天我在一台服务器上安装了很多项目,那么告诉我以后我不需要在两台服务器上拆分这些项目?或者其中一个项目会在其他项目之前结束?由于他们的生命周期可能不同,我喜欢让他们分开的想法。 – Thomasleveil

0

docker-compose的“monolithic”视图的确可以让你以一种方式管理你的应用程序堆栈。但是需要知道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 exec web ls -l/
$ docker-compose stop db 
$ docker-compose up -d nginx 
$ ... 

引导了一个新的服务也很容易泊坞窗,撰写的,因为它能够基于你的阳明配置没有的东西,如果没有必要停止任何东西。

$ 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认证和更新(不完全)等不错的功能。