blue and red cargo ship on dock during daytime

Ejecutar WordPress como un contenedor Docker

Ejecutar WordPress como un contenedor Docker es una buena opción pues reduce el tiempo de configuración sobre todo si se esta trabajando en el desarrollo de múltiples sitios a la vez, permite la portabilidad de un equipo a otro y uso de una menor cantidad de memoria

Para esto crearemos dos contenedores uno contendrá MySQL y otro que contendrá Apache 2 y WordPress. Haremos uso de Compose una herramienta de Docker que mediante un archivo YAML definimos la configuración de los contenedores luego con un solo comando, se crean y se inician todos los servicios definidos en la configuración.

Usar Compose es básicamente un proceso de tres pasos.

  1. Definir el ambiente de la aplicación con un Dockerfile esto podrá ser luego reproducido en cualquier parte.
  2. Definir los servicios necesarios para la aplicación en docker-compose.yml estos funcionaran juntos en un ambiente aislado.
  3. Ejecutar docker compose up y los comandos de Compose que inician y ejecutan la aplicación.

Requisitos

  1. Tener instalado Docker y Compose en el sistema operativo a usar.
  2. Tener conocimiento básico de Docker.

Pasos

Los pasos descritos a continuación son para ejecutarse en Linux pero en su mayoría son validos para otros sistemas operativos.

  1. Crear un directorio que contendrá los archivos del proyecto.

    puede tener cualquier nombre pero te recomiendo algo que sea fácil de recordar y que se relaciones con tu futuro sitio de WordPress a diseñar

    $ mkdir mi sitio
  2. Cambiar el directorio del proyecto.
    En este caso lo hemos llamado «mi sitio»

    $ cd mi sitio
  3. Crear un archivo docker-compose.yml que contendrá en este caso la definiciones con la que iniciaran los contenedores MySQL y WordPress ademas la ubicación de los volúmenes de datos para la persistencia.

    version: '3.3'
    
    services:
      db:
        image: mysql:5.7
        volumes:
          - ./db_data:/var/lib/mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
    
      wordpress:
        depends_on:
          - db
        image: wordpress:latest
        ports:
          - "8000:80"
        restart: always
        volumes:
          - ./wordpress:/var/www/html
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
          WORDPRESS_DB_NAME: wordpress
    volumes:
       db_data: {}
    

    Recomiendo modificar las siguientes variables por valores mas seguros.

    contenedor MySQL

    1. MYSQL_ROOT_PASSWORD es la contrasela de MySQL.
    2. MYSQL_DATABASE es nombre de la base de datos de WordPress.
    3. MYSQL_USER el usuario que usara WordPress para conectarse a la base de datos.
    4. MYSQL_PASSWORD la contraseña que usara WordPress para conectarse a la base de datos.

    Contenedor WordPress

    Estas variables formaran parte del archivo wp-config.php ubicado dentro del directorio de datos creado luego de generar los contenedores.

    1. WORDPRESS_DB_HOST indica el nombre del servidor y puerto que WordPress usara para conectarse a la base de datos.
    2. WORDPRESS_DB_USER define el usuario utilizado por WordPress para conectarse a la base de datos.
    3. WORDPRESS_DB_PASSWORD la contraseña que usara WordPrress para conectarse a la base de datos.
    4. WORDPRESS_DB_NAME el nombre de la base de datos de WordPress.
  4. Construir los contenedores.

    Ejecutar docker-compose up -d , el parámetro -d ejecuta docker-compose up en modo «detached», descarga las imágenes de Docker e inicia el contenedor de WordPress y de MySQL.

  5. Abrir el navegador e ir a https://localhost:8000.

  6. Seleccionar el idioma en el que se utilizara WordPress.

  7. Crear el usuario que se utilizara para la administración WordPress.

Con esto quedarían los contenedores funcionando, con docker-compose down se eliminan los contenedores y la red asignada a estos pero se preservan los datos.

En caso de ser necesario para realizar el respaldo de la base de datos se puede ejecutar docker exec misitio_db_1 /usr/bin/mysqldump -u wordpress --password=wordpress > ./backup.sql los anterior ejecuta mysqldump dentro del contenedor de MySQL y guarda el archivo generado en el directorio desde donde se ejecuto el comando.