Сборка 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 TABLE
postgres=# INSERT INTO oriole_test VALUES (1), (2);
INSERT 0 2
postgres=# SELECT * FROM oriole_test;
a
---
1
2
(2 rows)
postgres=# VACUUM ANALYZE oriole_test;
VACUUM
postgres=# \d+ oriole_test
Table "public.oriole_test"
Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
--------+---------+-----------+----------+---------+---------+-------------+--------------+-------------
a | integer | | | | plain | | |
Access method: orioledb
postgres=# \d+
List of relations
Schema | 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=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+------------------------------------------------------
orioledb | 1.2 | public | OrioleDB -- the next generation transactional engine
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
postgres=# \dx+ orioledb
Objects in extension "orioledb"
Object description
--------------------------------------------------------------------------
access method orioledb
function 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_index
type orioledb_index[]
type orioledb_index_descr
type orioledb_index_descr[]
type orioledb_table
type orioledb_table[]
type orioledb_table_descr
type orioledb_table_descr[]
view orioledb_index
view orioledb_index_descr
view orioledb_table
view 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.git
cd ./docker-postgis/17-3.5/alpine
docker 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) — требуется сборка из исходного кода.