tag run remove hub example compose docker

run - docker-compose



¿Cuál sería un buen flujo de trabajo de docker webdev? (4)

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

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

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

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

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

  1. 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
  2. Construye la imagen del docker
  3. Copie los archivos necesarios para ejecutar el CMS en, por ejemplo, ~/dev/cmsdir
    • Poner ~/dev/cmsdir/ bajo control de versión
  4. Ejecute el contenedor acoplable y de alguna forma monte ~/dev/cmsdir en /var/www/ en el contenedor
  5. Completa la base de datos
  6. /dev/cmsdir/ en /dev/cmsdir/
  7. Comprometerse y cerrar el contenedor de la docker

Despliegue

  1. Configurar el host remoto (por ejemplo, con ansible)
  2. Empuje la imagen del contenedor al host remoto
  3. Obtener cmsdir -project a través de git
  4. Ejecute el contenedor acoplable, cmsdir la base de datos y monte 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:

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

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

  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 podría montar /dev/cmsdir/ en los contenedores /var/www/ -directory? ¿Debería utilizar data-volumes de data-volumes para esto?

  5. ¿Perdí alguna trampa? ¿Algo que pueda simplificarse?



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.

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

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

  3. Mira este reportaje que he estado construyendo. Básicamente es tan simple como make build y make run y puede tener un servidor web y un contenedor de base de datos ejecutándose localmente.

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

  5. 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 o Apache2 + PHP5
  • Depurar y establecer puntos de interrupción con xDebug

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