Ya vimos en el anterior artículo cómo instalar Docker y Docker Compose en una máquina linux Centos 7. Ahora veremos cómo crear un contenedor de ejemplo para crear nuestra primera aplicación en un contenedor de Docker. Haremos el ejemplo con WordPress, ya que es una aplicación que deberá servirse bajo un servidor de aplicaciones y disponer de una base de datos.

También te puede interesar:
Gestión de contenedores con Docker
Curso Práctico de AWS Cloud
Cómo aprobar la certificación de AWS Cloud Practitioner

Arrancar Docker

Si estáis haciendo las prácticas en una máquina virtual como yo, deberemos arrancar primero el servicio de Docker si este no lo estuviera ya.

Iniciamos Docker con el comando:

systemctl start docker

Comprobamos que esté levantado:

systemctl status docker

Fichero de Docker Compose para WordPress

Ahora crearemos una carpeta y meteremos dentro nuestro fichero de definición del contenedor de WordPress de Docker Compose. Para ello, creamos un fichero YML con el siguiente contenido.

version: "3.9"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

Con esta definición del contenedor, estamos diciendo que usaremos MySQL 5.7 como gestor de base de datos para nuestro WordPress, y usará Apache como servidor de aplicaciones.

La instalación se publicará por el puerto 80 dentro del contenedor, pero redirigirá las peticiones por el puerto 8000 de nuestra máquina virtual. Así, si tenemos varios contenedores levantados, evitaremos que todos usen el mismo puerto 80 y haya conflicto.

Usará la carpeta /var/www/html de la propia máquina donde está instalado Docker para alojar los ficheros de la instalación de WordPress y la carpeta /var/lib/mysql para la BBDD.

Iniciar contenedor de WordPress con Docker Compose

Para crear el contenedor y lanzarlo, nos vamos a la carpeta donde hemos creado el fichero de definición de Docker Compose, y dentro de esa carpeta lanzamos el comando:

docker-compose up -d

Esto construirá el contenedor y lo dejará lanzado en background (parámetro -d).

Acceder al WordPress

Accedemos desde la web con el navegador a la ip del contenedor. Puede que no coincida con la IP de la máquina donde está instalado Docker. En mi caso, al tener la máquina virtual de Docker configurada en modo bridge, el contenedor coge la primera IP disponible de mi router y por ese publica el WordPress. Si accedemos con el navegador, veríamos la página de instalación de WordPress.

contenedor de WordPress con Docker Compose

Para saber la IP que está cogiendo el contenedor lo podemos ver (en Centos 7) con el siguiente comando:

ip addr list

De todas las IPs que salgan, habrá alguna que esté en nuestro rango de red que sea la que esté usando el contenedor. Y será esa con la que tengamos que acceder desde el navegador y por el puerto que hayamos definido en el Docker Compose del contenedor.

Destruir contenedor de WordPress

El siguiente comando es para destruir el contenedor existente con la BBDD incluida hacemos: (si no queremos destruir la BBDD quitamos el parámetro --volumes)

docker-compose down --volumes

Operaciones que realiza para la eliminación del contenedor:

Stopping docker_wordpress_wordpress_1 ... done
Stopping docker_wordpress_db_1 ... done
Removing docker_wordpress_wordpress_1 ... done
Removing docker_wordpress_db_1 ... done
Removing network docker_wordpress_default
Removing volume docker_wordpress_db_data
Removing volume docker_wordpress_wordpress_data

Contenedor de WordPress con MariaDB y Ngninx

En el siguiente ejemplo he confeccionado un fichero de Docker Compose para poder crear un contenedor de WordPress con una BBDD más actual como es MariaDB. Y publicarlo también en un servidor de aplicaciones diferente como es Nginx. Así podéis apreciar las diferencias entre un fichero y otro y ver cómo se crean estas definiciones que nos permiten personalizar nuestros contenedores Docker.

Aquí también, he especificado que use una versión de PHP específica, en este caso PHP 7.3.

Y he indicado que los ficheros de WordPress y MariaDB los aloje en la carpeta data de nuestra máquina Docker.

El puerto de publicación, he elegido otro para que no se pise con el anterior, es el 8080. Así podremos tener los dos contenedores corriendo al mismo tiempo.

version: '3'
services:
  mysql:
    image: mariadb
    volumes:
      - /data/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: mysql_root_pass
      MYSQL_DATABASE: db_name
      MYSQL_USER: user_name
      MYSQL_PASSWORD: user_pass
    restart: always
  wordpress:
    image: wordpress:php7.3-fpm-alpine
    volumes:
      - /data/html:/var/www/html
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql
      MYSQL_ROOT_PASSWORD: mysql_root_pass
      WORDPRESS_DB_NAME: db_name
      WORDPRESS_DB_USER: user_name
      WORDPRESS_DB_PASSWORD: user_pass
      WORDPRESS_TABLE_PREFIX: wp_
    links:
      - mysql
    restart: always
  nginx:
    image: nginx:alpine
    volumes:
#      - ./nginx.conf:/etc/nginx/conf.d/nginx.conf
      - ./:/etc/nginx/conf.d
      - /data/html:/var/www/html
    ports:
      - 8080:80
    links:
      - wordpress

Si os fijáis, he dejado una línea comentada donde indico la ruta del fichero de configuración de Nginx por si queremos jugar con él. Esa ruta, al comenzar por un punto, indica que es una ruta interna del contenedor. Es decir, esa ruta no es de nuestra máquina donde tenemos instalado Docker, sino del propio entorno del contenedor que está aislado de nuestro sistema operativo.

Si lanzamos la construcción del contenedor con el comando (docker-compose up -d) y accedemos al navegador por el puerto 8080 veremos que tenemos el nuevo WordPress corriendo bajo MariaDB y Nginx. En este caso he completado la instalación del WordPress y muestro la página de bienvenida de WordPress para que veáis que funciona con normalidad.

contenedor Docker de WordPress corriendo bajo MariaDB y Nginx

Conclusiones

Aunque no he entrado en detalles del significado de cada parámetro del fichero de definición de WordPress con Docker Compose, vemos que crear un contenedor de Docker es muy sencillo. Sólo con unos pocos comandos es fácil echar a andar un WordPress sin mucha complicación. Y si elegimos los puertos correctamente, podemos tener lanzados todos los contenedores que queramos en la misma máquina.

Hasta aquí, mis primeros pasos sobre la gestión de contenedores Docker. Espero que os haya gustado y os sirva de iniciación.