Hands on: Aplicación web

MySQL 5.7

Bueno, algo de lo que no vamos a poder escaparnos jamás en las aplicaciones web es de algún medio para almacenar datos. Existen muchas alternativas, pero tal vez una bastante clásica es usar una base de datos SQL. En este ejemplo vamos a ver cómo ejecutar un container con MySQL 5.7.

# MySQL 5.7

$ docker pull mysql:5.7

# Ejecución sin parámetros
$ docker run --name db mysql:5.7

$ docker ps
$ docker logs db
$ docker rm db

Como hicimos anteriormente, ejecutamos descargamos la imagen y la instanciamos con docker run. Por facilidad para el ejercicio, le asignamos un nombre al container usando el flag --name. Pero por lo que vimos... falló la ejecución. ¿Qué pasó?

Ciertas imágenes requieren que agregues en tu invocación de docker run algunos parámetros adicionales para la configuración inicial. En este caso, nos está faltando indicar un password para nuestra base de datos. Lo hacemos a continuación:

# Ejecución con parámetros
$ docker run --name db -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7

$ docker ps
$ docker logs db
$ docker exec -it db bash

> mysql -u root -p
Enter password: 1234

mysql> show databases;
mysql> exit;

$ docker rm -f db

Ahora si funcionó nuestra ejecución y tenemos un flamante container de MySQL 5.7 corriendo en nuestro sistema.

Accedemos a nuestro container usando el comando docker exec. Precisamente, lo que estamos haciendo acá es ejecutar una shell, en este caso Bash, en un container que esté activo. Los flags -it son "interactive" (permite que uses el STDIN) y "tty" (asigna una pseudo terminal). Entonces, siendo db el nombre de nuestro container, el comando completo es docker exec -it db bash. Ahí podemos interactuar con el container como interactuaríamos con cualquier consola. Si ejecutamos mysql accedemos a la base de datos. Podemos ver que no tenemos ninguna base de datos, así que en el próximo ejercicio vemos cómo instanciar un container con una base de datos predefinida.

# Ejecución con parámetros
$ docker run --name db -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=wordpress_db -d mysql:5.7

# Verificamos que la DB fue creada
$ docker exec -it db bash

> mysql -u root -p
Enter password: 1234

mysql> show databases;
mysql> use wordpressdb;
mysql> show tables;
mysql> exit;

En este último ejemplo pudimos instanciar nuestro container de MySQL 5.7 y disponemos de una base de datos, wordpress_db, ya creada y lista para ser usada. Nos quedamos con esta versión. Ahora lo que nos falta, es nuestra aplicación web. En este caso vamos a usar Wordpress, un CMS bastante conocido y que tal vez hayan usado anteriormente.

# Wordpress

$ docker pull wordpress

# Ejecución con port forwarding
$ docker run --name wordpress -e WORDPRESS_DB_PASSWORD=1234 --link db:mysql -p $HOST_IP:8080:80 -d wordpress

Nuevamente, descargamos la imagen e instanciamos nuestro container. Como pueden ver aquí agregamos un par de parámetros más que son importantes.

Primero, con el flag --link vinculamos nuestra base de datos, con nuestro container de wordpress. Nuestro Wordpress va a usar la base de datos que creamos en el paso anterior.

Luego, hacemos un redireccionamiento de puertos. Como estamos usando Play with Docker no podemos acceder directamente al puerto 80, puerto usado por defecto por las aplicaciones web. Así que lo que hacemos es usar el puerto 8080. Para esto usamos el flag -p e indicamos $HOST_IP (nuestra IP), puerto destino, puerto origen. En este caso, HOST_IP:8080:80.

Ahora podemos acceder a nuestro panel de Wordpress usando la IP especificada y el puerto 8080.

¡Felicitaciones! Ya tenés tu primer aplicación web containerizada.

results matching ""

    No results matching ""