Configuración de contenedores con variables de entorno
Más adelante veremos que al crear un contenedor que necesita alguna configuración específica, lo que vamos a hacer es crear variables de entorno en el contenedor, para que el proceso que inicializa el contenedor pueda realizar dicha configuración.
Para crear una variable de entorno al crear un contenedor usamos el flag -e
o --env
:
$ docker run -it --name prueba -e USUARIO=prueba ubuntu bash
root@91e81200c633:/# echo $USUARIO
prueba
Configuración de un contenedor con la imagen mariadb
En ocasiones es obligatorio el inicializar alguna variable de entorno para que el contenedor pueda ser ejecutado. Si miramos la documentación en Docker Hub de la imagen mariadb, observamos que podemos definir algunas variables de entorno para la creación y configuración del contenedor (por ejemplo: MYSQL_DATABASE
,MYSQL_USER
, MYSQL_PASSWORD
,…). Pero hay una que la tenemos que indicar de forma obligatoria, la contraseña del usuario root
(MYSQL_ROOT_PASSWORD
), por lo tanto:
$ docker run -d --name some-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw mariadb
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c3effd891e3 mariadb "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 3306/tcp some-mariadb
Podemos ver que se ha creado una variable de entorno:
$ docker exec -it some-mariadb env
...
MYSQL_ROOT_PASSWORD=my-secret-pw
...
Y para acceder podemos ejecutar:
$ docker exec -it some-mariadb bash
root@9c3effd891e3:/# mysql -u root -p"$MYSQL_ROOT_PASSWORD"
...
MariaDB [(none)]>
Otra forma de hacerlo sería:
$ docker exec -it some-mariadb mysql -u root -p
Enter password:
...
MariaDB [(none)]>
Accediendo a servidor de base de datos desde el exterior
En el ejemplo anterior hemos accedido a la base de datos de dos formas:
- Ejecutado un comando
bash
para acceder al contenedor y desde dentro hemos utilizado el cliente de mariadb para acceder a la base de datos. - Ejecutando directamente en el contenedor el cliente de mariadb.
En esta ocasión vamos a mapear los puertos para acceder desde el exterior a la base de datos:
Lo primero que vamos a hacer es eliminar el contenedor anterior:
$ docker rm -f some-mariadb
Y a continuación vamos a crear otro contenedor, pero en esta ocasión vamos a mapear el puerto 3306 del anfitrión con el puerto 3306 del contenedor:
docker run -d -p 3306:3306 --name some-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw mariadb
Comprobamos que los puertos se han mapeado y que el contenedor está ejecutándose:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
816ea7df5c41 mariadb "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp some-mariadb
Ahora desde nuestro equipo (donde hemos instalado un cliente de mysql) nos conectamos que tiene la ip 192.168.121.54
vamos a conectarnos a la base de datos (hay que tener instalado el cliente de mariadb):
$ mysql -u root -p -h 192.168.121.54
Enter password:
...
MariaDB [(none)]>
También nos podemos conectar usando la dirección 127.0.0.1
:
$ mysql -u root -p -h 127.0.0.1
Enter password:
...
MariaDB [(none)]>