Eu tenho um palpite de que o docker poderia melhorar muito meu fluxo de trabalho no webdev - mas ainda não consegui entender como abordar um projeto que adiciona o docker à pilha.
A pilha básica de software ficaria assim:
Programas
Imagem (s) do Docker que fornece pilha LAMP personalizada
- Apache com vários módulos
- MYSQL
- PHP
- Alguns CMS, por exemplo, Silverstripe
GIT
Fluxo de trabalho
Eu poderia imaginar o fluxo de trabalho parecido com o seguinte:
Desenvolvimento
- Escreva um
Dockerfile
que defina um contêiner LAMP que atenda aos requisitos estabelecidos acima- REQ: A máquina deve iniciar o apache / mysql logo após a inicialização
- Construa a imagem da janela de encaixe
- Copie os arquivos necessários para executar o CMS em, por exemplo
~/dev/cmsdir
- Colocar
~/dev/cmsdir/
sob controle de versão
- Colocar
- Execute o recipiente janela de encaixe, e de alguma forma montar
~/dev/cmsdir
a/var/www/
no recipiente - Preencher o banco de dados
- Trabalhe em
/dev/cmsdir/
- Confirmar e desligar o container docker
Desdobramento, desenvolvimento
- Configurar host remoto (por exemplo, com ansible)
- Enviar imagem do contêiner para o host remoto
- Buscar
cmsdir
-project via git - Execute o contêiner do docker, puxe o banco de dados e monte
cmsdir
no/var/www
Agora, isso parece muito bom no papel, mas não tenho muita certeza se essa seria a abordagem correta.
Questões:
Enquanto desenvolvia localmente, como eu faria o banco de dados persistir entre as reinicializações da instância do contêiner? Ou precisaria executar o sql-dump toda vez antes de girar o contêiner?
Devo ter instâncias de contêiner separadas para o db e o servidor apache? Ou seria suficiente ter um único contêiner para o caso de uso acima?
Se estiver usando contêineres separados para banco de dados e servidor, como eu poderia automatizar a rotação deles para cima e para baixo ao mesmo tempo?
Como eu realmente montaria
/dev/cmsdir/
nos/var/www/
diretórios containers ? Devo utilizar volumes de dados para isso?Perdi algumas armadilhas? Algo que poderia ser simplificado?