¿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

  1. 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
  2. Construir la imagen de docker
  3. Copie los archivos necesarios para ejecutar el CMS en p. ej. ~/dev/cmsdir
    • Poner ~/dev/cmsdir/ bajo control de versiones
  4. Ejecute el contenedor docker, y de alguna manera monte ~/dev/cmsdir a /var/www/ en el contenedor
  5. Rellene la base de datos
  6. Hacer el trabajo en /dev/cmsdir/
  7. Confirmar y cerrar el contenedor docker

Despliegue

  1. Configurar host remoto (por ejemplo, con ansible)
  2. Empuje la imagen del contenedor al host remoto
  3. Fetch cmsdir - proyecto a través de git
  4. 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:

  1. 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?

  2. ¿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?

  3. 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?

  4. ¿Cómo montaría realmente /dev/cmsdir/ en el directorio containers /var/www/? ¿Debo utilizar volúmenes de datos para esto?

  5. ¿Me perdí alguna trampa? ¿Algo que pueda simplificarse?

 120
Author: Andre, 2013-11-23

4 answers

  1. 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).

  2. Sí, creo que deberías tener un contenedor separado para db.

  3. 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
    
  4. 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

  5. No lo sé :-)

 45
Author: Jiri,
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.

Https://docs.docker.com/compose /

 9
Author: Kevin Suttle,
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.

  1. 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

  2. Sí, recomendaría tener una instancia separada para su servidor web y base de datos. Este es el poder de Docker.

  3. 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.

  4. 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.

  5. 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.

 4
Author: gegere,
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 o Apache2 + PHP5
  • Depurar y establecer puntos de interrupción con xDebug

El README.md debe ser lo suficientemente claro como para comenzar.

 1
Author: eamon,
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