run - docker-compose
¿Cuál sería un buen flujo de trabajo de docker webdev? (4)
Si necesita persistencia de la base de datos en lugar 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 ejecutándose y puede volver a desplegar su CMS tantas veces como desee de forma independiente.
Para el desarrollo, la otra opción es mapear los directorios de datos de MySQL de su servidor / máquina de desarrollo utilizando volúmenes de datos. De esta forma puede administrar archivos de datos para mysql (en acoplador) utilizando git (en el host) y "volver a cargar" el 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 solo script básico:
#!/bin/bash $JOB1 = (docker run ... /usr/sbin/mysqld) $JOB2 = (docker run ... /usr/sbin/apache2) echo MySql=$JOB1, Apache=$JOB2
Sí, puede usar el cambio de volúmenes de datos -v. Yo usaría esto 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).
docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2
De todos modos, para la implementación final, construiría e crearía una imagen usando dockerfile con
ADD /home/user/dev/cmsdir /var/www/cmsdir
No lo sé :-)
Tengo la corazonada de que la ventana acoplable podría mejorar mucho mi flujo de trabajo de webdev, pero no he logrado entender cómo abordar un proyecto que agrega acoplador a la pila.
La pila de software básico se vería así:
Software
Docker imagen (es) que proporciona la 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 parecería 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 inmediatamente después de arrancar
- Construye la imagen del docker
- Copie los archivos necesarios para ejecutar el CMS en, por ejemplo,
~/dev/cmsdir
- Poner
~/dev/cmsdir/
bajo control de versión
- Poner
- Ejecute el contenedor acoplable y de alguna forma monte
~/dev/cmsdir
en/var/www/
en el contenedor - Completa la base de datos
-
/dev/cmsdir/
en/dev/cmsdir/
- Comprometerse y cerrar el contenedor de la docker
Despliegue
- Configurar el host remoto (por ejemplo, con ansible)
- Empuje la imagen del contenedor al host remoto
- Obtener
cmsdir
-project a través de git - Ejecute el contenedor acoplable,
cmsdir
la base de datos y montecmsdir
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:
Mientras desarrollaba localmente, ¿cómo conseguiría que la base de datos persistiera entre los reinicios de la instancia del contenedor? ¿O necesitaría ejecutar sql-dump cada vez antes de girar el contenedor?
¿Debo tener instancias de contenedor separadas para el db 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 podría montar
/dev/cmsdir/
en los contenedores/var/www/
-directory? ¿Debería utilizar data-volumes de data-volumes para esto?¿Perdí alguna trampa? ¿Algo que pueda simplificarse?
Desea usar Docker-Componer. Sigue el tutorial aquí. Muy simple. Parece que marca todas tus casillas.
Entiendo que esta publicación tiene más de un año en este momento, pero recientemente me hice preguntas muy similares y obtuve varias respuestas excelentes a sus preguntas.
Puede configurar una instancia de MySQL Docker y 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.
Mira este reportaje que he estado construyendo. Básicamente es tan simple como
make build
ymake run
y puede tener un servidor web y un contenedor de base de datos ejecutándose localmente.Utiliza el argumento
-v
al ejecutar el contenedor por primera vez, esto vinculará una carpeta específica en el contenedor con el 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.
He creado una configuración de compilación de portón fácil de usar que debe coincidir con los requisitos del flujo de trabajo de desarrollo.
https://github.com/ehyland/docker-silverstripe-dev
Principales características
- 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.