-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Niccolò Fei <[email protected]> Co-authored-by: Niccolò Fei <[email protected]> Co-authored-by: EnterpriseDB Automated Updates <[email protected]>
- Loading branch information
1 parent
d80b216
commit bcec138
Showing
52 changed files
with
3,780 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"BARMAN_VERSION": "3.8.0", | ||
"DEBIAN_IMAGE_VERSION": "buster-20230919-slim", | ||
"IMAGE_RELEASE_VERSION": "1", | ||
"POSTGRES_VERSION": "16.0-1.pgdg100+1" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
# vim:set ft=dockerfile: | ||
FROM debian:buster-20230919-slim | ||
|
||
# Do not split the description, otherwise we will see a blank space in the labels | ||
LABEL name="PostgreSQL Container Images" \ | ||
vendor="EnterpriseDB" \ | ||
url="https://www.enterprisedb.com/" \ | ||
version="16.0-1.pgdg100+1" \ | ||
release="1" \ | ||
summary="PostgreSQL Container images." \ | ||
description="This Docker image contains PostgreSQL and Barman Cloud based on Debian buster-slim." | ||
|
||
COPY root/ / | ||
|
||
RUN set -ex; \ | ||
if ! command -v gpg > /dev/null; then \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
gnupg \ | ||
dirmngr \ | ||
; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
fi | ||
|
||
# explicitly set user/group IDs | ||
RUN set -eux; \ | ||
groupadd -r postgres --gid=999; \ | ||
# https://salsa.debian.org/postgresql/postgresql-common/blob/997d842ee744687d99a2b2d95c1083a2615c79e8/debian/postgresql-common.postinst#L32-35 | ||
useradd -r -g postgres --uid=26 --home-dir=/var/lib/postgresql --shell=/bin/bash postgres; \ | ||
# also create the postgres user's home directory with appropriate permissions | ||
# see https://github.com/docker-library/postgres/issues/274 | ||
mkdir -p /var/lib/postgresql; \ | ||
chown -R postgres:postgres /var/lib/postgresql | ||
|
||
# grab gosu for easy step-down from root | ||
# https://github.com/tianon/gosu/releases | ||
ENV GOSU_VERSION 1.14 | ||
RUN set -eux; \ | ||
savedAptMark="$(apt-mark showmanual)"; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends ca-certificates wget; \ | ||
rm -rf /var/lib/apt/lists/*; \ | ||
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \ | ||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \ | ||
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \ | ||
export GNUPGHOME="$(mktemp -d)"; \ | ||
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \ | ||
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \ | ||
gpgconf --kill all; \ | ||
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \ | ||
apt-mark auto '.*' > /dev/null; \ | ||
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \ | ||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | ||
chmod +x /usr/local/bin/gosu; \ | ||
gosu --version; \ | ||
gosu nobody true | ||
|
||
# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default | ||
RUN set -eux; \ | ||
if [ -f /etc/dpkg/dpkg.cfg.d/docker ]; then \ | ||
# if this file exists, we're likely in "debian:xxx-slim", and locales are thus being excluded so we need to remove that exclusion (since we need locales) | ||
grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; \ | ||
sed -ri '/\/usr\/share\/locale/d' /etc/dpkg/dpkg.cfg.d/docker; \ | ||
! grep -q '/usr/share/locale' /etc/dpkg/dpkg.cfg.d/docker; \ | ||
fi; \ | ||
apt-get update; apt-get install -y --no-install-recommends locales; rm -rf /var/lib/apt/lists/*; \ | ||
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 | ||
ENV LANG en_US.utf8 | ||
|
||
RUN set -eux; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
libnss-wrapper \ | ||
xz-utils \ | ||
zstd \ | ||
; \ | ||
rm -rf /var/lib/apt/lists/* | ||
|
||
RUN mkdir /docker-entrypoint-initdb.d | ||
|
||
RUN set -ex; \ | ||
# pub 4096R/ACCC4CF8 2011-10-13 [expires: 2019-07-02] | ||
# Key fingerprint = B97B 0AFC AA1A 47F0 44F2 44A0 7FCC 7D46 ACCC 4CF8 | ||
# uid PostgreSQL Debian Repository | ||
key='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8'; \ | ||
export GNUPGHOME="$(mktemp -d)"; \ | ||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \ | ||
gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/postgres.gpg; \ | ||
command -v gpgconf > /dev/null && gpgconf --kill all; \ | ||
rm -rf "$GNUPGHOME"; \ | ||
apt-key list | ||
|
||
ENV PG_MAJOR 16 | ||
ENV PG_VERSION 16.0-1.pgdg100+1 | ||
|
||
RUN set -ex; \ | ||
echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main $PG_MAJOR" > /etc/apt/sources.list.d/pgdg.list; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends postgresql-common; \ | ||
sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-common/createcluster.conf; \ | ||
apt-get install -y --no-install-recommends \ | ||
"postgresql-$PG_MAJOR=$PG_VERSION" \ | ||
"postgresql-$PG_MAJOR-pgaudit" \ | ||
"postgresql-$PG_MAJOR-pg-failover-slots" \ | ||
; \ | ||
\ | ||
rm -fr /tmp/* ; \ | ||
rm -rf /var/lib/apt/lists/*; | ||
|
||
# Install barman-cloud | ||
RUN set -xe; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
python3-pip \ | ||
python3-psycopg2 \ | ||
python3-setuptools \ | ||
; \ | ||
pip3 install --upgrade pip; \ | ||
# TODO: Remove --no-deps once https://github.com/pypa/pip/issues/9644 is solved | ||
pip3 install --no-deps -r requirements.txt; \ | ||
rm -rf /var/lib/apt/lists/*; | ||
|
||
# make the sample config easier to munge (and "correct by default") | ||
RUN set -eux; \ | ||
dpkg-divert --add --rename --divert "/usr/share/postgresql/postgresql.conf.sample.dpkg" "/usr/share/postgresql/$PG_MAJOR/postgresql.conf.sample"; \ | ||
cp -v /usr/share/postgresql/postgresql.conf.sample.dpkg /usr/share/postgresql/postgresql.conf.sample; \ | ||
ln -sv ../postgresql.conf.sample "/usr/share/postgresql/$PG_MAJOR/"; \ | ||
sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/share/postgresql/postgresql.conf.sample; \ | ||
grep -F "listen_addresses = '*'" /usr/share/postgresql/postgresql.conf.sample | ||
|
||
RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql | ||
|
||
ENV PATH $PATH:/usr/lib/postgresql/$PG_MAJOR/bin | ||
ENV PGDATA /var/lib/postgresql/data | ||
# this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values) | ||
RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA" | ||
VOLUME /var/lib/postgresql/data | ||
|
||
# DoD 2.3 - remove setuid/setgid from any binary that not strictly requires it, and before doing that list them on the stdout | ||
RUN find / -not -path "/proc/*" -perm /6000 -type f -exec ls -ld {} \; -exec chmod a-s {} \; || true | ||
|
||
USER 26 | ||
|
||
ENTRYPOINT ["docker-entrypoint.sh"] | ||
|
||
# We set the default STOPSIGNAL to SIGINT, which corresponds to what PostgreSQL | ||
# calls "Fast Shutdown mode" wherein new connections are disallowed and any | ||
# in-progress transactions are aborted, allowing PostgreSQL to stop cleanly and | ||
# flush tables to disk, which is the best compromise available to avoid data | ||
# corruption. | ||
# | ||
# Users who know their applications do not keep open long-lived idle connections | ||
# may way to use a value of SIGTERM instead, which corresponds to "Smart | ||
# Shutdown mode" in which any existing sessions are allowed to finish and the | ||
# server stops when all sessions are terminated. | ||
# | ||
# See https://www.postgresql.org/docs/12/server-shutdown.html for more details | ||
# about available PostgreSQL server shutdown signals. | ||
# | ||
# See also https://www.postgresql.org/docs/12/server-start.html for further | ||
# justification of this as the default value, namely that the example (and | ||
# shipped) systemd service files use the "Fast Shutdown mode" for service | ||
# termination. | ||
# | ||
STOPSIGNAL SIGINT | ||
# | ||
# An additional setting that is recommended for all users regardless of this | ||
# value is the runtime "--stop-timeout" (or your orchestrator/runtime's | ||
# equivalent) for controlling how long to wait between sending the defined | ||
# STOPSIGNAL and sending SIGKILL (which is likely to cause data corruption). | ||
# | ||
# The default in most runtimes (such as Docker) is 10 seconds, and the | ||
# documentation at https://www.postgresql.org/docs/12/server-start.html notes | ||
# that even 90 seconds may not be long enough in many instances. | ||
|
||
EXPOSE 5432 | ||
CMD ["postgres"] |
Oops, something went wrong.