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
Dockerfile
que 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/cmsdir
a/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
cmsdir
en/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?
Respuestas:
Si necesita una persistencia de la base de datos independiente de su contenedor CMS, puede usar un contenedor para MySQL y un contenedor para su CMS. En tal caso, puede tener su contenedor MySQL aún en ejecución y puede volver a implementar su CMS con la frecuencia que desee de forma independiente.
Para el desarrollo: la otra opción es mapear directorios de datos mysql desde su máquina host / desarrollo usando volúmenes de datos. De esta forma, puede administrar archivos de datos para mysql (en docker) usando git (en el host) y "recargar" el estado inicial en cualquier momento que desee (antes de iniciar el contenedor mysql).
Sí, creo que debería tener un contenedor separado para db.
Estoy usando solo un script básico:
Sí, puede usar el modificador data-volume -v. Lo usaría para el desarrollo. Puede usar el montaje de solo lectura, por lo que no se realizarán cambios en este directorio si lo desea (su aplicación debería almacenar datos en otro lugar de todos modos).
De todos modos, para la implementación final, construiría e imagen usando dockerfile con
ADD /home/user/dev/cmsdir /var/www/cmsdir
No lo sé :-)
fuente
Desea usar docker-compose. Sigue el tutorial aquí. Muy simple. Parece marcar todas tus casillas.
https://docs.docker.com/compose/
fuente
Entiendo que esta publicación tiene más de un año en este momento, pero recientemente me he hecho preguntas muy similares y tengo varias respuestas excelentes a tus preguntas.
Puede configurar una instancia de Docker de MySQL y hacer que los datos persistan en un contenedor de datos sin estado, es decir, el contenedor de datos no necesita ejecutarse activamente
Sí, recomendaría tener una instancia separada para su servidor web y base de datos. Este es el poder de Docker.
Mira este repositorio que he estado construyendo. Básicamente es tan simple como
make build
&make run
y puede tener un servidor web y un contenedor de base de datos ejecutándose localmente.Utiliza el
-v
argumento cuando ejecuta el contenedor por primera vez, esto vinculará una carpeta específica en el contenedor al host que ejecuta el contenedor.Creo que sus ideas son geniales y actualmente es posible lograr todo lo que está pidiendo.
Aquí hay una solución llave en mano que logra todas las necesidades que ha enumerado.
fuente
He reunido una configuración de composición docker fácil de usar que debe coincidir con los requisitos de su flujo de trabajo de desarrollo.
https://github.com/ehyland/docker-silverstripe-dev
Principales características
HHVM
+NGINX
oApache2
+PHP5
El archivo README.md debe ser lo suficientemente claro para comenzar.
fuente