# Instalar MySQL con contenedores de Docker

### Iniciar una instancia de servidor `mysql`&#x20;

Iniciar una instancia MySQL es simple:

```console
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
```

Donde `some-mysql` está el nombre que se le va a asignar al contenedor, `my-secret-pw`es la contraseña que se establecerá para el usuario root de MySQL y `tag` es la etiqueta que especifica la versión de MySQL que se desea.&#x20;

### Conéctese a MySQL desde el cliente de línea de comandos de MySQL

El siguiente comando inicia otra instancia de contenedor `mysql` y ejecuta el `mysql` cliente de línea de comandos en el contenedor original `mysql`, lo que le permite ejecutar instrucciones SQL en su instancia de base de datos:

```console
$ docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
```

Donde `some-mysql` está el nombre del contenedor original `mysql` (conectado a la `some-network`red Docker).

Esta imagen también se puede utilizar como cliente para instancias remotas o que no sean de Docker:

```console
$ docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p
```

### Vía [`docker-compose`](https://github.com/docker/compose)o[`docker stack deploy`](https://docs.docker.com/engine/reference/commandline/stack_deploy/)

Ejemplo `docker-compose.yml`para `mysql`:

```yaml
# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: mysql
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
```

{% hint style="info" %}
[Probar en Juega con Docker](http://play-with-docker.com/?stack=https://raw.githubusercontent.com/docker-library/docs/06990e05c934d425c74addcc5ea462f53de6c8cd/mysql/stack.yml&_gl=1*1m37pwp*_ga*MTg2OTkyNzQzMi4xNjc2Njk3MjYz*_ga_XJWPQMJYHQ*MTY5MjQyNDQzMC41LjEuMTY5MjQyNTUyMi40OS4wLjA.)
{% endhint %}

Ejecutar `docker stack deploy -c stack.yml mysql`(o `docker-compose -f stack.yml up`), esperar a que se inicialice por completo y visitar `http://swarm-ip:8080`, `http://localhost:8080`o `http://host-ip:8080`(según corresponda).

### Acceso al shell del contenedor y visualización de registros de MySQL

El comando `docker exec` permite ejecutar comandos dentro de un contenedor de Docker. La siguiente línea de comando dará un shell bash dentro del contenedor `mysql`:

```console
$ docker exec -it some-mysql bash
```

El registro está disponible a través del registro del contenedor de Docker:

```console
$ docker logs some-mysql
```

### Usando un archivo de configuración de MySQL personalizado

La configuración predeterminada para MySQL se puede encontrar en `/etc/mysql/my.cnf`, que puede tener `!includedir` directorios adicionales como `/etc/mysql/conf.d`o `/etc/mysql/mysql.conf.d`. Inspeccionar los archivos y directorios relevantes dentro de la imagen `mysql` para obtener más detalles.

Si `/my/custom/config-file.cnf` es la ruta y el nombre de su archivo de configuración personalizado, puede iniciar su contenedor `mysql` de esta manera (tomar en cuenta que en este comando solo se usa la ruta del directorio del archivo de configuración personalizado):

```console
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
```

Esto iniciará un nuevo contenedor `some-mysql` donde la instancia de MySQL usa la configuración de inicio combinada de `/etc/mysql/my.cnf`y `/etc/mysql/conf.d/config-file.cnf`, con la configuración de este último teniendo prioridad.

#### Configuración sin `cnf`archivo

Muchas opciones de configuración se pueden pasar como banderas a `mysqld`. Esto dará la flexibilidad de personalizar el contenedor sin necesidad de un `cnf` archivo. Por ejemplo, si se quiere cambiar la codificación y la intercalación predeterminadas para que todas las tablas usen UTF-8 ( `utf8mb4`), simplemente ejecutar lo siguiente:

```console
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
```

Si se quiere ver una lista completa de las opciones disponibles, simplemente ejecute:

```console
$ docker run -it --rm mysql:tag --verbose --help
```

## Enlace de referencia

* <https://hub.docker.com/_/mysql>
* <https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/docker-library/docs/06990e05c934d425c74addcc5ea462f53de6c8cd/mysql/stack.yml&_gl=1*1m37pwp*_ga*MTg2OTkyNzQzMi4xNjc2Njk3MjYz*_ga_XJWPQMJYHQ*MTY5MjQyNDQzMC41LjEuMTY5MjQyNTUyMi40OS4wLjA.>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dojo.lkmx.io/mysql/instalar-mysql-con-contenedores-de-docker.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
