Skip to content

Commit

Permalink
reworking mongo docker images
Browse files Browse the repository at this point in the history
  • Loading branch information
AmebaBrain committed Nov 17, 2024
1 parent 8400c0d commit 333efba
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 43 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,11 @@ Image|Tag|Size, MB|Additional Size, MB|Size Grow, %
-|-|-|-|-
postgres|17.0|434|0|0
postgres_mysql_fdw|17.0_fdw2.9.2|437|3|0.7
postgres_mongo_fdw|17.0_fdw5.5.2|441|7|1.6
-|-|-|-|-
postgres|16.5|432|0|0
postgres_mysql_fdw|16.5_fdw2.9.1|435|3|0.7
postgres_mongo_fdw|16.5_fdw5.5.1|452|20|4.6
-|-|-|-|-
postgres|16.4|432|0|0
postgres_mysql_fdw|16.4_fdw2.9.1|434|2|0.5
Expand Down
53 changes: 35 additions & 18 deletions v16/postgres_mongo.docker
Original file line number Diff line number Diff line change
@@ -1,30 +1,47 @@
ARG base_tag=16.3
FROM postgres:${base_tag}
ARG base_tag=16.5
ARG pg_version=16

# build stage
FROM docker.io/postgres:${base_tag} AS build

ARG pg_version

ARG MONGO_FDW_VERSION=5_5_1
ARG MONGO_FDW_URL=https://github.com/EnterpriseDB/mongo_fdw/archive/REL-${MONGO_FDW_VERSION}.tar.gz
ARG SOURCE_FILES=/tmp/mongo_fdw

RUN apt-get update;

ENV PKG_CONFIG_PATH=${SOURCE_FILES}/mongo-c-driver/src/libmongoc/src:${SOURCE_FILES}/mongo-c-driver/src/libbson/src
ENV LD_LIBRARY_PATH=/lib

RUN apt-get update && \
# compilation deps
RUN apt-get install -y --no-install-recommends wget ca-certificates \
apt-get install -y --no-install-recommends wget ca-certificates \
make gcc cmake pkg-config \
postgresql-server-dev-16 libssl-dev libzstd-dev; \
postgresql-server-dev-${pg_version} libssl-dev libzstd-dev && \
# mongo_fdw
mkdir -p ${SOURCE_FILES}; \
wget -O - ${MONGO_FDW_URL} | tar -zx --strip-components=1 -C ${SOURCE_FILES}; \
cd ${SOURCE_FILES}; \
mkdir -p ${SOURCE_FILES} && \
wget -O - ${MONGO_FDW_URL} | tar -zx --strip-components=1 -C ${SOURCE_FILES} && \
cd ${SOURCE_FILES} && \
# install
./autogen.sh --with-master; \
make; \
make install; \
# cleanup
apt-get purge -y --auto-remove wget ca-certificates \
make gcc cmake pkg-config \
postgresql-server-dev-16 libssl-dev libzstd-dev; \
cd -; \
rm -rf ${SOURCE_FILES};
./autogen.sh --with-master && \
make USE_PGXS=1 && \
make USE_PGXS=1 install


# final stage
FROM docker.io/postgres:${base_tag}

ARG pg_version
ARG extdir=/usr/share/postgresql/${pg_version}/extension
ARG extlibdir=/usr/lib/postgresql/${pg_version}/lib
ARG libdir=/usr/lib

COPY --from=build ${extdir}/mongo_fdw* ${extdir}/
COPY --from=build ${extlibdir}/mongo_fdw.so ${extlibdir}/
COPY --from=build ${libdir}/*mongo* ${libdir}/*libbson* ${libdir}/

WORKDIR ${libdir}
RUN ln -sf libmongoc-1.0.so.0 libmongoc-1.0.so; \
ln -sf libmongoc-1.0.so.0.0.0 libmongoc-1.0.so.0; \
ln -sf libbson-1.0.so.0 libbson-1.0.so; \
ln -sf libbson-1.0.so.0.0.0 libbson-1.0.so.0;
67 changes: 42 additions & 25 deletions v17/postgres_mongo.docker
Original file line number Diff line number Diff line change
@@ -1,38 +1,55 @@
ARG base_tag=17.0
FROM postgres:${base_tag}

ARG pg_version=17

# build stage
FROM docker.io/postgres:${base_tag} AS build

ARG pg_version

ARG MONGO_FDW_VERSION=5_5_2
ARG MONGO_FDW_URL=https://github.com/EnterpriseDB/mongo_fdw/archive/REL-${MONGO_FDW_VERSION}.tar.gz
ARG SOURCE_FILES=/tmp/mongo_fdw

RUN apt-get update;

ENV PKG_CONFIG_PATH=${SOURCE_FILES}/mongo-c-driver/src/libmongoc/src:${SOURCE_FILES}/mongo-c-driver/src/libbson/src
ENV LD_LIBRARY_PATH=/lib
ENV LD_LIBRARY_PATH=/usr/lib

RUN apt-get update && \
# compilation deps
RUN apt-get install -y --no-install-recommends wget ca-certificates \
apt-get install -y --no-install-recommends wget ca-certificates \
make gcc cmake pkg-config \
postgresql-server-dev-${pg_version} libssl-dev libzstd-dev libmongoc-dev libjson-c-dev; \
postgresql-server-dev-${pg_version} libssl-dev libzstd-dev libmongoc-dev libjson-c-dev \
# runtime deps
libsnappy1v5 libmongocrypt0 && \
# mongo_fdw
mkdir -p ${SOURCE_FILES}; \
wget -O - ${MONGO_FDW_URL} | tar -zx --strip-components=1 -C ${SOURCE_FILES}; \
cd ${SOURCE_FILES}; \
mkdir -p ${SOURCE_FILES} && \
wget -O - ${MONGO_FDW_URL} | tar -zx --strip-components=1 -C ${SOURCE_FILES} && \
cd ${SOURCE_FILES} && \
# install
./autogen.sh; \
make USE_PGXS=1; \
make USE_PGXS=1 install; \
# cleanup
apt-get purge -y --auto-remove wget ca-certificates \
make gcc cmake pkg-config \
postgresql-server-dev-${pg_version} libssl-dev libzstd-dev libmongoc-dev libjson-c-dev; \
cd -; \
rm -rf ${SOURCE_FILES}; \
# install runtime deps libraries
# for some reason `libsnappy1v5` is not compiled by default process even with `libsnappy-dev` installed
# other removed by the cleanup process above
apt-get install -y --no-install-recommends libsnappy1v5 libmongocrypt0; \
# final cleanup
rm -rf /var/lib/apt/lists/*;
./autogen.sh && \
make USE_PGXS=1 && \
make USE_PGXS=1 install;

# final stage
FROM docker.io/postgres:${base_tag}

ARG pg_version
ARG extdir=/usr/share/postgresql/${pg_version}/extension
ARG extlibdir=/usr/lib/postgresql/${pg_version}/lib
ARG libdir=/usr/lib
ARG libdir_gnu=/usr/lib/x86_64-linux-gnu

COPY --from=build ${extdir}/mongo_fdw* ${extdir}/
COPY --from=build ${extlibdir}/mongo_fdw.so ${extlibdir}/
COPY --from=build ${libdir}/libmongoc-1.0.so.0.0.0 ${libdir}/libbson-1.0.so.0.0.0 ${libdir}/
COPY --from=build ${libdir_gnu}/libmongocrypt.so.0.0.0 ${libdir_gnu}/libsnappy.so.1.1.9 ${libdir_gnu}/

RUN cd ${libdir} && \
ln -sf libmongoc-1.0.so.0.0.0 libmongoc-1.0.so.0 && \
ln -sf libmongoc-1.0.so.0 libmongoc-1.0.so && \
ln -sf libbson-1.0.so.0.0.0 libbson-1.0.so.0 && \
ln -sf libbson-1.0.so.0 libbson-1.0.so && \
cd ${libdir_gnu} && \
ln -sf libmongocrypt.so.0.0.0 libmongocrypt.so.0 && \
ln -sf libmongocrypt.so.0 libmongocrypt.so && \
ln -sf libsnappy.so.1.1.9 libsnappy.so.1 && \
ln -sf libsnappy.so.1 libsnappy.so;

0 comments on commit 333efba

Please sign in to comment.