Tengo el presentimiento de que Docker podría mejorar enormemente mi flujo de trabajo de webdev, pero no he logrado entender cómo abordar un proyecto agregando Docker a la pila.
La pila de software básica se vería así:
Software
Imágenes de Docker que proporcionan una pila LAMP personalizada
- Apache con varios módulos.
- MySQL
- PHP
- Algunos CMS, por ejemplo, Silverstripe
GIT
Flujo de trabajo
Me imagino que el flujo de trabajo se parece a lo siguiente:
Desarrollo
- Escriba un
Dockerfileque defina un contenedor LAMP que cumpla con los requisitos establecidos anteriormente- REQ: la máquina debería iniciar apache / mysql justo después de arrancar
- Construye la imagen del acoplador
- Copie los archivos necesarios para ejecutar el CMS en, por ejemplo,
~/dev/cmsdir- Poner
~/dev/cmsdir/bajo control de versiones
- Poner
- Ejecutar el contenedor de estibador, y de alguna manera montar
~/dev/cmsdira/var/www/en el envase - Poblar la base de datos
- Trabajar en
/dev/cmsdir/ - Confirmar y cerrar el contenedor acoplable
Despliegue
- Configurar host remoto (por ejemplo, con ansible)
- Empuje la imagen del contenedor al host remoto
- Fetch
cmsdir-project a través de git - Ejecute el contenedor docker, extraiga la base de datos y móntelo
cmsdiren/var/www
Ahora, esto se ve bastante bien en el papel, PERO no estoy muy seguro de si este sería el enfoque correcto en absoluto.
Preguntas:
Durante el desarrollo local, ¿cómo conseguiría que la base de datos persista entre reinicios de la instancia del contenedor? ¿O tendría que ejecutar sql-dump cada vez antes de girar el contenedor?
¿Debo tener instancias de contenedor separadas para la base de datos y el servidor apache? ¿O sería suficiente tener un solo contenedor para el caso de uso anterior?
Si utilizo contenedores separados para la base de datos y el servidor, ¿cómo podría automatizar la rotación hacia arriba y hacia abajo al mismo tiempo?
¿Cómo montaría realmente
/dev/cmsdir/en el/var/www/directorio de contenedores ? ¿Debo utilizar volúmenes de datos para esto?¿Me perdí alguna trampa? ¿Algo que pueda simplificarse?