Установка ClickHouse с помощью Docker
Руководство на Docker Hub приведено ниже для удобства. Доступные Docker-образы используют официальные deb‑пакеты ClickHouse.
Команда docker pull:
Версии
- Тег
latestуказывает на последний релиз последней стабильной ветки. - Теги веток, такие как
22.2, указывают на последний релиз соответствующей ветки. - Теги полной версии, такие как
22.2.3и22.2.3.5, указывают на соответствующий релиз. - Тег
headсобирается из последнего коммита в ветке по умолчанию. - У каждого тега есть необязательный суффикс
-alpine, который показывает, что образ собран на базеalpine.
Совместимость
- Образ для amd64 требует поддержки инструкций SSE3. Практически все x86‑процессоры, выпущенные после 2005 года, поддерживают SSE3.
- Образ для arm64 требует поддержки архитектуры ARMv8.2-A и дополнительно регистра Load-Acquire RCpc. Этот регистр является необязательным в версии ARMv8.2-A и обязательным в ARMv8.3-A. Поддерживается в Graviton >=2, а также на инстансах Azure и GCP. Примеры неподдерживаемых устройств: Raspberry Pi 4 (ARMv8.0-A) и Jetson AGX Xavier/Orin (ARMv8.2-A).
- Начиная с ClickHouse 24.11 образы на базе Ubuntu используют
ubuntu:22.04в качестве базового образа. Это требует версии Docker >=20.10.10, содержащей соответствующий патч. В качестве обходного решения можно использоватьdocker run --security-opt seccomp=unconfined, однако это имеет последствия для безопасности.
Как использовать этот образ
Запуск экземпляра сервера
По умолчанию ClickHouse будет доступен только через Docker-сеть. См. раздел о сетевом взаимодействии ниже.
По умолчанию описанный выше экземпляр сервера запускается от имени пользователя default без пароля.
Подключение к нему из нативного клиента
Подробнее о клиенте ClickHouse см. в разделе ClickHouse client.
Подключение с помощью curl
Подробную информацию об HTTP-интерфейсе см. в разделе ClickHouse HTTP Interface.
Остановка и удаление контейнера
Сеть
Предопределённый пользователь default не имеет сетевого доступа, пока для него не задан пароль,
см. разделы "How to create default database and user on starting" и "Managing default user" ниже.
Вы можете открыть доступ к вашему ClickHouse, запущенному в Docker, пробросив определённый порт из контейнера на порт хоста:
Или разрешив контейнеру использовать порты хоста напрямую, указав --network=host
(также позволяет добиться более высокой сетевой производительности):
Пользователь по умолчанию в приведённом выше примере доступен только для запросов с localhost
Томa
Обычно для обеспечения сохранности данных имеет смысл смонтировать в контейнер следующие каталоги:
/var/lib/clickhouse/— основной каталог, где ClickHouse хранит данные/var/log/clickhouse-server/— логи
Также можно смонтировать:
/etc/clickhouse-server/config.d/*.xml- файлы с изменениями конфигурации сервера/etc/clickhouse-server/users.d/*.xml- файлы с изменениями настроек пользователей/docker-entrypoint-initdb.d/- каталог со скриптами инициализации базы данных (см. ниже).
Возможности Linux
У ClickHouse есть дополнительная функциональность, для работы которой требуется включить несколько возможностей Linux (capabilities).
Они не являются обязательными и могут быть включены с помощью следующих аргументов командной строки Docker:
Дополнительные сведения см. в разделе "Настройка возможностей CAP_IPC_LOCK и CAP_SYS_NICE в Docker"
Конфигурация
Контейнер открывает порт 8123 для HTTP-интерфейса и порт 9000 для нативного клиента.
Конфигурация ClickHouse представлена файлом «config.xml» (документация).
Запуск экземпляра сервера с собственной конфигурацией
Запуск сервера от имени отдельного пользователя
Когда вы используете образ с примонтированными локальными каталогами, вам, вероятно, нужно указать пользователя, чтобы сохранить корректное владение файлами. Используйте аргумент --user и смонтируйте /var/lib/clickhouse и /var/log/clickhouse-server внутрь контейнера. В противном случае образ будет выдавать ошибку и не запустится.
Запуск сервера от root
Запуск сервера от root полезен в случаях, когда включено пространство имён пользователей. Чтобы сделать это, выполните:
Как создать базу данных и пользователя по умолчанию при запуске
Иногда может потребоваться при запуске контейнера создать пользователя (по умолчанию используется пользователь с именем default) и базу данных. Это можно сделать с помощью переменных окружения CLICKHOUSE_DB, CLICKHOUSE_USER, CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT и CLICKHOUSE_PASSWORD:
Управление пользователем default
Пользователь default по умолчанию не имеет сетевого доступа, если не заданы ни CLICKHOUSE_USER, ни CLICKHOUSE_PASSWORD, ни CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT.
Можно небезопасным образом открыть доступ для пользователя default, присвоив переменной окружения CLICKHOUSE_SKIP_USER_SETUP значение 1:
Как расширить этот образ
Чтобы выполнить дополнительную инициализацию в образе, производном от этого, добавьте один или несколько скриптов *.sql, *.sql.gz или *.sh в каталог /docker-entrypoint-initdb.d. После того как entrypoint-скрипт вызовет initdb, он выполнит все файлы *.sql, запустит все исполняемые скрипты *.sh и подключит (source) все неисполняемые скрипты *.sh, найденные в этом каталоге, для дальнейшей инициализации перед запуском сервиса.
Также вы можете задать переменные окружения CLICKHOUSE_USER & CLICKHOUSE_PASSWORD, которые будут использоваться clickhouse-client во время инициализации.
Например, чтобы добавить ещё одного пользователя и базу данных, добавьте следующее в /docker-entrypoint-initdb.d/init-db.sh: