Modo watch no Docker Compose para desenvolvimento
- #Docker
Sabe aquele momento que você altera um arquivo de configuração, como por exemplo o nginx.conf, e precisa parar o container, rodar build de novo, subir tudo só pra testar?
Pois é… cansativo, né? É nesse exato momento que o modo watch entra em cena!
☑️ Por que volumes não são ideais em ambiente de desenvolvimento?
➖ Volumes foram feitos pensando em produção, não em desenvolvimento.
➖ Eles são I/O bloqueantes, ou seja, não é possível que dois processos acessem o mesmo arquivo simultaneamente.
➖ Com volumes, você altera um arquivo e... nada acontece, a não ser que reinicie o container ou até use o --build.
➖ Em projetos com testes longos, esse vai e vem custa tempo demais.
☑️ E o modo watch, o que é?
➖ Parece volume, mas tem outra vibe! Foi pensado especificamente para ajudar quem está desenvolvendo.
➖ Não é I/O bloqueante e é muito mais leve.
➖ Permite sincronizar arquivos com containers em tempo real.
➖ E o melhor: ainda reinicia o serviço automaticamente quando o arquivo for alterado.
☑️ Como usar na prática?
Imagine que você tem um container com NGINX e quer atualizar o nginx.conf. Seu docker-compose pode ficar assim:
nginx:
build: ./.docker/nginx
restart: always
profiles: [nginx]
ports:
- 4000:80
develop:
watch:
- action: sync+restart
x-initialSync: true
path: ./.docker/nginx/nginx.conf
target: /etc/nginx/nginx.conf
Aqui, usamos "action: sync+restart" para sincronizar o arquivo e reiniciar o container automaticamente. O "x-initialSync: true" garante que o Docker copie o arquivo assim que tudo subir. Vale lembrar que esse comando é experimental; também é possível copiar o arquivo no Dockerfile, porém o action precisa ser alterado para rebuild.
Veja nas imagens 1 e 2 abaixo os exemplos na prática.
☑️ Explicando as opções do "action"
➖ sync: Apenas sincroniza os arquivos alterados entre a máquina host e o container, sem reiniciar o serviço.
➖ restart: Reinicia o container assim que uma modificação é detectada, sem fazer a sincronização dos arquivos.
➖ sync+restart: Combina os dois, sincronizando os arquivos e, em seguida, reiniciando o container para aplicar as mudanças.
➖ rebuild: (Quando suportado) Recompila a imagem do container para incorporar alterações que dependam do build, útil se você estiver copiando arquivos durante o build.
☑️ Como rodar?
Use o seguinte comando para ativar o modo watch:
docker compose --watch
A cada alteração no arquivo, o Docker sincroniza e reinicia o container. É como ter um live reload, mas no mundo dos containers!
Veja abaixo na imagem 3 o exemplo prático:
☑️ Quando usar?
➖ Sempre que estiver em desenvolvimento e quiser ganhar mais produtividade.
➖ Ideal para editar configurações, arquivos de teste ou qualquer arquivo dinâmico que precise de reload imediato.
➖ Menos tempo esperando, mais tempo codando!
Espero que esse conteúdo ajude você a explorar melhor os recursos do Docker e otimize seus fluxos de trabalho. Se tiver dúvidas ou quiser compartilhar experiências e dicas, deixe seu comentário! 💬
Acompanhe minhas publicações e projetos:
🔗 GitHub: https://github.com/Altair-Mateus
🔗 Linkedin: https://www.linkedin.com/in/altair-mateus-t-alencastro/
🔗 Portfólio: https://altair-mateus.github.io/portfolio/