Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 84 additions & 69 deletions pgpool.docker/Dockerfile.pgpool
Original file line number Diff line number Diff line change
@@ -1,77 +1,92 @@
FROM alpine:3.17
ARG registry=docker.io/library
ARG image=alpine:3.17

ARG PGPOOL_VER
#
# BASE
#
FROM ${registry}/${image} AS base

ENV PGPOOL_INSTALL_DIR /opt/pgpool-II
ENV PGPOOL_CONF_VOLUME /config
ARG PGPOOL_VER=4.4.3

ENV PGPOOL_INSTALL_DIR=/opt/pgpool-II \
PGPOOL_CONF_VOLUME=/config

# Create postgres user used to start Pgpool-II
RUN set -ex; \
addgroup -g 70 -S postgres; \
adduser -u 70 -S -D -G postgres -H -h /var/lib/pgsql -s /bin/sh postgres; \
mkdir -p /var/lib/pgsql; \
chown -R postgres:postgres /var/lib/pgsql
RUN set -ex; \
\
addgroup -g 70 -S postgres; \
adduser -u 70 -S -D -G postgres -H -h /var/lib/pgsql -s /bin/sh postgres; \
mkdir -p /var/lib/pgsql; \
chown -R postgres:postgres /var/lib/pgsql;

RUN apk add --no-cache \
bash \
postgresql \
openssl \
sed \
sudo \
libmemcached-dev


#
# BUILD
#
FROM base AS build

# Install packages
RUN set -eux \
\
&& apk add --no-cache --virtual fetch-dependencies \
ca-certificates \
tar \
\
&& apk add --no-cache --virtual build-dependencies \
bison \
flex \
file \
gcc \
g++ \
libbsd-doc \
linux-headers \
make \
patch \
openssl-dev \
\
&& apk add --no-cache \
bash \
postgresql \
postgresql-dev \
openssl \
sed \
sudo

COPY fix_compile_error.patch /tmp/pgpool/
COPY entrypoint.sh ${PGPOOL_INSTALL_DIR}/bin/
COPY start.sh ${PGPOOL_INSTALL_DIR}/bin/
RUN set -eux \
\
&& apk add --no-cache --virtual fetch-dependencies \
ca-certificates \
tar \
\
&& apk add --no-cache --virtual build-dependencies \
bison \
flex \
file \
gcc \
g++ \
libbsd-doc \
linux-headers \
make \
patch \
openssl-dev \
postgresql-dev

COPY fix_compile_error.patch /tmp/pgpool/

# Install Pgpool-II
RUN set -eux \
\
&& wget -O /tmp/pgpool.tar.gz "https://pgpool.net/mediawiki/images/pgpool-II-${PGPOOL_VER}.tar.gz" \
&& tar -zxf /tmp/pgpool.tar.gz -C /tmp/pgpool --strip-components 1 \
&& cd /tmp/pgpool \
&& patch -p1 < fix_compile_error.patch \
&& ./configure \
--prefix=${PGPOOL_INSTALL_DIR} \
--with-openssl \
&& make -j "$(nproc)" \
&& make install \
\
&& mkdir /var/run/pgpool \
&& mkdir /var/run/postgresql \
&& chown -R postgres:postgres /var/run/pgpool /var/run/postgresql ${PGPOOL_INSTALL_DIR} \
&& echo 'postgres ALL=NOPASSWD: /sbin/ip' | sudo EDITOR='tee -a' visudo >/dev/null 2>&1 \
&& echo 'postgres ALL=NOPASSWD: /usr/sbin/arping' | sudo EDITOR='tee -a' visudo >/dev/null 2>&1


RUN set -eux \
\
&& apk del --purge --rdepends fetch-dependencies build-dependencies \
&& rm -rf /tmp/*


USER postgres

ENTRYPOINT ["/opt/pgpool-II/bin/entrypoint.sh"]
CMD ["/opt/pgpool-II/bin/start.sh"]

EXPOSE 9999
RUN set -eux \
\
&& wget -O /tmp/pgpool.tar.gz "https://pgpool.net/mediawiki/images/pgpool-II-${PGPOOL_VER}.tar.gz" \
&& tar -zxf /tmp/pgpool.tar.gz -C /tmp/pgpool --strip-components 1 \
&& cd /tmp/pgpool \
&& patch -p1 < fix_compile_error.patch \
&& ./configure \
--prefix=${PGPOOL_INSTALL_DIR} \
--with-openssl \
--with-memcached=/usr/local \
&& make -j "$(nproc)" \
&& make install


#
# PACKAGE
#
FROM base AS package

COPY entrypoint.sh start.sh ${PGPOOL_INSTALL_DIR}/bin/
COPY --from=build \
${PGPOOL_INSTALL_DIR} ${PGPOOL_INSTALL_DIR}

RUN set -eux \
\
mkdir -p /var/run/pgpool /var/run/postgresql \
&& chown -R postgres:postgres /var/run/pgpool /var/run/postgresql ${PGPOOL_INSTALL_DIR} \
&& echo 'postgres ALL=NOPASSWD: /sbin/ip' | sudo EDITOR='tee -a' visudo >/dev/null 2>&1 \
&& echo 'postgres ALL=NOPASSWD: /usr/sbin/arping' | sudo EDITOR='tee -a' visudo >/dev/null 2>&1

USER postgres

ENTRYPOINT ["/opt/pgpool-II/bin/entrypoint.sh"]
CMD ["/opt/pgpool-II/bin/start.sh"]
14 changes: 14 additions & 0 deletions pgpool.docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
# -*- coding: utf-8 -*-

DIR="$(cd "$(dirname "${0}")" && pwd)"
PGPOOL_VER=${PGPOOL_VER:-4.4.3}
PGPOOL_IMG=${PGPOOL_IMG:-pgpool/pgpool}

docker image build \
-f ${DIR}/Dockerfile.pgpool \
-t ${PGPOOL_IMG}:${PGPOOL_VER} \
--build-args PGPOOL_VER=${PGPOOL_VER} \
${DIR}/

docker image push ${PGPOOL_IMG}:${PGPOOL_VER}