¿Cuál sería un buen flujo de trabajo docker webdev?
Tengo la corazonada de que docker podría mejorar en gran medida mi flujo de trabajo de webdev, pero no he logrado comprender cómo abordar un proyecto agregando docker a la pila.
La pila de software básico se vería así:
Software
-
Imagen (es) acoplable (s) que proporciona pila de LÁMPARA personalizada
- Apache con varios módulos
- MYSQL
- PHP
- Algunos CMS, e. g. Silverstripe
GIT
Flujo de trabajo
Me imagino que el flujo de trabajo se parecerá a lo siguiente: {[14]]}
Desarrollo
- Escriba un
Dockerfile
que defina un contenedor para LÁMPARAS que cumpla los requisitos indicados anteriormente- REQ: La máquina debe iniciar apache/mysql justo después de arrancar
- Construir la imagen de docker
- Copie los archivos necesarios para ejecutar el CMS en p. ej.
~/dev/cmsdir
- Poner
~/dev/cmsdir/
bajo control de versiones
- Poner
- Ejecute el contenedor docker, y de alguna manera monte
~/dev/cmsdir
a/var/www/
en el contenedor - Rellene la base de datos
- Hacer el trabajo en
/dev/cmsdir/
- Confirmar y cerrar el contenedor docker
Despliegue
- Configurar host remoto (por ejemplo, con ansible)
- Empuje la imagen del contenedor al host remoto
- Fetch
cmsdir
- proyecto a través de git - Ejecute el contenedor docker, tire de la base de datos y montaje
cmsdir
en/var/www
Ahora, todo esto se ve bastante bien en el papel, PERO no estoy muy seguro de si este sería el enfoque correcto en absoluto.
Preguntas:
Mientras desarrollaba localmente, ¿cómo conseguiría que la base de datos persistiera 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 automatizarlos girando hacia arriba y hacia abajo al mismo tiempo?
¿Cómo montaría realmente
/dev/cmsdir/
en el directorio containers/var/www/
? ¿Debo utilizar volúmenes de datos para esto?¿Me perdí alguna trampa? ¿Algo que pueda simplificarse?
4 answers
-
Si necesita 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 todavía en ejecución y puede volver a implementar su CMS tan a menudo como desee de forma independiente.
Para el desarrollo - la otra opción es asignar directorios de datos mysql desde su máquina host/de desarrollo utilizando volúmenes de datos. De esta manera puede administrar archivos de datos para mysql (en docker) utilizando git (en el host) y "recargar" estado inicial en cualquier momento que desee (antes de iniciar el contenedor mysql).
Sí, creo que deberías tener un contenedor separado para db.
-
Estoy usando un script básico:
#!/bin/bash $JOB1 = (docker run ... /usr/sbin/mysqld) $JOB2 = (docker run ... /usr/sbin/apache2) echo MySql=$JOB1, Apache=$JOB2
-
Sí, puede utilizar el conmutador data-volumes-v. Usaría esto para el desarrollo. Puede usar montaje de solo lectura, por lo que no se realizarán cambios en este directorio si lo desea (su aplicación debe almacenar datos en otro lugar de todos modos).
docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
De todos modos, para final implementación, construiría e imagen usando dockerfile con
ADD /home/user/dev/cmsdir /var/www/cmsdir
No lo sé :-)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-24 17:44:49
Desea utilizar docker-compose. Siga el tutorial aquí. Muy simple. Parece marcar todas tus casillas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-03 21:04:44
Entiendo que este post tiene más de un año en este momento, pero recientemente me he hecho preguntas muy similares y tengo varias respuestas excelentes a sus preguntas.
-
Puede configurar una instancia de MySQL docker y hacer que los datos persistan en un contenedor de datos sin estado, también conocido como 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.
Echa un vistazo 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 que se ejecutan localmente.Si utiliza el argumento
-v
al ejecutar el contenedor por primera vez, esto vinculará una carpeta específica del contenedor al host que ejecuta el contenedor.Creo que tus ideas son grandes y actualmente es posible lograr todo lo que eres pidiéndole.
Aquí hay una solución llave en mano que logra todas las necesidades que ha enumerado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-24 20:00:18
He creado una configuración fácil de usar docker compose que debería coincidir con los requisitos de su flujo de trabajo de desarrollo.
Https://github.com/ehyland/docker-silverstripe-dev
Características Principales
- DB persistente
- Su elección de
HHVM
+NGINX
oApache2
+PHP5
- Depurar y establecer puntos de interrupción con xDebug
El README.md debe ser lo suficientemente claro como para comenzar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-20 17:52:50