- Bases de Docker
Importante: Para pasar parámetros línea por línea terminamos cada línea con el caracter '' el cual obtenemos presionando ALT+92 Comandos utlizados en bash:
docker container run --name postgres-legacy-alpine -e POSTGRES_PASSWORD=mypass1 -dp 5430:5432 postgres:14-alpine3.17
--name es el nombre de la instancia, -e declara la variable de entorno y le asigna un valor, -dp es deattached y publish donde 5430 es el puerto local y 5432 el puerto con el que se va a mapear dentro del contenedor. posgres es la imagen y desúés de los 2 puntos sigue la versión y tag, en este caso versión 14 tag alpine3.17 De esta forma si usamos el mismo comando podemos especificar un nuevo nombre, así como diferentes parámetros para tener múltiples instancias de una db corriendo al mismo tiempo. En el caso de este comando:
docker container run -e MARIADB_RANDOM_ROOT_PASSWORD=1 -dp 3306:3306 mariadb:11.2.5-jammy
tenemos que acceder al password a través de los logs del contenedor, los cuales obtenemos utlizando
docker container ls -a
de ahí sacamos el id o el nombre y corremos
docker container logs <id> o <nombre>
el password se nota claramente y el usuario sería root.
- Volúmenes y redes
- Terminal interactiva dentro del contenedor
- Aplicaciones con múltiples contenedores
- Redes
- Volúmenes
- Mapeo de directorios y relaciones
- Montar un servidor Apache con PHPMyAdmin junto a MariaDB
- Revisar el file system de alpine y node
Esta sección empieza a dejar bases para el uso de los contenedores a otro nivel.
Ejercicio:
- Montar la imagen de MariaDB con el tag jammy, publicar en el puerto 3306 del contenedor con el puerto 3306 de nuestro equipo, colocarle el nombre al contenedor de world-db (--name world-db) y definir las siguientes variables de entorno:
- MARIADB_USER=example-user
- MARIADB_PASSWORD=user-password
- MARIADB_ROOT_PASSWORD=root-secret-password
- MARIADB_DATABASE=world-db
- Conectarse usando Table Plus a la base de datos con las credenciales del usuario (NO EL ROOT)
- Conectarse a la base de datos world-db
- Ejecutar el query de creación de tablas e inserción proporcionado
- Revisar que efectivamente tengamos la data
Documentación MariaDB Docker Hub
Ejemplo anterior:
docker container run --name postgres-legacy-alpine \
-e POSTGRES_PASSWORD=mypass1 \
-dp 5430:5432 \
postgres:14-alpine3.17
Respuesta:
docker container run --name world-db \
-e MARIADB_USER=example-user \
-e MARIADB_PASSWORD=user-password \
-e MARIADB_ROOT_PASSWORD=root-secret-password \
-e MARIADB_DATABASE=world-db \
-p 3306:3306 \
-d mariadb:11.2.5-jammy
Para crear un volumen y persistir los cambios hechos en la db podemos crear un volumen mediante el comando:
$ docker volume create world-db
Donde world-db es el nombre del volumen, acto seguido creamos nuestro container de la db vinculada a dicho volumen mediante:
docker container run --name world-db \
-e MARIADB_USER=example-user \
-e MARIADB_PASSWORD=user-password \
-e MARIADB_ROOT_PASSWORD=root-secret-password \
-e MARIADB_DATABASE=world-db \
--volume world-db:/var/lib/mysql \
-p 3306:3306 \
-d mariadb:11.2.5-jammy
Antes de publish está
--volume world-db:/var/lib/mysql \
el primer argumento es el host y se mapea con la ruta del contenedor.
Hasta ahora ha sido posible crear una base de datos en un contenedor y persistir la data a través del uso de un volumen. En nuestro equipo usando la herramienta TablePlus pudimos conectarnos a nuestra base y de hecho correr un script para crear tablas, esto es posible porque nuestro equipo puede comunicarse con el contenedor ya que este expone el puerto que vamos a utilizar y lo mapea con el puerto de interno del contenedor.
Si se diera el caso de querer utlizar una herramienta como phpMyAdmin para gestionar la db través de otro contenedor necesitamos correr documentación de phpmyadmin
docker container run \
--name phpmyadmin \
-d \
-e PMA_ARBITRARY=1 \
-p 8080:80 \
phpmyadmin:5.2.0-apache
PMA_ARBITRARY indica que vamos a usar un server arbitrario, lo que nos va a permitir conectarnos a un server desconocido afuera de su contenedor.
El problema es que al ser dos contenedores diferentes que no están en la misma red obtendremos un error:
Es por ello que necesitamos agregar los 2 contenedores que creamos previamente a una red docker:
docker network create world-app-network
docker network connect world-app-network phpmyadmin
docker network connect world-app-network world-db
Primero creamos la red, después nos conectamos a un contenedor utilizando connect, seguido del nombre de la red y luego el nombre del contenedor, es por cada contenedor que necesitemos conectar. Tanto para la red o para el contenedor se puede reemplazar el nompre por el id, podemos inspeccionar si todo está OK inspeccionando nuestra red:
docker network inspect world-app-network
Ahora en vez de localhost usamos como server el nombre de la base que es wold-db