Migrando el blog a docker

By | February 25, 2019

Le tocaba el turno al blog y ha resultado bastante fácil con docker compose.

En primer lugar hay que tener en cuenta que se trata de una migración de un blog existente a un contenedor docker. No bastará por tanto con arrancar sin más el contenedor, sino que tendremos que cargar por una parte los ficheros de la instalación actual de WordPress y el contenido de la Base de Datos en MySQL.

Antes de migrar el blog en el servidor me he montado una máquina de pruebas con IP 192.168.1.154. Para tenerlo todo ordenado para el compose, dentro de la máquina:

mkdir -p /opt/dockers/compose/wordpress
cd /opt/dockers/compose/wordpress
mkdir config db-dump data 

La estructura queda así:

wordpress/
├── config
├── db-dump
├── data
├── .env
└── docker-compose.yml

Cada parte:

  • Dentro del directorio db-dump voy a dejar mi fichero elarraydejota.sql con el dump de mi instancia de Base de Datos.
  • Por otro lado en el directorio data dejo todos los ficheros de mi instalación de WordPress (wp-config.php, directorio wp-content, etc…)
  • En el fichero .env defino algunas variables sensibles:
    DB_ROOT_PASSWORD=password
    DB_NAME=mydb
    
  • En el fichero docker-compose.yml defino los dos contenedores que hay que levantar. El contenedor de WordPress depende del de MySQL:
    version: '2'
    
    services:
      wp:
        image: wordpress:latest 
        ports:
          - 192.168.1.154:80:80 
        volumes:
          - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
          - ./data:/var/www/html 
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_NAME: "${DB_NAME}"
          WORDPRESS_DB_USER: root
          WORDPRESS_DB_PASSWORD: "${DB_ROOT_PASSWORD}"
        depends_on:
          - db
    
      db:
        image: mysql:5.7
        ports:
          - 192.168.1.154:3306:3306
        volumes:
          - ./db-dump:/docker-entrypoint-initdb.d
          - db_data:/var/lib/mysql/
        environment:
          MYSQL_DATABASE: "${DB_NAME}"
          MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
    
    volumes:
      db_data:
    

Una vez tenemos todo listo levantamos con docker-compose:

docker-compose up

Esperamos a que se inicie primero el contenedor de la Base de Datos y vuelque nuestro dump. Una vez hecho se iniciará el contenedor de WordPress. Si todo ha ido bien veremos una línea final con el arranque de Apache, el cual viene embebido en la imagen de WordPress:

db_1  | 2019-02-22T11:10:23.258475Z 0 [Note] mysqld: ready for connections.
db_1  | Version: '5.7.22'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
wp_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
wp_1  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
wp_1  | [Fri Feb 22 11:10:23.367687 2019] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.7 configured -- resuming normal operations
wp_1  | [Fri Feb 22 11:10:23.367731 2019] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Si hacemos un docker ps vemos los dos contenedores levantados:

root@dev:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
0ebf586ed3d0        wordpress:latest    "docker-entrypoint.s…"   15 hours ago        Up 37 seconds       192.168.1.154:80->80/tcp       wordpress_wp_1
b69fda2b799d        mysql:5.7           "docker-entrypoint.s…"   15 hours ago        Up 38 seconds       192.168.1.154:3306->3306/tcp   wordpress_db_1

Al visitar la IP de mi máquina de pruebas 192.168.1.154 puedo ya acceder a mi blog levantado en un contenedor docker: