GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo crear un contenedor MySQL Docker para pruebas

Docker es un entorno de tiempo de ejecución de contenedor que permite que los programas funcionen en un entorno encarcelado sin dependencias externas requeridas. Los contenedores son similares en algunos conceptos a las máquinas virtuales, sin embargo, no usan un hipervisor y se ejecutan en una sola instancia de kernel, a menudo compartiendo la instancia con otros contenedores. Una de las principales características de la contenedorización es la falta de dependencias externas; el contenedor tiene todas las bibliotecas de tiempo de ejecución y los componentes necesarios para ejecutar la aplicación.

Oracle ha estado proporcionando imágenes de contenedores de Docker desde MySQL 5.5.40 y, por lo tanto, convierte a Docker en una excelente opción para realizar pruebas en múltiples versiones y lanzamientos de MySQL. A menudo, es deseable realizar pruebas de regresión de un error para determinar a qué versión(es) afecta el error o para cuantificar cómo cambió el comportamiento entre versiones.

Docker permite el lanzamiento bastante ligero de instancias de MySQL con una función de limpieza automática una vez que se completa la prueba. En esta publicación, demostraré algunas de las formas en que puede usar Docker para iniciar MySQL y usarlo para realizar pruebas.

Antes de que pueda usar Docker, debe estar instalado en su máquina de prueba. Si no tiene acceso a un sistema Linux directamente, le recomiendo que obtenga VirtualBox y cree una máquina virtual Linux para ejecutar imágenes de Docker, algunas buenas opciones para el sistema operativo serían CentOS 7 o Fedora (la última). Fedora se puede considerar como el upstream de las variantes empresariales de Linux y, por lo tanto, se garantiza que tendrá el soporte más reciente para las tecnologías.

Instalación

1. En los sistemas que tienen YUM o DNF y tienen acceso a los repositorios del sistema operativo, puede instalar Docker con este comando:

# yum install docker docker-common

Después de ejecutar ese comando, YUM debería solicitarle que instale la ventana acoplable y las dependencias necesarias.

2. Para usar Docker, debe iniciar el servicio:

# service docker start

En las distribuciones de CentOS/RHEL 7, use systemctl:

# systemct start docker

3. Si desea que Docker esté disponible después de cada reinicio, actívelo con este comando:

# chkconfig docker on

En las distribuciones de CentOS/RHEL 7, use systemctl:

# systemct enable docker

Cómo funciona Docker

Docker en sí mismo es solo un administrador de contenedores, para utilizar Docker de manera efectiva, debe tener acceso a docker.io, el sitio donde se publican las imágenes de contenedores de Docker y desde donde se pueden descargar. Los contenedores de Docker en docker.io contienen una imagen de los archivos binarios de MySQL y la información de dependencia para que el servicio de Docker pueda descargar los archivos de tiempo de ejecución y el sistema de archivos virtual adecuados para que se ejecute el contenedor de Docker.

Cuando crea una instancia de contenedor de Docker, asigna un sistema de archivos virtual para el contenedor que es persistente en las ejecuciones (a menos que use el –rm cambiar). Puede iniciar y detener los contenedores de Docker a voluntad y permanecerán persistentes durante los reinicios. Una de las características de Docker que lo hace especialmente útil para las instancias de prueba es la capacidad de borrar el contenedor una vez detenido. Si inicia un contenedor Docker con la opción –rm, cuando el contenedor se cierra, también se elimina del sistema de archivos y ayuda a eliminar el cruft.

Creación y lanzamiento de contenedores

Este es el comando más simple para iniciar la última versión de MySQL en un contenedor y eliminarla después del apagado:

# docker run --rm --name=mysql8 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:latest

Aquí está la decodificación de ese comando:

  • ventana acoplable – docker es el nombre ejecutable utilizado para realizar todas las funciones de docker.
  • correr – este es un comando dado a docker, le indica a docker que cree un nuevo contenedor y lo ejecute.
  • –rm – esto le indica a Docker que elimine los archivos del contenedor después de que se detenga.
  • –name=mysql8 – esto le dice a docker que nombre el contenedor 'mysql8' para todas las futuras referencias de comandos. Este nombre es arbitrario, pero debe ser descriptivo para evitar conflictos con varias instancias de contenedores.
  • -e MYSQL_ALLOW_EMPTY_PASSWORD – esto pasa una opción al contenedor durante la fase de creación, diciéndole al contenedor que asigne una contraseña de root vacía durante el proceso de creación.
  • -d mysql/mysql-server:último – esto le dice a docker el repositorio y la versión para descargar desde docker.io al crear el contenedor. La palabra "más reciente" es una versión mágica que le indica a Docker que descargue la versión más reciente de todas las versiones de MySQL; también puede especificar números de versión exactos.

Algunas de las modificaciones útiles del comando anterior pueden ser especificar una versión de MySQL o darle un nombre único. Aquí hay un ejemplo donde se especifica MySQL 8.0.13 y se usa un nombre único similar:

