了解Docker最佳实践并运行Web服务器

我正在一个容器中运行一个简单的PHP7.0,Redis和NGINX服务器。

这意味着我运行php7.0-fpm ngxinx redis作为服务。

但在我阅读的最佳实践中:

 # Run only one process per container In almost all cases, you should only run a single process in a single container. Decoupling applications into multiple containers makes it much easier to scale horizontally and reuse containers. If that service depends on another service, make use of container linking. 

这是否意味着最好用PHP7.0和应用程序运行一个容器,用nginx运行另一个容器,用redis运行另一个容器?

@nwinkler在评论是正确的,build议是好的。 将应用程序解耦成多个容器的优点包括:

  1. build立时间

确实,docker做了散列检查,如果没有发生变化,不会构build图像的图层,但是这仅限于图层结构(如果图层X会更改X上方的所有图层都将被构build)。 这意味着当图像开始变大时,它会开始变得痛苦。

  1. 容器是孤立的

当你连接到ngxinx你很确定你正在做的任何修改都不会导致你的php容器发生变化,这是一个很好的习惯。

  1. 可扩展性

你还需要十个Redis ,好,我们再运行十个Redis容器。

一般来说,我会去任何场景的基础图像docker文件,在你的情况下,无论你所有的三个容器( phpnxginxnxginx )共享(第三方库,工具等)。 然后三个dockerfiles用于构build每个图像。 然后用bashdocker-compose.yml脚本运行容器内的图像。