Cómo configurar y usar MariaDB en Docker Container
Estoy siguiendo mi serie de artículos sobre las estrellas de rock del ecosistema devops. En el artículo de hoy, le mostraré cómo configurar y usar MariaDB en el contenedor de la ventana acoplable y, como beneficio adicional, podremos reutilizar la API de nodejs simple utilizada en mi artículo de vistas previas para mostrarle cómo podemos interactuar con MariaDB desde otro contenedor.
Lo que aprenderemos
- Instalar, crear y ejecutar el contenedor MariaDB
- Golpear el servidor MariaDB desde otro contenedor
El artículo actual está organizado de la siguiente manera
- Introducción
- Iniciando la instancia de MariaDB
- Conectando a MariaDB desde fuera
- Detener y eliminar el contenedor MariaDB
- Conclusión
Introducción
A modo de introducción, me gustaría mencionar algunos puntos interesantes sobre MariaDB. El primer punto es que MariaDB se ha creado con el mismo tipo que creó Mysql, de hecho, MariaDB comienza como una bifurcación del repositorio de Mysql. En 2008 ha sido adquirida por Oracle, después de un año, parece que el Sr. Widenius el fundador de Mysql no encuentra un terreno común con la firma, por lo que dejó Oracle para crear MariaDB. Segundo punto, MariaDB asegura que el producto seguirá siendo 100% de código abierto y gratuito, por lo tanto, todos los parches, actualizaciones y correcciones, por seguridad y otros, están abiertos y accesibles para todos. El tercer punto es que la comunidad de MariaDB se asegura de que este último seguirá siendo totalmente compatible con las API de Mysql. En el último punto, mencionaría que varios puntos de referencia muestran que MariaDB supera a Mysql. Me detendré aquí y comenzaré nuestro objetivo principal, que es MariaDB en la ventana acoplable.
Iniciando instancia de mariadb
Para usar mariadb con un contenedor, tenemos dos opciones, que son válidas para cualquier software no solo mariadb, la primera opción es buscar una imagen en la que mariadb esté instalado con todas las dependencias necesarias y todo lo que tenemos que hacer es dispara un recipiente de esta imagen; la segunda opción, que es un poco complicada, es construir una imagen para nosotros en un sistema operativo, por ejemplo, Ubuntu, Debian, CentOs, etc., por lo tanto, debemos instalar MariaDB y las dependencias necesarias también. Como sabrá, la forma más utilizada y conveniente es la primera, casi todos los proveedores de software ahora brindan su imagen oficial de la ventana acoplable; Entonces, también elegiré la primera opción. Lo primero, tengo que encontrar e instalar la imagen MariaDB, para hacerlo, simplemente conéctese al concentrador de la ventana acoplable (hub.docker.io) y busque usando la palabra ‘mariadb’, las imágenes oficiales siempre se etiquetan como oficiales como se muestra en la captura de pantalla a continuación:
Creemos un Dockerfile para crear una instancia de contenedor mariadb:
➜ docker-mariadb git:(master) ✗ cat Dockerfile FROM mariadb:latest ENV MYSQL_ROOT_PASSWORD test
Nuestro archivo docker usará la última imagen de mariadb y también llenaremos una variable env MYSQL_ROOT_PASSWORD a través de la ENV VALOR CLAVE El comando más detallado se da a continuación:
Construyamos la imagen MariaDB usando comando de compilación de Docker
➜ docker-mariadb git:(master) ✗ docker build -t linoxide/mariadb:v1 . Sending build context to Docker daemon 34.82 kB Step 1 : FROM mariadb:latest latest: Pulling from library/mariadb … Successfully built a33014d19bcb
Una vez que la imagen está construida, podemos usarla para ejecutar nuestro contenedor, así:
➜ ~ docker run -d linoxide/mariadb:v1 35d67d1643b44f1063500e38805e5c54545540c37d1c0179acb5cc953076ee09
Nota:
Si no desea usar Dockerfile, puede ejecutar un contenedor simplemente usando una línea de comando, como se muestra a continuación, pero se prefiere Dockerfile ya que nos permite guardar nuestra configuración de construcción, por ejemplo, en nuestro caso, era solo una simple variable env MYSQL_ROOT_PASSWORD pero puedes imaginar una situación con un montón de configuraciones.
Hagamos una lista de nuestros contenedores:
➜ ~ Docker ps Container id image command created status ports names 35d67d1643b4 linoxide/mariadb:v1 "docker-entrypoint.sh" 5 minutes ago up 5 minutes 3306/tcp silly_davinci
Conectando a nuestro contenedor bash usando el ID del contenedor (mira el resultado del último comando arriba). Una vez conectados, podemos iniciar el servidor de la base de datos usando mysql –usuario = raíz –contraseña = $ MYSQL_ROOT_PASSWORD; en el momento de escribir mysql sigue siendo el punto de entrada para iniciar el servidor mariadb:
➜ ~ docker exec -it 35d67d1643b4 bash root@35d67d1643b4:/# mysql --user=root --password=test Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 2 Server version: 10.1.19-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) MariaDB [(none)]>
Use ‘salir’ para salir de la consola mariadb y una segunda ‘salida’ para salir del contenedor bash.
Para comprobar los registros del servidor, utilice registros de docker docker_id mando.
Notas:
A continuación se muestran algunas variables env que podemos usar, por ejemplo, en nuestro Dockerfile:
- MYSQL_ROOT_PASSWORD [mandatory]: para especificar una contraseña de usuario root del servidor de base de datos
- MYSQL_DATABASE [optional]: si queremos crear una base de datos específica por nombre al inicio del servidor db
- MYSQL_USER, MYSQL_PASSWORD [optional]: si queremos crear un nuevo usuario al inicio, entonces podemos especificar el nombre y la contraseña del usuario
- MYSQL_ALLOW_EMPTY_PASSWORD [optional]: si es igual a sí, el contenedor comenzará a permitir una contraseña en blanco para el usuario root
- MYSQL_RANDOM_ROOT_PASSWORD [optional]: asigne una contraseña aleatoria al usuario root al inicio, la contraseña se imprimirá en el STDOUT
Conectando a mariadb desde fuera
Ahora que hemos creado un servidor de base de datos, podemos atacarlo desde afuera, idealmente, para nosotros en este artículo podemos usar otro contenedor para hacer eso. Entonces, aquí reutilizaré mi aplicación nodejs de muestra creada en un artículo de vistas previas para disparar un contenedor. En primer lugar, siga adelante y verifique la dirección IP de nuestro contenedor MariaDB mirando la línea «IPAddress» en la salida del comando a continuación:
➜ msg-api git:(master) ✗ docker inspect 35d67d1643b4 "IPAddress": "172.17.0.2"
Tenga en cuenta que cambiaré la dirección IP de mi aplicación nodejs y crearé una nueva imagen; para obtener más detalles, consulte mi artículo de vistas previas como se mencionó anteriormente; de lo contrario, puede seguir los pasos a continuación, ya que ya he sacado la ventana acoplable. de la imagen a la ventana acoplable, la ventana acoplable la encontrará y la extraerá de la ventana acoplable:
➜ msg-api git:(master) ✗ docker build -t linoxide/msg-api:v0.0.5 . Sending build context to Docker daemon 9.728 kB Step 1 : FROM node:latest … Successfully built e0f9596397a3
Ahora ejecutemos un contenedor docker con port-forward para poder atacarlo desde afuera:
➜ msg-api git:(master) ✗ docker run -d -p 8080:8080 --name msg-api linoxide/msg-api:v0.0.5 8f70e4261bc6676467fe4f59fc67fa7e4659860d20f2e55dd3dec48ed3ee0d70
verifiquemos el estado de nuestra aplicación usando el punto final ‘/ ping’:
➜ docker-mariadb git:(master) ✗ curl localhost:8080/ping hello there! I m up and running!%
Ahora me voy a conectar al servidor mariadb e insertar algunos datos:
➜ msg-api git:(master) ✗ docker exec -it 35d67d1643b4 bash root@35d67d1643b4:/# mysql --user=root --password=test Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 8 Server version: 10.1.19-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | k8smysqldb | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.04 sec) MariaDB [(none)]> use k8smysqldb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [k8smysqldb]> insert into messages values 'first faked msg over here'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''first faked msg over here'' at line 1 MariaDB [k8smysqldb]> insert into messages(text) values('first faked msg over here'); Query OK, 1 row affected (0.02 sec) MariaDB [k8smysqldb]> insert into messages(text) values('Second faked msg over here'); Query OK, 1 row affected (0.03 sec) MariaDB [k8smysqldb]>
Ahora, voy a usar nuestra aplicación nodejs para recuperar estos datos usando msg-api / all endpoint:
➜ docker-mariadb git:(master) ✗ curl localhost:8080/msg-api/all [{"id":1,"text":"first faked msg over here"},{"id":2,"text":"Second faked msg over here"}]%
Entonces todo está funcionando bien.
Detener y eliminar el contenedor mariadb
Una vez que haya terminado con sus contenedores docker y desee eliminarlos, simplemente ejecute:
- docker ps –a para enumerar todos los contenedores,
- busque los ID de los contenedores que desea eliminar
- asegúrese de detenerlos primero, de lo contrario obtendrá un error, para hacerlo, estibador detenga your_container_id1 your_container_id1 …
- entonces corre docker rm your_container_id1 your_container_id1… para borrarlos
Conclusión
En resumen, en este artículo hemos visto cómo poner en marcha un servidor MariaDB utilizando un contenedor docker. También hemos visto cómo conectarse al contenedor en sí y ejecutar el servidor de la base de datos usando el programa mysql (sí, ya que mariadb es totalmente compatible con mysql) y cómo comunicarse con la base de datos mariadb desde otro contenedor.