> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Instalar ClickHouse en Debian/Ubuntu Linux

# Instalar ClickHouse con Docker

<div id="install-clickhouse-using-docker">
  # Instalar ClickHouse con Docker
</div>

La guía de [Docker Hub](https://hub.docker.com/r/clickhouse/clickhouse-server/)
se reproduce a continuación para mayor comodidad. Las imágenes de Docker disponibles usan
los paquetes deb oficiales de ClickHouse.

Comando `docker pull`:

```bash theme={null}
docker pull clickhouse/clickhouse-server
```

<div id="versions">
  ## Versiones
</div>

* La etiqueta `latest` apunta a la versión más reciente de la rama estable más reciente.
* Las etiquetas de rama, como `22.2`, apuntan a la versión más reciente de la rama correspondiente.
* Las etiquetas de versión completa, como `22.2.3` y `22.2.3.5`, apuntan a la versión correspondiente.
* La etiqueta `head` se genera a partir del commit más reciente de la rama predeterminada.
* Cada etiqueta tiene un sufijo opcional, `-alpine`, para indicar que se ha generado sobre `alpine`.

<div id="compatibility">
  ### Compatibilidad
</div>

* La imagen amd64 requiere compatibilidad con las [instrucciones SSE3](https://en.wikipedia.org/wiki/SSE3).
  Prácticamente todas las CPU x86 posteriores a 2005 son compatibles con SSE3.
* La imagen arm64 requiere compatibilidad con la [arquitectura ARMv8.2-A](https://en.wikipedia.org/wiki/AArch64#ARMv8.2-A) y
  además con el registro Load-Acquire RCpc. El registro es opcional en la versión ARMv8.2-A y obligatorio en
  [ARMv8.3-A](https://en.wikipedia.org/wiki/AArch64#ARMv8.3-A). Es compatible con instancias Graviton >=2 y con instancias de Azure y GCP.
  Algunos ejemplos de dispositivos no compatibles son Raspberry Pi 4 (ARMv8.0-A) y Jetson AGX Xavier/Orin (ARMv8.2-A).
* A partir de ClickHouse 24.11, las imágenes de Ubuntu pasaron a usar `ubuntu:22.04` como imagen base. Requiere Docker >= `20.10.10`
  que incluya el [parche](https://github.com/moby/moby/commit/977283509f75303bc6612665a04abf76ff1d2468). Como solución alternativa, puede
  usar `docker run --security-opt seccomp=unconfined`; sin embargo, esto tiene implicaciones de seguridad.

<div id="how-to-use-image">
  ## Cómo utilizar esta imagen
</div>

<div id="start-server-instance">
  ### Iniciar la instancia del servidor
</div>

```bash theme={null}
docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
```

De forma predeterminada, ClickHouse solo será accesible a través de la red de Docker. Consulte la sección de redes más abajo.

De forma predeterminada, la instancia del servidor anterior se ejecutará como el usuario `default`, sin contraseña.

<div id="connect-to-it-from-native-client">
  ### Conéctese desde un cliente nativo
</div>

```bash theme={null}
docker run -it --rm --network=container:some-clickhouse-server --entrypoint clickhouse-client clickhouse/clickhouse-server
# O
docker exec -it some-clickhouse-server clickhouse-client
```

Consulta [ClickHouse client](/es/concepts/features/interfaces/cli) para obtener más información sobre el ClickHouse client.

<div id="connect-to-it-using-curl">
  ### Conectarse con curl
</div>

```bash theme={null}
echo "SELECT 'Hello, ClickHouse!'" | docker run -i --rm --network=container:some-clickhouse-server buildpack-deps:curl curl 'http://localhost:8123/?query=' -s --data-binary @-
```

Consulta la [ClickHouse HTTP Interface](/es/concepts/features/interfaces/http) para obtener más información sobre la interfaz HTTP.

<div id="stopping-removing-container">
  ### Detener / eliminar el contenedor
</div>

```bash theme={null}
docker stop some-clickhouse-server
docker rm some-clickhouse-server
```

<div id="networking">
  ### Red
</div>

<Note>
  el usuario predefinido `default` no tiene acceso de red a menos que se establezca una contraseña;
  consulta "Cómo crear la base de datos y el usuario predeterminados al iniciar" y "Gestionar el usuario `default`" más abajo
</Note>

Puedes exponer tu ClickHouse en ejecución en Docker [asignando un puerto específico](https://docs.docker.com/config/containers/container-networking/)
desde el interior del contenedor mediante puertos del host:

```bash theme={null}
docker run -d -p 18123:8123 -p19000:9000 -e CLICKHOUSE_PASSWORD=changeme --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
echo 'SELECT version()' | curl 'http://localhost:18123/?password=changeme' --data-binary @-
```

O permitiendo que el contenedor use [directamente los puertos del host](https://docs.docker.com/network/host/) con `--network=host`
(lo que también permite obtener un mejor rendimiento de red):

```bash theme={null}
docker run -d --network=host --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
echo 'SELECT version()' | curl 'http://localhost:8123/' --data-binary @-
```

<Note>
  El usuario predeterminado del ejemplo anterior está disponible solo para las peticiones desde localhost
</Note>

<div id="volumes">
  ### Volúmenes
</div>

Normalmente, conviene montar las siguientes carpetas dentro del contenedor para garantizar la persistencia:

* `/var/lib/clickhouse/` - carpeta principal donde ClickHouse almacena los datos
* `/var/log/clickhouse-server/` - logs

```bash theme={null}
docker run -d \
    -v "$PWD/ch_data:/var/lib/clickhouse/" \
    -v "$PWD/ch_logs:/var/log/clickhouse-server/" \
    --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
```

También puede montar:

* `/etc/clickhouse-server/config.d/*.xml` - archivos con ajustes de configuración del servidor
* `/etc/clickhouse-server/users.d/*.xml` - archivos con ajustes de configuración de usuarios
* `/docker-entrypoint-initdb.d/` - carpeta con scripts de inicialización de la base de datos (consulte más abajo).

<div id="linear-capabilities">
  ## Capacidades de Linux
</div>

ClickHouse cuenta con algunas funciones avanzadas que requieren habilitar varias [capacidades de Linux](https://man7.org/linux/man-pages/man7/capabilities.7.html)

Son opcionales y se pueden habilitar con los siguientes [argumentos de la línea de comandos de Docker](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities):

```bash theme={null}
docker run -d \
    --cap-add=SYS_NICE --cap-add=NET_ADMIN --cap-add=IPC_LOCK \
    --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
```

Para más información, consulte ["Configuración de las capacidades CAP\_IPC\_LOCK y CAP\_SYS\_NICE en Docker"](/es/resources/support-center/knowledge-base/troubleshooting/configure-cap-ipc-lock-and-cap-sys-nice-in-docker)

<div id="configuration">
  ## Configuración
</div>

El contenedor expone el puerto 8123 para la [interfaz HTTP](/es/concepts/features/interfaces/http) y el puerto 9000 para el [cliente nativo](/es/concepts/features/interfaces/tcp).

La configuración de ClickHouse se define en el archivo "config.xml" ([documentación](/es/concepts/features/configuration/server-config/configuration-files))

<div id="start-server-instance-with-custom-config">
  ### Iniciar una instancia del servidor con una configuración personalizada
</div>

```bash theme={null}
docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 -v /path/to/your/config.xml:/etc/clickhouse-server/config.xml clickhouse/clickhouse-server
```

<div id="start-server-custom-user">
  ### Iniciar el servidor con un usuario personalizado
</div>

```bash theme={null}
# $PWD/data/clickhouse debe existir y pertenecer al usuario actual
docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit nofile=262144:262144 -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server
```

Cuando use la imagen con directorios locales montados, probablemente le convenga especificar el usuario para mantener la propiedad correcta de los archivos. Use el argumento `--user` y monte `/var/lib/clickhouse` y `/var/log/clickhouse-server` dentro del contenedor. De lo contrario, la imagen mostrará un error y no se iniciará.

<div id="start-server-from-root">
  ### Iniciar el servidor desde root
</div>

Iniciar el servidor desde root es útil en los casos en que el espacio de nombres de usuario está habilitado.
Para hacerlo, ejecute:

```bash theme={null}
docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server
```

<div id="how-to-create-default-db-and-user">
  ### Cómo crear una base de datos y un usuario predeterminados al iniciar
</div>

A veces puede que quieras crear un usuario (de forma predeterminada se usa un usuario llamado `default`) y una base de datos al iniciar el contenedor. Puedes hacerlo mediante las variables de entorno `CLICKHOUSE_DB`, `CLICKHOUSE_USER`, `CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT` y `CLICKHOUSE_PASSWORD`:

```bash theme={null}
docker run --rm -e CLICKHOUSE_DB=my_database -e CLICKHOUSE_USER=username -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=password -p 9000:9000/tcp clickhouse/clickhouse-server
```

<div id="managing-default-user">
  #### Gestión del usuario `default`
</div>

El usuario `default` tiene el acceso de red deshabilitado de forma predeterminada si no se establece ninguno de estos valores: `CLICKHOUSE_USER`, `CLICKHOUSE_PASSWORD` o `CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT`.

Hay una forma de hacer que el usuario `default` esté disponible de forma no segura: estableciendo la variable de entorno `CLICKHOUSE_SKIP_USER_SETUP` en 1:

```bash theme={null}
docker run --rm -e CLICKHOUSE_SKIP_USER_SETUP=1 -p 9000:9000/tcp clickhouse/clickhouse-server
```

<div id="how-to-extend-image">
  ## Cómo extender esta imagen
</div>

Para realizar una inicialización adicional en una imagen derivada de esta, agregue uno o varios scripts `*.sql`, `*.sql.gz` o `*.sh` en `/docker-entrypoint-initdb.d`. Después de que el entrypoint llame a `initdb`, ejecutará todos los archivos `*.sql`, ejecutará todos los scripts `*.sh` ejecutables y cargará todos los scripts `*.sh` no ejecutables que encuentre en ese directorio para completar la inicialización antes de iniciar el servicio.

<Note>
  Los scripts de `/docker-entrypoint-initdb.d` se ejecutan en **orden alfabético** según el nombre del archivo. Si sus scripts dependen unos de otros (por ejemplo, un script que crea vistas debe ejecutarse después del script que crea las tablas a las que hacen referencia), asegúrese de que los nombres de archivo queden ordenados correctamente.
</Note>

Además, puede proporcionar las variables de entorno `CLICKHOUSE_USER` & `CLICKHOUSE_PASSWORD`, que se usarán con clickhouse-client durante la inicialización.

Por ejemplo, para agregar otro usuario y otra base de datos, añada lo siguiente a `/docker-entrypoint-initdb.d/init-db.sh`:

```bash theme={null}
#!/bin/bash
set -e

clickhouse client -n <<-EOSQL
    CREATE DATABASE docker;
    CREATE TABLE docker.docker (x Int32) ENGINE = MergeTree
    ORDER BY ();
EOSQL
```
