Установка ClickHouse с помощью Docker
Руководство на Docker Hub приведено ниже для удобства. Доступные Docker-образы используют официальные deb-пакеты ClickHouse.
Команда docker pull:
Versions
- Тег
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, однако это имеет последствия для безопасности.
Как использовать этот образ Docker
Запуск экземпляра сервера
По умолчанию 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.
Они необязательны и могут быть включены с помощью следующих параметров командной строки 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, найденные в этом каталоге, для дальнейшей инициализации перед запуском сервиса.
Скрипты в каталоге /docker-entrypoint-initdb.d выполняются в алфавитном порядке по имени файла. Если ваши скрипты зависят друг от друга (например, скрипт, создающий представления, должен выполняться после скрипта, создающего соответствующие таблицы), убедитесь, что их имена сортируются в правильном порядке.
Также вы можете задать переменные окружения CLICKHOUSE_USER и CLICKHOUSE_PASSWORD, которые будут использоваться клиентом clickhouse-client во время инициализации.
Например, чтобы добавить ещё одного пользователя и базу данных, добавьте следующее в /docker-entrypoint-initdb.d/init-db.sh: