Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
73 lines (60 loc) · 3.42 KB
/
Copy pathDockerfile
File metadata and controls
73 lines (60 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# syntax=docker/dockerfile:1@sha256:4edf897a3ffa55b89f906fc8cc78afdb3f1834cc9c7083565e611a8a7d5fe99e
# check=error=true
ARG POSTGRES_IMAGE=postgres:17.11@sha256:2d2b8998d31037bf721cfdf764d76ba74171b4fab3431b7f72c27c56ddbdf9e3
ARG POSTGRES_VERSION=17.11
ARG POSTGRES_MAJOR=17
ARG PGVECTOR_VERSION=0.8.7
ARG PGVECTOR_SHA256=cac0b10c360f05b2d521200105ba3697e773d4cd3731f5a915a7e37ebe0bea85
ARG PG_TEXTSEARCH_VERSION=1.5.1
ARG PG_TEXTSEARCH_SHA256=2e7fb76ed96176afc6d16cc5d095ced2cb233ff27fbeaa8c7bfffc82e02f7498
FROM ${POSTGRES_IMAGE} AS extensions
ARG POSTGRES_MAJOR
ARG PGVECTOR_VERSION
ARG PGVECTOR_SHA256
ARG PG_TEXTSEARCH_VERSION
ARG PG_TEXTSEARCH_SHA256
SHELL ["/bin/bash", "-euxo", "pipefail", "-c"]
# Build-only packages follow the pinned PostgreSQL base's package repository.
# hadolint ignore=DL3008
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
apt-get update \
&& apt-get install --yes --no-install-recommends \
build-essential \
ca-certificates \
curl \
"postgresql-server-dev-${POSTGRES_MAJOR}"
WORKDIR /usr/src
# Disable pgvector's -march=native default so the image remains CPU-portable.
RUN curl --fail --location --show-error --silent \
"https://github.com/pgvector/pgvector/archive/refs/tags/v${PGVECTOR_VERSION}.tar.gz" \
--output pgvector.tar.gz \
&& echo "${PGVECTOR_SHA256} pgvector.tar.gz" | sha256sum --check --strict \
&& tar --extract --gzip --file pgvector.tar.gz \
&& make --directory="pgvector-${PGVECTOR_VERSION}" --jobs="$(nproc)" OPTFLAGS="" \
&& make --directory="pgvector-${PGVECTOR_VERSION}" DESTDIR=/opt/extensions OPTFLAGS="" install \
&& install --directory /opt/extensions/usr/share/doc/pgvector \
&& install --mode=0444 "pgvector-${PGVECTOR_VERSION}/LICENSE" /opt/extensions/usr/share/doc/pgvector/LICENSE
RUN curl --fail --location --show-error --silent \
"https://github.com/timescale/pg_textsearch/archive/refs/tags/v${PG_TEXTSEARCH_VERSION}.tar.gz" \
--output pg_textsearch.tar.gz \
&& echo "${PG_TEXTSEARCH_SHA256} pg_textsearch.tar.gz" | sha256sum --check --strict \
&& tar --extract --gzip --file pg_textsearch.tar.gz \
&& make --directory="pg_textsearch-${PG_TEXTSEARCH_VERSION}" --jobs="$(nproc)" \
&& make --directory="pg_textsearch-${PG_TEXTSEARCH_VERSION}" DESTDIR=/opt/extensions install \
&& install --directory /opt/extensions/usr/share/doc/pg_textsearch \
&& install --mode=0444 "pg_textsearch-${PG_TEXTSEARCH_VERSION}/LICENSE" /opt/extensions/usr/share/doc/pg_textsearch/LICENSE
FROM ${POSTGRES_IMAGE}
ARG POSTGRES_VERSION
ARG PGVECTOR_VERSION
ARG PG_TEXTSEARCH_VERSION
LABEL org.opencontainers.image.title="Atlavium PostgreSQL" \
org.opencontainers.image.description="PostgreSQL with pgvector, pg_textsearch, pg_trgm, fuzzystrmatch, and unaccent for Atlavium" \
org.opencontainers.image.source="https://github.com/ChronicleKeeper/postgres" \
org.opencontainers.image.vendor="Atlavium" \
org.chroniclekeeper.postgresql.version="${POSTGRES_VERSION}" \
org.chroniclekeeper.pgvector.version="${PGVECTOR_VERSION}" \
org.chroniclekeeper.pg-textsearch.version="${PG_TEXTSEARCH_VERSION}"
COPY --from=extensions /opt/extensions/ /
COPY --chmod=0555 initdb/00-create-extensions.sh /docker-entrypoint-initdb.d/00-create-extensions.sh
CMD ["postgres", "-c", "shared_preload_libraries=pg_textsearch"]