# docker run --rm --name=mysql8013 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:8.0.13

Incluso puede extraer instancias de MySQL 5.5 de esta manera:

docker run --rm --name=mysql55 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:5.5
Nota :Los ejemplos anteriores ignoran DELIBERADAMENTE cualquier y toda seguridad con el propósito de conveniencia y conveniencia. NO use ni reproduzca estas configuraciones en un entorno de producción, ¡NO son seguras!

Uso de la instancia de Docker

Hasta ahora solo hemos discutido el lanzamiento de la instancia de Docker, pero sin acceso al programa del cliente no es muy útil. Hacer conexiones utilizando los programas de cliente MySQL estándar es bastante sencillo porque utilizan conexiones de socket locales y se conectan a través de localhost. Si desea conectarse mediante una IP de red, como con MySQL Workbench, es un poco más complicado.

Aquí hay un ejemplo de una conexión CLI mysql local:

# docker exec -it mysql8 mysql -uroot

Analicemos ese comando:

  • ejecutivo – le dice a docker que ejecute un comando dentro de una instancia de contenedor docker.
  • -eso – le dice a docker que cree una sesión interactiva con un pseudo-tty.
  • mysql8 – le dice a docker que el comando se ejecutará en la instancia del contenedor llamada 'mysql8'.
  • mysql-uroot – esta es la línea de comando real de shell sin procesar que Docker ejecuta dentro de la instancia del contenedor.

Los contenedores de MySQL Docker tienen incluidas las utilidades de línea de comandos de MySQL, como mysql, mysqlpump, mysqldump, etc. Si desea canalizar datos a una de las herramientas de línea de comandos, como cargar un volcado, deberá eliminar - t desde la línea de comando, así:

# docker exec -i mysql8 mysql -uroot < dumpfile.sql

Acceso TCP/IP a contenedores Docker

Con los comandos de ejemplo anteriores, Docker asignará direcciones IP privadas no enrutables a los contenedores y creará una interfaz de red virtual en su sistema. La interfaz virtual y el contenedor forman los extremos para realizar conexiones TCP/IP con el servicio que se ejecuta en el contenedor.

Para averiguar la dirección IP de su interfaz de red virtual en su máquina Linux, ejecute este comando:

shell> ip addr show docker0

8: docker0:  mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:f7:98:c4:d1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:f7ff:fe98:c4d1/64 scope link
valid_lft forever preferred_lft forever

En el ejemplo anterior, puede ver que la dirección IP asignada a mi interfaz Docker virtual es 172.17.0.1, este es el punto final desde el que se conectará su aplicación cliente; esta es la dirección IP que utilizará para crear un usuario en MySQL.

Para determinar la dirección IP asignada a su instancia de contenedor, ejecute este comando, sustituyendo el nombre de su instancia por 'mysql' en el ejemplo:

shell> docker inspect mysql8 | grep IPAddress

"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

En el resultado anterior, la dirección IP de la instancia del contenedor es 172.17.0.2, por lo que los puntos finales son 172.17.0.1 <-> 172.17.0.2. A continuación, debemos crear un usuario para que el programa cliente se conecte, de lo contrario, recibirá una denegación porque 172.17.0.1 no es un host permitido.

shell> docker exec -it mysql8 mysql -uroot

mysql> create user [email protected] identified by '';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to [email protected] with grant option;
Query OK, 0 rows affected (0.01 sec)

Una vez que haya creado el usuario de la red, puede conectarse a su instancia de contenedor como root sin contraseña. La red 172.17.0.0/16 es una red privada no enrutable a la que no se puede acceder desde fuera de su máquina, por lo que no hay peligro de que alguien acceda a su contenedor acoplable desde el exterior.

Apagar y limpiar

Una vez que haya completado la prueba, deberá cerrar la instancia de Docker y limpiar los archivos si no usó --rm al iniciarlo.

Para cerrar una instancia de Docker:

# docker stop mysql8

Para eliminar la instancia:

# docker rm mysql8

Conclusión

Con suerte, he ilustrado la utilidad de los contenedores Docker para las pruebas y el uso de la zona de pruebas. Docker tiene el potencial de cambiar su flujo de trabajo y hacer que las pruebas de regresión sean rápidas, fáciles y convenientes. El centro de Docker contiene imágenes para la versión 5.5.40 y posteriores.


Cent OS
  1. Cómo ejecutar MySQL en Docker Container:una guía simple y fácil de seguir

  2. Cómo crear, enumerar y eliminar contenedores Docker en Linux

  3. Cómo usar SSH en un contenedor Docker

  4. Cómo salir de un contenedor Docker

  5. Cómo crear un repositorio local de Yum para paquetes empresariales de MySQL

Aprendizaje de Docker:Cómo crear un contenedor Docker

Cómo instalar Docker en Debian 11

Cómo crear una base de datos en MySQL

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo crear una imagen de Docker desde un contenedor en ejecución

Cómo crear un contenedor de aplicaciones Django Docker