我在运行一个简单的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在评论中是对的,这个建议是好的。将应用程序解耦到多个容器中的几个优点是:
- 构建时间
docker确实会进行哈希检查,如果没有发生任何更改,则不会构建映像的层,但这仅限于层结构(如果层X更改,则将构建X以上的所有层)。这意味着当你的图像开始变大时,它会开始变得痛苦。
- 集装箱被隔离
当你连接到你的ngxinx
时,你很确定你所做的任何改变都不会引起你的php
容器的改变,这总是一个很好的做法。
你需要10个Redis
容器,很好,让我们再运行10个Redis
容器。
一般来说,我会为任何场景的基本图像选择dockerfile,在您的情况下,这是您的三个容器(php
, redis
&nxginx
)共享(第三方库,工具等)然后是三个dockerfile,用于构建每个映像。然后使用bash
或docker-compose.yml
脚本在容器内运行图像。