Сборка Docker-образов
Эта страница переведена при помощи нейросети GigaChat.
Данный документ содержит инструкции по сборке Docker-образов для OrioleDB, а также по их тестированию.
Предварительные требования
Перед началом работы необходимо убедиться, что Docker установлен на локальной машине. В противном случае, программу можно скачать и установить с официального сайта Docker: https://docs.docker.com/get-docker/.
docker -v
Быстрый старт
-
Откройте терминал и перейдите в каталог проекта OrioleDB (если в нем еще не находитесь):
cd path/to/orioledb -
Соберите (Alpine) PostgreSQL 17 с расширением OrioleDB:
docker build -t orioletest:17 -f docker/Dockerfile --pull --network=host --progress=plain --build-arg PG_MAJOR="17" . -
Запустите сервер:
docker run --name orioletest17 -v orioletest17data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=oriole123 -d orioletest:17 -
Подключитесь к серверу через
psql:docker exec -ti orioletest17 psql -U postgresОжидается вывод, аналогичный следующему сообщению
psql:psql (17.9 OrioleDB beta 16 PGTAG=patches17_20 alpine:3.21+clang build:2026-06-17T15:23:16+00:00 17.9)Type "help" for help.postgres=# -
Включите расширение
orioledb:create extension if not exists orioledb; -
Проверьте работу некоторых команд:
postgres=# select orioledb_version();orioledb_version------------------OrioleDB beta 16(1 row)postgres=# CREATE TABLE oriole_test (a int) USING orioledb;CREATE TABLEpostgres=# INSERT INTO oriole_test VALUES (1), (2);INSERT 0 2postgres=# SELECT * FROM oriole_test;a---12(2 rows)postgres=# VACUUM ANALYZE oriole_test;VACUUMpostgres=# \d+ oriole_testTable "public.oriole_test"Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description--------+---------+-----------+----------+---------+---------+-------------+--------------+-------------a | integer | | | | plain | | |Access method: orioledbpostgres=# \d+List of relationsSchema | Name | Type | Owner | Persistence | Access method | Size | Description--------+----------------------+-------+----------+-------------+---------------+------------+-------------public | oriole_test | table | postgres | permanent | orioledb | 8192 bytes |public | orioledb_index | view | postgres | permanent | | 0 bytes |public | orioledb_index_descr | view | postgres | permanent | | 0 bytes |public | orioledb_table | view | postgres | permanent | | 0 bytes |public | orioledb_table_descr | view | postgres | permanent | | 0 bytes |(5 rows)postgres=# \dxList of installed extensionsName | Version | Schema | Description----------+---------+------------+------------------------------------------------------orioledb | 1.2 | public | OrioleDB -- the next generation transactional engineplpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language(2 rows)postgres=# \dx+ orioledbObjects in extension "orioledb"Object description--------------------------------------------------------------------------access method orioledbfunction orioledb_commit_hash()function orioledb_compression_max_level()function orioledb_evict_pages(oid,integer)function orioledb_get_evicted_trees()function orioledb_get_index_descrs()function orioledb_get_table_descrs()function orioledb_has_retained_undo()function orioledb_idx_structure(oid,text,character varying,integer)function orioledb_index_description(oid,oid,oid,text)function orioledb_index_oids()function orioledb_index_rows(oid)function orioledb_page_stats()function orioledb_parallel_debug_start()function orioledb_parallel_debug_stop()function orioledb_recovery_synchronized()function orioledb_relation_size(oid)function orioledb_sys_tree_check(integer,boolean)function orioledb_sys_tree_rows(integer)function orioledb_sys_tree_structure(integer,character varying,integer)function orioledb_table_description(oid)function orioledb_table_description(oid,oid,oid)function orioledb_table_oids()function orioledb_table_pages(oid)function orioledb_tableam_handler(internal)function orioledb_tbl_are_indices_equal(regclass,regclass)function orioledb_tbl_bin_structure(oid,boolean,integer)function orioledb_tbl_check(oid,boolean)function orioledb_tbl_compression_check(bigint,oid,integer[])function orioledb_tbl_indices(oid)function orioledb_tbl_structure(oid,character varying,integer)function orioledb_ucm_check()function orioledb_version()function orioledb_write_pages(oid)function pg_stopevent_reset(text)function pg_stopevent_set(text,jsonpath)function pg_stopevents()function s3_get(text)function s3_put(text,text)type orioledb_indextype orioledb_index[]type orioledb_index_descrtype orioledb_index_descr[]type orioledb_tabletype orioledb_table[]type orioledb_table_descrtype orioledb_table_descr[]view orioledb_indexview orioledb_index_descrview orioledb_tableview orioledb_table_descr(51 rows) -
Выйдите из базы данных, выполнив команду
\q. -
Остановите сервер:
docker stop orioletest17 -
Удалите контейнер:
docker container rm orioletest17 -
Удалите Docker-образ:
docker rmi orioletest:17 -
Удалите том с данными:
docker volume rm orioletest17data
Сборка Docker-образов
Для сборки Docker-образа необходимо использовать одну из команд описанных ниже.
Для сборки PostgreSQL 17 + расширения OrioleDB
docker build -t orioletest:17 -f docker/Dockerfile --pull --network=host --progress=plain --build-arg PG_MAJOR="17" .
Для сборки PostgreSQL 16 + расширения OrioleDB
docker build -t orioletest:16 -f docker/Dockerfile --pull --network=host --progress=plain --build-arg PG_MAJOR="16" .
Поддерживаемые переменные окружения
Данный проект сохраняет совместимость с официальным Docker-образом PostgreSQL, поэтому поддерживает те же переменные окружения:
POSTGRES_PASSWORD;POSTGRES_USER;POSTGRES_DB;POSTGRES_INITDB_ARGS;POSTGRES_INITDB_WALDIR;POSTGRES_HOST_AUTH_METHOD;PGDATA.
Подробнее: https://github.com/docker-library/docs/blob/master/postgres/README.md
Доступные параметры сборки Docker
Полный список параметров сборки приведен в файлах Dockerfile:
-
Alpine Linux:
./Dockerfile:- поддерживаются [
edge 3.21 3.20 3.19 3.18]; - пример:
--build-arg ALPINE_VERSION="3.21" -f docker/Dockerfile;
- поддерживаются [
-
Ubuntu Linux:
./Dockerfile.ubuntu:- поддерживаются [
devel 25.04 24.10 24.04 22.04 plucky oracular noble jammy]; - пример:
--build-arg UBUNTU_VERSION="24.04" -f docker/Dockerfile.ubuntu.
- поддерживаются [
Другие важные параметры сборки:
-
--build-arg PG_MAJOR="17":- Выбор основной версии PostgreSQL. По умолчанию
17; - Доступные значения:
16,17;
- Выбор основной версии PostgreSQL. По умолчанию
-
--build-arg BUILD_CC_COMPILER="gcc":- Выбор C-компилятора. По умолчанию
clang; - Доступные значения:
clangилиgcc.
- Выбор C-компилятора. По умолчанию
Например, для сборки образа с использованием Alpine версии 3.21, компилятора gcc и PostgreSQL версии 16 используется команда:
docker build --pull --network=host --progress=plain \
--build-arg ALPINE_VERSION="3.21" \
--build-arg BUILD_CC_COMPILER="gcc" \
--build-arg PG_MAJOR="16" \
-f docker/Dockerfile \
-t orioletest:16-gcc-alpine3.21 .
Для сборки образа с использованием Ubuntu версии devel, компилятора clang и PostgreSQL версии 17 используется команда:
docker build --pull --network=host --progress=plain \
--build-arg UBUNTU_VERSION="devel" \
--build-arg BUILD_CC_COMPILER="clang" \
--build-arg PG_MAJOR="17" \
-f docker/Dockerfile.ubuntu \
-t orioletest:17-clang-ubuntu-devel .
Версия devel является версией Ubuntu в разработке, поэтому она может быть нестабильной.
Экспериментальная сборка OrioleDB + расширения PostGIS
Известные ограничения: индексы OrioleDB gist, sp-gist и другие связанные типы индексов еще не поддерживаются.
-
Создайте образ
orioletest:17-gcc-alpine3.21:docker build --pull --network=host --progress=plain \--build-arg ALPINE_VERSION="3.21" \--build-arg BUILD_CC_COMPILER="gcc" \--build-arg PG_MAJOR="17" \-f docker/Dockerfile \-t orioletest:17-gcc-alpine3.21 . -
Соберите образ
oriolegis:17-3.5-alpine. В новом каталоге выполнить команды:git clone --depth=1 https://github.com/postgis/docker-postgis.gitcd ./docker-postgis/17-3.5/alpinedocker build --network=host --progress=plain \--build-arg BASE_IMAGE=orioletest:17-gcc-alpine3.21 \-t oriolegis:17-3.5-alpine .
Заметки для разработчиков
Для сборки всех вариаций Docker-образов на локальной машине необходимо выполнить следующую команду:
./ci/local_docker_matrix.sh;- или (экспериментально)
./ci/docker_matrix.sh --help.
Ubuntu
-
Поддерживаемые базовые образы (с обновлениями безопасности):
-
Поддерживаемые архитектуры базовых образов:
- [ amd64, arm32v7, arm64v8, ppc64le, riscv64, s390x].
Alpine
-
Поддерживаемые базовые образы (с обновлениями безопасности):
-
Поддерживаемые архитектуры базовых образов:
- [ amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, riscv64, s390x ].
macOS
В macOS может потребоваться установка bash и gnu-getopt из Homebrew. Для их установки выполните команду:
brew install bash gnu-getopt
Обновите /etc/shells:
echo /opt/homebrew/bin/bash >> /etc/shells
Может потребоваться обновление переменной PATH в файле .bashrc или .zshrc:
PATH=/opt/homebrew/bin:/opt/homebrew/opt/gnu-getopt/bin:$PATH
Прочее
- Тестирование: При наличии возможности тестирования на архитектурах, отличных от
amd64, пожалуйста, сообщите об этом! - Некоторые версии QEMU не могут эмулировать JIT в PostgreSQL. В этом случае необходимо использовать
jit=off. - Безопасность: Следует учитывать, что порты, не привязанные к хосту (то есть
-p 5432:5432вместо-p 127.0.0.1:5432:5432), будут доступны извне. Это также применимо, если настроено блокирование этого конкретного порта через UFW, так как Docker управляет собственными правилами iptables. Подробнее При простом пароле и открытых портах существует риск заражения криптомайнерами! - Windows: При возникновении проблем рекомендуется использовать Windows Subsystem for Linux (WSL2).
- Расширение текущих Docker-образов OrioleDB является сложной задачей. Невозможно использовать пакеты Ubuntu PostgreSQL (например:
postgresql-16-mobilitydb) — требуется сборка из исходного кода.