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