Actualización de complementos de wordpress dentro de un contenedor docker

4 minutos de lectura

avatar de usuario
Mahoma

Aquí está mi escenario:

He estado desarrollando un complemento que se modificará con mucha frecuencia, necesito crear una imagen usando la ventana acoplable en la que instale una versión nueva de wordpress y luego importe toda la base de datos y los complementos del entorno de desarrollo (el complemento está en github)

Logré instalar wordpress en docker usando https://github.com/eugeneware/docker-wordpress-nginx

Ahora aquí están mis preguntas:

1-¿hay alguna forma de modificar los archivos y carpetas de wordpress después de que se haya instalado en la ventana acoplable (para instalar complementos y usar la línea de comandos, no la GUI de wordpress)

2-Si quiero lograr lo que expliqué anteriormente, ¿cuál es el mejor flujo de trabajo?

  • En general, debe usar volúmenes de la ventana acoplable. Clone wordpress en la máquina host y ejecute la imagen con --volume /dir/where/wp/is/on/host:/usr/share/nginx/www

    – Tad Lispy

    22 de agosto de 2014 a las 18:28

avatar de usuario
VinoRemojado

Dos posibles respuestas a tu problema. Estoy luchando con esto ahora también, así que YMMV.

Primero, si está ejecutando el contenedor Docker en su host, siempre puede pausarlo docker pausecrea una nueva imagen desde el contenedor en ejecución docker commitluego empújelo a un repositorio privado docker push (una instalación de WordPress en vivo probablemente no sea apropiada para el Docker Hub público). Una vez hecho esto, puede reanudar el contenedor. docker unpause y luego puede actualizar la imagen en su sistema de desarrollo. Luego regrese una vez que la actualización esté lista y probada y todo esté bien, y luego docker pull la imagen y reinicie su servicio para que use la nueva imagen.

No es una gran solución, pero funcionará.

Según el comentario de Tadeusz, no necesariamente ejecutaría toda la instalación de WP desde un volumen de datos. Son volátiles y si, por algún motivo, su contenedor se elimina y es el único que hace referencia al volumen de datos, lo perderá todo (a menos que mantenga varias copias de seguridad; hacer mantener múltiples copias de seguridad, ¿verdad?)

La otra solución que estoy considerando es implementar cambios de complementos como parte del Dockerfile. Un enfoque mucho más deliberado, pero se puede conectar a la web de manera que crea automáticamente una nueva imagen de Docker cuando se compromete con su repositorio de Github. Hay una discusión sobre hacer ese proceso de compilación automático. aquí. El administrador del servidor final de las cosas en su alojamiento final deberá extraer una nueva imagen como mencioné anteriormente. Y hecho.

Por supuesto, configurar esto se deja como un ejercicio para su sistema de desarrollo.

¡Salud!

  • ¿Alguna idea sobre cómo administrar el estado de la base de datos en este escenario?

    – ben

    03/02/2016 a las 23:42

  • en realidad, podría ser más apropiado montar wordpress en un volumen y ese volumen se extrae de una especie de repositorio de código e incluso mejor, en lugar de pausar el contenedor, es mejor crear uno nuevo, con el volumen actualizado y destruir el anterior.

    – Raffaello

    22 de noviembre de 2016 a las 12:48

Llega tarde a la fiesta, pero tengo una solución decente para esto. No está cubierto por las otras respuestas y también debería ser útil para futuros lectores.

Estoy ejecutando esto cómodamente en una caja ec2 t2-micro y hasta ahora ha funcionado perfectamente. WordPress, mySQL y Nginx están todos instalados en sus propios contenedores (a través de Docker compose) y los volúmenes de Docker se usan para mantener el estado de mySQL y WordPress. Código e información adicional sobre la configuración de Nginx tomados de aquí.

docker-compose.yml:

version: '3.6'

 services:
    db:
      image: mysql:5.7
      volumes:
        - db_data:/var/lib/mysql
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: db_root_pass
        MYSQL_DATABASE: db
        MYSQL_USER: db_user
        MYSQL_PASSWORD: db_pass
    nginx:
      depends_on:
        - wordpress
      image: nginx:latest
      restart: always
      ports:
        - "80:80"
      volumes:
        - ./nginx.conf:/etc/nginx/nginx.conf
    wordpress:
      depends_on:
        - db
      volumes:
        - wp_data:/var/www/html/wp-content
      image: wordpress:latest
      restart: always
      environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: db_user
        WORDPRESS_DB_PASSWORD: db_pass
 volumes:
    db_data:
    wp_data:

la db_data el volumen se asigna al directorio de datos mySQL dentro del contenedor mySQL y el wp_data el volumen se asigna al directorio de contenido de WordPress en el contenedor de WordPress. Lo que puede hacer es configurar la CLI para escribir en el wp_data directorio en el host y esos cambios se revelarán en el sitio de WordPress sin necesidad de reconstruir ningún contenedor.

¿Ha sido útil esta solución?