Cómo crear contenedores de Bases de Datos en Docker

Con el gran avance de la tecnología y la increíble cantidad de herramientas que un programador Web debería conocer, uno de los problemas más comunes suele ser el crear contenedores de bases de datos en docker, y ejecutar las aplicaciones en distintas máquinas, con distintas librerías, dependencias o configuraciones de sistema.

Con Docker podemos solucionar este problema ya que nos ayuda a generar un «paquete» de software con las dependencias necesarias para crear y administrar fácilmente contenedores ligeros y portátiles. Esto también incluye a los motores de bases de datos que, de hecho, es uno de sus usos más comunes. En lugar de instalar y configurar manualmente cada base de datos, podemos usar imágenes de Docker para crearlas rápidamente.

Con esto en mente, te vamos a enseñar cómo crear contenedores de bases de datos en docker y usar estas imágenes para que instales tu base de datos favorita.

Pre-requisitos para crear contenedores de bases de datos en docker

Crear contenedores de bases de datos en Docker

Para empezar, vamos a crear un contenedor de la Base de Datos que tú desees. En Docker Hub podemos buscar las imágenes oficiales de las Bases de Datos más populares, por ejemplo MongoDB, MySQL o PostgreSQL. Hay muchas más que puedes encontrar en el repositorio de imágenes de Docker, pero en esta guía veremos las tres mencionadas.

Buscamos la imagen como “mongo”. Asegúrate de que tenga la etiqueta “Docker Official Image”.

Para crear el contenedor usamos el siguiente comando:

docker container run --name my-mongo-db -p 27017:27017 -d mongo
  • docker container run: comando de Docker para crear un contenedor.
  • --name: nombre del contenedor.
  • -p: importante para asignar el puerto a exponer para conectarte a la Base de Datos. Por defecto el puerto que ofrece Mongo es 27017.
  • -d: significa “Detached” y crea el contenedor sin “atar” la terminal.

Buscamos la imagen como “mysql”. Asegúrate de que tenga la etiqueta “Docker Official Image”.

Resultado de búsqueda de mysql en Docker Hub
Resultado de búsqueda de la imagen de mysql en Docker Hub

Para crear el contenedor usamos el siguiente comando:

docker container run --name mysql-db -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql
  • docker container run: comando de Docker para crear un contenedor.
  • --name: nombre del contenedor.
  • -e: significa “Environment” y usa MYSQL_ROOT_PASSWORD para definir la contraseña por defecto del usuario root en el contenedor.
  • -p: importante para asignar el puerto a exponer para conectarte a la Base de Datos. Por defecto el puerto que ofrece mySQL es 3306.
  • -d: significa “Detached” y crea el contenedor sin “atar” la terminal.

Buscamos la imagen como “postgres”. Asegúrate de que tenga la etiqueta “Docker Official Image”.

Resultado de búsqueda de postgres en Docker Hub
Resultado de búsqueda de la imagen de postgres en Docker Hub

Para crear el contenedor usamos el siguiente comando:

docker container run --name my-postgres-db -e POSTGRES_PASSWORD=my-secret-pw -p 5432:5432 -d postgres
  • Docker container run: comando de Docker para crear un contenedor.
  • --name: nombre del contenedor.
  • -e: significa “Environment” y usa POSTGRES_PASSWORD para definir la contraseña por defecto del usuario root en el contenedor.
  • -p: importante para asignar el puerto a exponer para conectarte a la Base de Datos. Por defecto el puerto que ofrece postgreSQL es 5432.
  • -d: significa “Detached” y crea el contenedor sin “atar” la terminal.

Conectarse a la Base de Datos

Para conectarte a la base de datos tienes que utilizar localhost:puerto_de_la_DB, y podrás utilizarla como cualquier otra base de datos. También puedes usar el comando de Docker para conectarte por la terminal.

docker exec -it my-mongo-db mongo
docker exec -it mysql-db bash
docker exec -it my-postgres-db psql -U postgres

Usar Docker-Compose para tus proyectos

La opción anterior es muy útil en general, pero es una buena práctica utilizar bases de datos específicas para cada proyectos, generando un contenedor particular para cada caso. Para eso, necesitamos instalar Docker Compose y crear un archivo docker-compose.yml.

version: '3'

services:
  db-mongo:
    image: mongo
    restart: always
    container_name: my-mongo-db
    ports:
      - 27017:27017
    volumes:
      - ./db-volume:/var/lib/postgresql/data
version: '3'

services:
  db-mysql:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
    container_name: mysql-db
    ports:
      - 3306:3306
    volumes:
      - ./db-volume:/var/lib/mysql
version: '3'

services:
  db-postgres:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: my-secret-pw
    container_name: my-postgres-db
    ports:
      - 5432:5432
    volumes:
      - ./db-volume:/var/lib/postgresql/data

Una vez que tienes tu docker-compose listo, todo lo que tienes que hacer es usar el comando:

docker-compose up -d

Y si deseas destruir ese contenedor, usa el comando:

docker-compose down

Buenas prácticas

Ahora, algunas recomendaciones para mejorar tu experiencia al momento de crear contenedores de bases de datos en docker:

  • Procura utilizar siempre una tag estable y fija (por ejemplo mongo:5.0.0). En lo posible, evita la tag latest.
  • Revisa la documentación oficial de Docker y los repositorios de cada base de datos. Suelen contener mucha información útil para expandir las posibilidades de tu contenedor.
  • Elimina las imágenes de Docker que no estás usando para liberar espacio.
  • Al terminar de utilizar un contenedor, lo mejor es detenerlo.
  • No utilices el usuario root en la base de datos. De preferencia, crea un nuevo super-usuario.
  • Si usas Windows o Mac, puedes usar Docker Desktop, una interfaz gráfica para gestionar tus imágenes, contenedores, y otras opciones de Docker.

Conclusión

Como hemos podido ver, Docker ofrece una excelente forma de tener una o más bases de datos en tu computadora sin saturarla, teniendo la posibilidad de tener tu entorno aislado para cada proyecto sin comprometer los datos de otros contenedores, ni mezclándola entre ellos. Todo de forma muy sencilla y rápida.

Prueba Docker en tu cloud server y bríndale a tu aplicación todo el poder de la nube. Visita DonWeb Cloud,

Gabriel Cánepa
Gabriel Cánepa

Gabriel trabaja actualmente como desarrollador full-stack en Scalar, una firma que se dedica a hacer valuaciones de empresas. Es Administrador de Sistemas certificado por la Fundación Linux y previamente ha escrito un gran número de artículos y contenidos técnicos sobre el tema para: DigitalOcean, Linode, Carrera Linux Argentina y Tecmint.

Tiene una certificación en programación de la Universidad de Brigham Young-Idaho, y está completando las carreras de programador y analista de sistemas en la Universidad Nacional de Villa Mercedes (UNViMe).

En su tiempo libre, Gabriel disfruta leyendo libros de Stephen R. Covey, tocando piano y guitarra, y enseñando conocimientos de programación a su dos hijas.