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: