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
Tabla de contenidos
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.
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.
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.