Esta é uma resposta fraca, mas acredito:
Sim , esta é, em geral, a filosofia certa, mas com algumas ressalvas. php-fpm
está lá para processar .php
arquivos, mas acho que não para servir todos os arquivos (não-php). Para isso, o processo nginx
da frente precisa ver todos os arquivos, mesmo que ele não faça o processamento real do PHP.
Para que isso ocorra de maneira inteligente usando o docker, os arquivos no contêiner php-fpm
precisam ser compartilhados explicitamente com o contêiner nginx
. A maneira preferida de fazer isso no docker é fornecer um volume nomeado e usá-lo para ambos os contêineres. Por exemplo, um arquivo docker-compose.yml
:
version: '2'
services:
serviceA:
image: ... # something served with php-fpm
volumes:
- tmpvolA:/path/to/serviceA
serviceB:
image: ... # something served with php-fpm
volumes:
- tmpvolB:/path/to/serviceB
nginx:
image: ...
volumes:
- tmpvolA:/var/www/serviceA
- tmpvolB:/var/www/serviceB
volumes:
tmpvolA:
tmpvolB:
(Muitos campos não estão incluídos ...) Os dois volumes listados no final são os "volumes nomeados" dos quais o docker fala e estão vazios por um motivo: eles devem ficar vazios quando você iniciar o script e será preenchido por um dos contêineres. (Na verdade, pode ser preenchido por ambos ou nenhum deles, dependendo de vários fatores.)
Um efeito colateral disso é que os volumes persistem .
- "Isso é bom" para eficiência, pois não é recriado desnecessariamente.
- "Isso é ruim" porque um dos benefícios de ter serviços virtualizados é que você pode reiniciá-lo e ter a garantia de que está tudo limpo. Com volumes nomeados persistentes, você não (automaticamente) obtém um slate limpo, pois os arquivos usados na instância anterior serão usados em vez da versão austera em uma camada fs inferior.
O caminho em torno deste "mau" é liberar os volumes manualmente. Isso pode ser feito no encerramento com docker-compose down -v
, que por ajuda:
-v, --volumes Remove named volumes declared in the 'volumes' section
of the Compose file and anonymous volumes
attached to containers.
Isso também pode ser feito manualmente com docker volume rm <volume-id>
ou docker volume prune
(que remove todos os volumes não utilizados no momento, sejam temporários, nomeados ou qualquer outro).