了解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议是好的。 将应用程序解耦成多个容器的优点包括:
- build立时间
确实,docker做了散列检查,如果没有发生变化,不会构build图像的图层,但是这仅限于图层结构(如果图层X会更改X上方的所有图层都将被构build)。 这意味着当图像开始变大时,它会开始变得痛苦。
- 容器是孤立的
当你连接到ngxinx
你很确定你正在做的任何修改都不会导致你的php
容器发生变化,这是一个很好的习惯。
- 可扩展性
你还需要十个Redis
,好,我们再运行十个Redis
容器。
一般来说,我会去任何场景的基础图像docker文件,在你的情况下,无论你所有的三个容器( php
, nxginx
和nxginx
)共享(第三方库,工具等)。 然后三个dockerfiles用于构build每个图像。 然后用bash
或docker-compose.yml
脚本运行容器内的图像。